help="Specify the set of hostnames for the boxes that host the nodes")
parser.add_option("-N","--nodes",action="append", dest="ips_vnode", default=[],
help="Specify the set of hostname/IP's to use for vnodes")
- parser.add_option ('-X', "--lxc",action='store_true',dest='plcs_use_lxc',default=True,
- help='use lxc-enabled plc boxes instead of vs-enabled ones')
- parser.add_option ('-S', "--vs",action='store_false',dest='plcs_use_lxc',
- help='use lxc-enabled plc boxes instead of vs-enabled ones')
parser.add_option("-s","--size",action="store",type="int",dest="size",default=1,
help="sets test size in # of plcs - default is 1")
parser.add_option("-q","--qualifier",action="store",type="int",dest="qualifier",default=None,
('personality','arg-personality',"linux64",None),
('pldistro','arg-pldistro',"onelab",None),
('fcdistro','arg-fcdistro','f14',None),
- ('plcs_use_lxc','arg-plcs-use-lxc',False,None),
) :
# print 'handling',recname
path=filename
if self.options.list_steps:
self.init_steps()
self.list_steps()
- return True
+ return 'SUCCESS'
# steps
if not self.options.steps:
self.options.exclude = [ step.replace('-','_') for step in self.options.exclude ]
self.options.ignore = [ step.replace('-','_') for step in self.options.ignore ]
+ # technicality, decorate known steps to produce the '_ignore' version
TestPlc.create_ignore_steps()
# exclude
raise
# provision on local substrate
- if self.options.plcs_use_lxc: LocalSubstrate.local_substrate.rescope (plcs_on_vs=False, plcs_on_lxc=True)
all_plc_specs = LocalSubstrate.local_substrate.provision(all_plc_specs,self.options)
# remember substrate IP address(es) for next run
# pass options to utils as well
utils.init_options(self.options)
- overall_result = True
+ overall_result = 'SUCCESS'
all_step_infos=[]
for step in self.options.steps:
if not TestPlc.valid_step(step):
except :
utils.header("********** FAILED step %s (NOT FOUND) -- won't be run"%step)
traceback.print_exc()
- overall_result = False
+ overall_result = 'FAILURE'
if self.options.dry_run:
self.show_env(self.options,"Dry run")
skip_step=True
elif answer in ['q','b']: # quit/bye
print 'Exiting'
- return
+ return 'FAILURE'
elif answer in ['d']: # dry_run
dry_run=self.options.dry_run
self.options.dry_run=True
else: step_result = method(plc_obj,across_plcs)
if isinstance (step_result,Ignored):
step_result=step_result.result
- msg="OK" if step_result else "KO"
+ if step_result:
+ msg="OK"
+ else:
+ msg="KO"
+ # do not overwrite if FAILURE
+ if overall_result=='SUCCESS':
+ overall_result='IGNORED'
utils.header('********** %d IGNORED (%s) step %s on %s'%(plc_counter,msg,stepname,plcname))
- status="I[%s]"%msg
+ status="%s[I]"%msg
elif step_result:
utils.header('********** %d SUCCESSFUL step %s on %s'%(plc_counter,stepname,plcname))
status="OK"
else:
- overall_result = False
+ overall_result = 'FAILURE'
spec['failed_step'] = stepname
utils.header('********** %d FAILED Step %s on %s (discarded from further steps)'\
%(plc_counter,stepname,plcname))
status="KO"
except:
- overall_result=False
+ overall_result='FAILURE'
spec['failed_step'] = stepname
traceback.print_exc()
utils.header ('********** %d FAILED (exception) Step %s on %s (discarded from further steps)'\
return overall_result
# wrapper to run, returns a shell-compatible result
+ # retcod:
+ # 0: SUCCESS
+ # 1: FAILURE
+ # 2: SUCCESS but some ignored steps failed
+ # 3: OTHER ERROR
def main(self):
try:
success=self.run()
- if success:
- return 0
- else:
- return 1
+ if success == 'SUCCESS': return 0
+ elif success == 'IGNORED': return 2
+ else: return 1
except SystemExit:
print 'Caught SystemExit'
- raise
+ return 3
except:
traceback.print_exc()
- return 2
+ return 3
if __name__ == "__main__":
- sys.exit(TestMain().main())
+ exit_code = TestMain().main()
+ print "TestMain exit code",exit_code
+ sys.exit(exit_code)