X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTestMain.py;h=ff6098f73646c62ade15b9f5ad25e9dcb420084a;hb=de7d5e8f60adaa9fc3d16efa80eee4968546c839;hp=81d29a74b05149a0dbf7eaba34acf85fc644435a;hpb=d187ad29a38e815cb521b746be0c304285e6c713;p=tests.git diff --git a/system/TestMain.py b/system/TestMain.py index 81d29a7..ff6098f 100755 --- a/system/TestMain.py +++ b/system/TestMain.py @@ -286,7 +286,7 @@ steps refer to a method in TestPlc or to a step_* module if self.options.list_steps: self.init_steps() self.list_steps() - return True + return 'SUCCESS' # steps if not self.options.steps: @@ -299,6 +299,7 @@ steps refer to a method in TestPlc or to a step_* module 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 @@ -372,7 +373,7 @@ steps refer to a method in TestPlc or to a step_* module # 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): @@ -399,7 +400,7 @@ steps refer to a method in TestPlc or to a step_* module 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") @@ -441,7 +442,7 @@ steps refer to a method in TestPlc or to a step_* module 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 @@ -469,20 +470,26 @@ steps refer to a method in TestPlc or to a step_* module 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="%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)'\ @@ -512,19 +519,24 @@ steps refer to a method in TestPlc or to a step_* module 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() + sys.exit(exit_code)