from PlcapiUrlScanner import PlcapiUrlScanner
from Completer import Completer, CompleterTask
+has_sfa_cache_filename="sfa-cache"
+
# step methods must take (self) and return a boolean (options is a member of the class)
def standby(minutes,dry_run):
return actual
def node_mapper (method):
- def actual(self,*args, **kwds):
+ def map_on_nodes(self,*args, **kwds):
overall=True
node_method = TestNode.__dict__[method.__name__]
for test_node in self.all_nodes():
if not node_method(test_node, *args, **kwds): overall=False
return overall
+ # maintain __name__ for ignore_result
+ map_on_nodes.__name__=method.__name__
# restore the doc text
- actual.__doc__=TestNode.__dict__[method.__name__].__doc__
- return actual
+ map_on_nodes.__doc__=TestNode.__dict__[method.__name__].__doc__
+ return map_on_nodes
def slice_mapper (method):
- def actual(self):
+ def map_on_slices(self):
overall=True
slice_method = TestSlice.__dict__[method.__name__]
for slice_spec in self.plc_spec['slices']:
test_slice=TestSlice(self,test_site,slice_spec)
if not slice_method(test_slice,self.options): overall=False
return overall
+ # maintain __name__ for ignore_result
+ map_on_slices.__name__=method.__name__
# restore the doc text
- actual.__doc__=TestSlice.__dict__[method.__name__].__doc__
- return actual
+ map_on_slices.__doc__=TestSlice.__dict__[method.__name__].__doc__
+ return map_on_slices
# run a step but return True so that we can go on
def ignore_result (method):
- def wrappee (self):
+ def ignoring (self):
# ssh_slice_ignore->ssh_slice
ref_name=method.__name__.replace('_ignore','').replace('force_','')
ref_method=TestPlc.__dict__[ref_name]
result=ref_method(self)
print "Actual (but ignored) result for %(ref_name)s is %(result)s"%locals()
return Ignored (result)
- wrappee.__doc__="ignored version of " + method.__name__.replace('_ignore','').replace('ignore_','')
- return wrappee
+ name=method.__name__.replace('_ignore','').replace('force_','')
+ ignoring.__name__=name
+ ignoring.__doc__="ignored version of " + name
+ return ignoring
# a variant that expects the TestSlice method to return a list of CompleterTasks that
# are then merged into a single Completer run to avoid wating for all the slices
'nodestate_reinstall', 'qemu_local_init','bootcd', 'qemu_local_config', SEP,
'qemu_clean_mine', 'qemu_export', 'qemu_start', 'qemu_timestamp', SEP,
'sfa_install_all', 'sfa_configure', 'cross_sfa_configure', 'sfa_start', 'sfa_import', SEPSFA,
- 'sfi_configure@1', 'sfa_add_site@1','sfa_add_pi@1', SEPSFA,
- 'sfa_add_user@1', 'sfa_update_user@1', 'sfa_add_slice@1', 'sfa_renew_slice@1', SEPSFA,
+ 'sfi_configure@1', 'sfa_register_site@1','sfa_register_pi@1', SEPSFA,
+ 'sfa_register_user@1', 'sfa_update_user@1', 'sfa_register_slice@1', 'sfa_renew_slice@1', SEPSFA,
+ 'sfa_remove_user_from_slice@1','sfi_show_slice_researchers@1',
+ 'sfa_insert_user_in_slice@1','sfi_show_slice_researchers@1', SEPSFA,
'sfa_discover@1', 'sfa_create_slice@1', 'sfa_check_slice_plc@1', 'sfa_update_slice@1', SEPSFA,
- 'sfi_list@1', 'sfi_show@1', 'sfa_utest@1', SEPSFA,
+ 'sfi_list@1', 'sfi_show_site@1', 'sfa_utest@1', SEPSFA,
# we used to run plcsh_stress_test, and then ssh_node_debug and ssh_node_boot
# but as the stress test might take a while, we sometimes missed the debug mode..
+ 'probe_kvm_iptables',
'ping_node', 'ssh_node_debug', 'plcsh_stress_test@1', SEP,
'ssh_node_boot', 'node_bmlogs', 'ssh_slice', 'ssh_slice_basics', 'check_initscripts_ignore', SEP,
'ssh_slice_sfa@1', 'sfa_delete_slice@1', 'sfa_delete_user@1', SEPSFA,
'cross_check_tcp@1', 'check_system_slice', SEP,
# check slices are turned off properly
- 'empty_slices', 'ssh_slice_off', SEP,
+ 'empty_slices', 'ssh_slice_off', 'slice_fs_deleted_ignore', SEP,
# check they are properly re-created with the same name
'fill_slices', 'ssh_slice_again_ignore', SEP,
'gather_logs_force', SEP,
'sfa_plcclean', 'sfa_dbclean', 'sfa_stop','sfa_uninstall', 'sfi_clean', SEPSFA,
'plc_db_dump' , 'plc_db_restore', SEP,
'check_netflow','check_drl', SEP,
- 'debug_nodemanager', SEP,
+ 'debug_nodemanager', 'slice_fs_present', SEP,
'standby_1_through_20','yes','no',SEP,
]
# this was originally for centos5 but is still valid
# for up to f12 as recent SFAs with sqlalchemy won't build before f14
@staticmethod
- def check_whether_build_has_sfa (rpms_url):
- utils.header ("Checking if build provides SFA package...")
+ def _has_sfa_cached (rpms_url):
+ if os.path.isfile(has_sfa_cache_filename):
+ cached=file(has_sfa_cache_filename).read()=="yes"
+ utils.header("build provides SFA (cached):%s"%cached)
+ return cached
# warning, we're now building 'sface' so let's be a bit more picky
- retcod=os.system ("curl --silent %s/ | grep -q sfa-"%rpms_url)
# full builds are expected to return with 0 here
- if retcod==0:
+ utils.header ("Checking if build provides SFA package...")
+ retcod=os.system ("curl --silent %s/ | grep -q sfa-"%rpms_url)==0
+ encoded='yes' if retcod else 'no'
+ file(has_sfa_cache_filename,'w').write(encoded)
+ return retcod
+
+ @staticmethod
+ def check_whether_build_has_sfa (rpms_url):
+ has_sfa=TestPlc._has_sfa_cached(rpms_url)
+ if has_sfa:
utils.header("build does provide SFA")
else:
# move all steps containing 'sfa' from default_steps to other_steps
for key in val:
self.display_key_spec (key)
elif passno == 1:
- if key not in ['sites','initscripts','slices','keys', 'sfa']:
+ if key not in ['sites','initscripts','slices','keys']:
print '+ ',key,':',val
def display_site_spec (self,site):
def nodes_booted(self):
return self.nodes_check_boot_state('boot',timeout_minutes=30,silent_minutes=28)
+ def probe_kvm_iptables (self):
+ (_,kvmbox) = self.all_node_infos()[0]
+ TestSsh(kvmbox).run("iptables-save")
+ return True
+
# probing nodes
def check_nodes_ping(self,timeout_seconds=120,period_seconds=10):
class CompleterTaskPingNode (CompleterTask):
@slice_mapper
def ssh_slice_basics(self): pass
-
+ @slice_mapper
+ def slice_fs_present(self): pass
+ @slice_mapper
+ def slice_fs_deleted(self): pass
@slice_mapper
def check_vsys_defaults(self): pass
return True
@auth_sfa_mapper
- def sfa_add_site (self): pass
+ def sfa_register_site (self): pass
@auth_sfa_mapper
- def sfa_add_pi (self): pass
+ def sfa_register_pi (self): pass
@auth_sfa_mapper
- def sfa_add_user(self): pass
+ def sfa_register_user(self): pass
@auth_sfa_mapper
def sfa_update_user(self): pass
@auth_sfa_mapper
- def sfa_add_slice(self): pass
+ def sfa_register_slice(self): pass
@auth_sfa_mapper
def sfa_renew_slice(self): pass
@auth_sfa_mapper
@auth_sfa_mapper
def sfa_update_slice(self): pass
@auth_sfa_mapper
+ def sfa_remove_user_from_slice(self): pass
+ @auth_sfa_mapper
+ def sfa_insert_user_in_slice(self): pass
+ @auth_sfa_mapper
def sfi_list(self): pass
@auth_sfa_mapper
- def sfi_show(self): pass
+ def sfi_show_site(self): pass
+ @auth_sfa_mapper
+ def sfi_show_slice(self): pass
+ @auth_sfa_mapper
+ def sfi_show_slice_researchers(self): pass
@auth_sfa_mapper
def ssh_slice_sfa(self): pass
@auth_sfa_mapper