X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTestSlice.py;h=f5049d3b471a8b90ed65975cd95a49a2ff2f13e9;hb=55177a1292ca841809a3194015d32f76f1f0420c;hp=f5d1e33a21b860ad5a8d5987f0db06e6a9464805;hpb=6832973dbd076e2b3e87705da5bb227489362233;p=tests.git diff --git a/system/TestSlice.py b/system/TestSlice.py index f5d1e33..f5049d3 100644 --- a/system/TestSlice.py +++ b/system/TestSlice.py @@ -8,11 +8,11 @@ import time from TestKey import TestKey from TestUser import TestUser -from TestNode import TestNode +from TestNode import TestNode, CompleterTaskNodeSsh from TestSsh import TestSsh from Completer import Completer, CompleterTask -class CompleterTaskSshSlice (CompleterTask): +class CompleterTaskSliceSsh (CompleterTask): def __init__ (self, test_plc, hostname, slicename, private_key,command, expected, dry_run): self.test_plc=test_plc @@ -113,7 +113,7 @@ class TestSlice: hostnames=[] for nodename in self.slice_spec['nodenames']: node_spec=self.test_site.locate_node(nodename) - test_node=TestNode(self,self.test_site,node_spec) + test_node=TestNode(self.test_plc,self.test_site,node_spec) hostnames += [test_node.name()] utils.header("Adding %r in %s"%(hostnames,slice_name)) self.test_plc.apiserver.AddSliceToNodes(auth, slice_name, hostnames) @@ -143,7 +143,7 @@ class TestSlice: key_names += user_spec['key_names'] return self.test_plc.locate_private_key_from_key_names (key_names) - # to be used through TestPlc.slice_mapper_tasks + # for TestPlc.slice_mapper__tasks # i.e. returns a list of CompleterTasks that are merged into the same Completer run # to avoid waiting for as many slices as the Plc has # also the __doc__ lines are used for the TestPlc methods, e.g. just 'ssh_slice' @@ -179,7 +179,7 @@ class TestSlice: dry_run = getattr(options,'dry_run',False) for nodename in self.slice_spec['nodenames']: (site_spec,node_spec) = self.test_plc.locate_node(nodename) - tasks.append( CompleterTaskSshSlice(self.test_plc,node_spec['node_fields']['hostname'], + tasks.append( CompleterTaskSliceSsh(self.test_plc,node_spec['node_fields']['hostname'], slicename,private_key,command,expected,dry_run)) return tasks # return Completer (tasks).run (timeout, graceout, period) @@ -191,6 +191,7 @@ class TestSlice: if not self.do_ssh_slice_once(options,expected=False, command='false'): overall=False if not self.do_ssh_slice_once(options,expected=False, command='someimprobablecommandname'): overall=False if not self.do_ssh_slice_once(options,expected=True, command='ps'): overall=False + if not self.do_ssh_slice_once(options,expected=False, command='ls /vservers'): overall=False return overall # pick just one nodename and runs the ssh command once @@ -220,3 +221,29 @@ class TestSlice: else: success = retcod!=0 if not success: utils.header ("WRONG RESULT for %s"%msg) return success + + # for TestPlc.slice_mapper__tasks + # check that /vservers/<> is present/deleted + def slice_fs_present__tasks (self, options): + "checks that /vservers/ exists on the filesystem" + return self.check_rootfs_tasks(options,expected=True) + def slice_fs_deleted__tasks (self, options): + "checks that /vservers/ has been properly wiped off" + return self.check_rootfs_tasks (options,expected=False) + + def check_rootfs_tasks (self, options, expected): + # use constant admin key + local_key = "keys/key_admin.rsa" + node_infos = self.test_plc.all_node_infos() + rootfs="/vservers/%s"%self.name() + if expected: + failure_message = "Could not stat %s"%rootfs + else: + failure_message = "Sliver rootfs still present in %s"%rootfs + class CompleterTaskRootfs (CompleterTaskNodeSsh): + def __init__ (self, nodename, qemuname): + CompleterTaskNodeSsh.__init__(self,nodename, qemuname, local_key, expected=expected, + message=failure_message, command="ls -d %s"%rootfs) + def failure_epilogue (self): + utils.system(self.test_ssh.actual_command("ls -l %s; du -hs %s"%(rootfs,rootfs),dry_run=self.dry_run)) + return [ CompleterTaskRootfs (nodename, qemuname) for (nodename,qemuname) in node_infos ]