From ebcbcb01d4bf1085500bf53d1fe962ac9d273912 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 18 Aug 2008 16:55:04 +0000 Subject: [PATCH 1/1] first step towards integrating http://svn.planet-lab.org/svn/tests/trunk/qaapi/qa/tests/node/ can run tests in the node's root context so far (vsys_launch.pl is hardwired) tests in a slice to be implemented later on (is simpler) also waiting for tony's answer as to the place to store these scripts on the long run --- system/TestKey.py | 22 +++++++++++----------- system/TestNode.py | 26 +++++++++++++++++++++++++- system/TestPlc.py | 27 +++++++++++++++++++++++---- system/TestSlice.py | 4 ++++ system/TestSsh.py | 3 +++ 5 files changed, 66 insertions(+), 16 deletions(-) diff --git a/system/TestKey.py b/system/TestKey.py index 4df0b48..d1af805 100644 --- a/system/TestKey.py +++ b/system/TestKey.py @@ -17,17 +17,17 @@ class TestKey: def privatepath(self): return "keys/%s.rsa"%(self.name()) - def store_remote_key(self,hostname): - #Not tested yet, don't know if needed - pub=self.publicpath() - priv=self.privatepath() - utils.header("Storing key %s in %s into %s "%(self.name(),pub,hostname)) - dir=os.path.dirname(pub) - self.test_ssh.run("mkdir %s"%dir) - self.test_ssh.run("cat %s >> %s"%(self.key_spec['key_fields']['key'],pub)) - self.test_ssh.run("cat %s >> %s"%(self.key_spec['private'],priv)) - self.test_ssh.run("chmod %s 0400"%priv) - self.test_ssh.run("chmod %s 0444"%pub) +#Not tested yet, don't know if needed +# def store_remote_key(self,hostname): +# pub=self.publicpath() +# priv=self.privatepath() +# utils.header("Storing key %s in %s into %s "%(self.name(),pub,hostname)) +# dir=os.path.dirname(pub) +# self.test_ssh.run("mkdir %s"%dir) +# self.test_ssh.run("cat %s >> %s"%(self.key_spec['key_fields']['key'],pub)) +# self.test_ssh.run("cat %s >> %s"%(self.key_spec['private'],priv)) +# self.test_ssh.run("chmod %s 0400"%priv) +# self.test_ssh.run("chmod %s 0444"%pub) def store_key(self): pub=self.publicpath() diff --git a/system/TestNode.py b/system/TestNode.py index 7cc3602..f990e71 100644 --- a/system/TestNode.py +++ b/system/TestNode.py @@ -1,4 +1,4 @@ -import os, sys, time, base64 +import sys, os, os.path, time, base64 import xmlrpclib import utils @@ -208,3 +208,27 @@ class TestNode: def clear_known_hosts (self): TestSsh(self.name()).clear_known_hosts() return True + + def check_sanity_node_script (self,local_script): + # get the plc's keys for entering the node + vservername=self.test_plc.vservername + key = "keys/%(vservername)s.rsa"%locals() + # push the script on the node's root context + ssh_handle = TestSsh(self.name(), + buildname=self.buildname(), + key=key) + ssh_handle.copy_home(local_script) + if ssh_handle.run("./"+os.path.basename(local_script)) != 0: + print "WARNING: sanity check script %s FAILED" + # xxx - temporary : always return true for now + #return False + return True + + def check_sanity_node (self): + # locate the relevant scripts - xxx + scripts = [ 'tests/qaapi/qa/tests/node/vsys_launch.pl' ] + overall = True + for script in scripts: + if not self.check_sanity_node_script (script): + overall = False + return overall diff --git a/system/TestPlc.py b/system/TestPlc.py index 590aab9..1deb7a7 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -63,13 +63,13 @@ SEP='' class TestPlc: default_steps = ['uninstall','install','install_rpm', - 'configure', 'start', SEP, + 'configure', 'start', 'fetch_keys', SEP, 'store_keys', 'clear_known_hosts', 'initscripts', SEP, 'sites', 'nodes', 'slices', 'nodegroups', SEP, 'init_node','bootcd', 'configure_qemu', 'export_qemu', 'kill_all_qemus', 'reinstall_node','start_node', SEP, - 'nodes_booted', 'nodes_ssh', 'check_slice', - 'check_initscripts', 'check_tcp', 'plcsh_stress_test', SEP, + 'nodes_booted', 'nodes_ssh', 'check_slice', 'check_initscripts', SEP, + 'check_sanity', 'check_tcp', 'plcsh_stress_test', SEP, 'force_gather_logs', 'force_kill_qemus', 'force_record_tracker','force_free_tracker' ] other_steps = [ 'stop_all_vservers','fresh_install', 'cache_rpm', 'stop', 'vs_start', SEP, 'clean_initscripts', 'clean_nodegroups','clean_all_sites', SEP, @@ -361,7 +361,7 @@ class TestPlc: self.start_guest() return True - # could use a TestKey class + # stores the keys from the config for further use def store_keys(self): for key_spec in self.plc_spec['keys']: TestKey(self,key_spec).store_key() @@ -370,6 +370,17 @@ class TestPlc: def clean_keys(self): utils.system("rm -rf %s/keys/"%os.path(sys.argv[0])) + # fetches the ssh keys in the plc's /etc/planetlab and stores them in keys/ + # for later direct access to the nodes + def fetch_keys(self): + prefix = 'root_ssh_key' + vservername=self.vservername + for ext in [ 'pub', 'rsa' ] : + src="/vservers/%(vservername)s/etc/planetlab/%(prefix)s.%(ext)s"%locals() + dst="keys/%(vservername)s.%(ext)s"%locals() + self.run_in_guest_piped + self.test_ssh.fetch(src,dst) + def sites (self): return self.do_sites() @@ -596,6 +607,14 @@ class TestPlc: @node_mapper def export_qemu (self): pass + @node_mapper + def check_sanity_node (self): pass + @slice_mapper_options + def check_sanity_slice (self) : pass + + def check_sanity (self): + return self.check_sanity_node() and self.check_sanity_slice() + def do_check_initscripts(self): overall = True for slice_spec in self.plc_spec['slices']: diff --git a/system/TestSlice.py b/system/TestSlice.py index 3ec6cb7..fb8935f 100644 --- a/system/TestSlice.py +++ b/system/TestSlice.py @@ -129,3 +129,7 @@ class TestSlice: time.sleep (period) # for an empty slice return True + + def check_sanity_slice (self): + print 'TestSlice.check_sanity_slice (run scripts in slice): XXX todo' + return True diff --git a/system/TestSsh.py b/system/TestSsh.py index f523843..6f11344 100644 --- a/system/TestSsh.py +++ b/system/TestSsh.py @@ -140,6 +140,9 @@ class TestSsh: scp_command += "%s %s%s"%(local_file,dest,remote_file) return utils.system(scp_command) + def copy_home (self, local_file, recursive=False): + return self.copy_abs(local_file,os.path.basename(local_file),recursive) + def fetch (self, remote_file, local_file, recursive=False): if self.is_local(): command="cp " -- 2.43.0