[libvirt] [test-API][PATCH 1/3] add new "clean" keyword to clean environment after each testcase

testcase1 option1 avalue option2 bvalue clean testcase2 option1 cvalue option2 dvalue clean --- generator.py | 44 ++++++++++++++++++++++++++++++++------------ 1 files changed, 32 insertions(+), 12 deletions(-) diff --git a/generator.py b/generator.py index 5a3a2ab..2d59353 100644 --- a/generator.py +++ b/generator.py @@ -41,6 +41,7 @@ class FuncGen(object): self.lockfile = lockfile self.bugstxt = bugstxt self.loglevel = loglevel + self.testcase_number = 0 self.fmt = format.Format(logfile) self.log_xml_parser = log_xml_parser @@ -49,19 +50,21 @@ class FuncGen(object): self.__case_info_save(activity, testrunid) mapper_obj = mapper.Mapper(activity) - pkg_tripped_cases = mapper_obj.get_package_tripped() + pkg_casename_func = mapper_obj.package_casename_func_map() - for test_procedure in pkg_tripped_cases: + for test_procedure in pkg_casename_func: log_xml_parser.add_testprocedure_xml(testrunid, testid, test_procedure) self.cases_ref_names = [] - for case in pkg_tripped_cases: + for case in pkg_casename_func: case_ref_name = case.keys()[0] + if case_ref_name[-6:] != "_clean": + self.testcase_number += 1 self.cases_ref_names.append(case_ref_name) self.cases_params_list = [] - for case in pkg_tripped_cases: + for case in pkg_casename_func: case_params = case.values()[0] self.cases_params_list.append(case_params) @@ -101,7 +104,7 @@ class FuncGen(object): envlog = log.EnvLog(self.logfile, self.loglevel) logger = envlog.env_log() - testcase_number = len(self.cases_ref_names) + loop_number = len(self.cases_ref_names) start_time = time.strftime("%Y-%m-%d %H:%M:%S") logger.info("Checking Testing Environment... ") @@ -111,7 +114,7 @@ class FuncGen(object): sys.exit(1) else: logger.info("\nStart Testing:") - logger.info(" Case Count: %s" % testcase_number) + logger.info(" Case Count: %s" % self.testcase_number) logger.info(" Log File: %s\n" % self.logfile) del envlog @@ -119,21 +122,31 @@ class FuncGen(object): logger = caselog.case_log() retflag = 0 - for i in range(testcase_number): + for i in range(loop_number): case_ref_name = self.cases_ref_names[i] - self.fmt.printf('start', case_ref_name) + pkg_casename = case_ref_name.rpartition(":")[0] + funcname = case_ref_name.rpartition(":")[-1] + + cleanoper = 0 if "_clean" not in funcname else 1 + + if not cleanoper: + self.fmt.printf('start', pkg_casename) + else: + self.fmt.printf('string', 12*" " + "Cleaning...") + case_params = self.cases_params_list[i] case_start_time = time.strftime("%Y-%m-%d %H:%M:%S") ret = -1 + clean_ret = -1 try: try: if case_ref_name != 'sleep': case_params['logger'] = logger - existed_bug_list = self.bug_check(case_ref_name) + existed_bug_list = self.bug_check(pkg_casename) if len(existed_bug_list) == 0: if case_ref_name == 'sleep': @@ -143,13 +156,16 @@ class FuncGen(object): ret = 0 else: ret = self.cases_func_ref_dict[case_ref_name](case_params) + if cleanoper: + clean_ret = ret + ret = 0 else: logger.info("about the testcase , bug existed:") for existed_bug in existed_bug_list: logger.info("%s" % existed_bug) ret = 100 - self.fmt.printf('end', case_ref_name, ret) + self.fmt.printf('end', pkg_casename, ret) continue except Exception, e: logger.error(traceback.format_exc()) @@ -163,7 +179,11 @@ class FuncGen(object): else: pass retflag += ret - self.fmt.printf('end', case_ref_name, ret) + + if not cleanoper: + self.fmt.printf('end', pkg_casename, ret) + else: + self.fmt.printf('string', 21*" " + "Done" if clean_ret < 1 else 21*" " + "Fail") end_time = time.strftime("%Y-%m-%d %H:%M:%S") del caselog @@ -172,7 +192,7 @@ class FuncGen(object): logger = envlog.env_log() logger.info("\nSummary:") logger.info(" Total:%s [Pass:%s Fail:%s]" % \ - (testcase_number, (testcase_number - retflag), retflag)) + (self.testcase_number, (self.testcase_number - retflag), retflag)) del envlog result = (retflag and "FAIL") or "PASS" -- 1.7.1

--- libvirt-test-api.py | 7 +++++++ mapper.py | 24 +++++++++++++++++++----- proxy.py | 13 +++++++++---- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/libvirt-test-api.py b/libvirt-test-api.py index 8a4bacd..171e13c 100644 --- a/libvirt-test-api.py +++ b/libvirt-test-api.py @@ -100,13 +100,20 @@ class LibvirtTestAPI(object): # extract the string of combination of # language, package, testname of a testcase. all_testcases_names = [] + prev_casename = '' for activity in activities_list: for testcase in activity: testcases_names = testcase.keys() if 'sleep' in testcases_names: testcases_names.remove('sleep') + if not cmp('clean', testcases_names[0]): + all_testcases_names += [prev_casename + ":_clean"] + continue + + prev_casename = testcases_names[0] all_testcases_names += testcases_names + unique_testcases_names = list(set(all_testcases_names)) # call and initilize proxy component to diff --git a/mapper.py b/mapper.py index 4f41230..affc510 100644 --- a/mapper.py +++ b/mapper.py @@ -24,20 +24,34 @@ class Mapper(object): def __init__(self, testcases_list): self.testcases_list = copy.deepcopy(testcases_list) - def get_package_tripped(self): + def package_casename_func_map(self): """ Remove the package information to form a new dictionary """ tripped_cases_list = [] + prev_testcasename = '' + prev_testcases_params = '' for testcase in self.testcases_list: tripped_case = {} - casename = testcase.keys()[0] + testcase_name = testcase.keys()[0] + if ":" in testcase_name: + casename = testcase_name.split(":")[1] + func = casename - if casename == 'sleep': + if testcase_name == 'sleep': tripped_cases_list.append(testcase) continue - testcases_params = testcase.values()[0] - tripped_case[casename] = testcases_params + if testcase_name == 'clean': + func = casename + "_clean" + tripped_case[prev_testcasename + ":" + func] = prev_testcases_params + tripped_cases_list.append(tripped_case) + continue + testcases_params = testcase.values()[0] + tripped_case[testcase_name + ":" + func] = testcases_params tripped_cases_list.append(tripped_case) + + prev_testcasename = testcase_name + prev_testcases_params = testcases_params + return tripped_cases_list diff --git a/proxy.py b/proxy.py index a564230..f3664e3 100644 --- a/proxy.py +++ b/proxy.py @@ -30,17 +30,22 @@ class Proxy(object): def get_func_call_dict(self): for testcase_name in self.testcases_names: # Get programming package, casename - package = testcase_name.split(":")[0] - casename = testcase_name.split(":")[1] + elements = testcase_name.split(":") + package = elements[0] + casename = elements[1] + func = casename + + if len(elements) == 3: + keyword = elements[2] + func = casename + keyword # Dispatch functions funcs = getattr(self, "get_call_dict") func_ref = None - func = casename func_ref = funcs(package, casename, func) # Construct function call dictionary - key = package + ":" + casename + key = package + ":" + casename + ":" + func self.func_dict[key] = func_ref return self.func_dict -- 1.7.1

NACK ----- Original Message ----- From: "Guannan Ren" <gren@redhat.com> To: libvir-list@redhat.com Sent: Wednesday, November 9, 2011 12:38:38 PM Subject: [libvirt] [test-API][PATCH 2/3] "clean" keyword update in libvirt-test-api, mapper, proxy part --- libvirt-test-api.py | 7 +++++++ mapper.py | 24 +++++++++++++++++++----- proxy.py | 13 +++++++++---- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/libvirt-test-api.py b/libvirt-test-api.py index 8a4bacd..171e13c 100644 --- a/libvirt-test-api.py +++ b/libvirt-test-api.py @@ -100,13 +100,20 @@ class LibvirtTestAPI(object): # extract the string of combination of # language, package, testname of a testcase. all_testcases_names = [] + prev_casename = '' for activity in activities_list: for testcase in activity: testcases_names = testcase.keys() if 'sleep' in testcases_names: testcases_names.remove('sleep') + if not cmp('clean', testcases_names[0]): + all_testcases_names += [prev_casename + ":_clean"] + continue + + prev_casename = testcases_names[0] all_testcases_names += testcases_names + unique_testcases_names = list(set(all_testcases_names)) # call and initilize proxy component to diff --git a/mapper.py b/mapper.py index 4f41230..affc510 100644 --- a/mapper.py +++ b/mapper.py @@ -24,20 +24,34 @@ class Mapper(object): def __init__(self, testcases_list): self.testcases_list = copy.deepcopy(testcases_list) - def get_package_tripped(self): + def package_casename_func_map(self): ^^^ The change of function name will cause problem when options cleanup enabled in test conf files, function name should also be udpated in env_clear.py After update function name in env_clear.py, another problem came out which the whole case will be rerun in cleanup process. So, update needed. """ Remove the package information to form a new dictionary """ tripped_cases_list = [] + prev_testcasename = '' + prev_testcases_params = '' for testcase in self.testcases_list: tripped_case = {} - casename = testcase.keys()[0] + testcase_name = testcase.keys()[0] + if ":" in testcase_name: + casename = testcase_name.split(":")[1] + func = casename - if casename == 'sleep': + if testcase_name == 'sleep': tripped_cases_list.append(testcase) continue - testcases_params = testcase.values()[0] - tripped_case[casename] = testcases_params + if testcase_name == 'clean': + func = casename + "_clean" + tripped_case[prev_testcasename + ":" + func] = prev_testcases_params + tripped_cases_list.append(tripped_case) + continue + testcases_params = testcase.values()[0] + tripped_case[testcase_name + ":" + func] = testcases_params tripped_cases_list.append(tripped_case) + + prev_testcasename = testcase_name + prev_testcases_params = testcases_params + return tripped_cases_list diff --git a/proxy.py b/proxy.py index a564230..f3664e3 100644 --- a/proxy.py +++ b/proxy.py @@ -30,17 +30,22 @@ class Proxy(object): def get_func_call_dict(self): for testcase_name in self.testcases_names: # Get programming package, casename - package = testcase_name.split(":")[0] - casename = testcase_name.split(":")[1] + elements = testcase_name.split(":") + package = elements[0] + casename = elements[1] + func = casename + + if len(elements) == 3: + keyword = elements[2] + func = casename + keyword # Dispatch functions funcs = getattr(self, "get_call_dict") func_ref = None - func = casename func_ref = funcs(package, casename, func) # Construct function call dictionary - key = package + ":" + casename + key = package + ":" + casename + ":" + func self.func_dict[key] = func_ref return self.func_dict -- 1.7.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On 11/10/2011 11:25 AM, Guannan Sun wrote:
NACK
----- Original Message ----- From: "Guannan Ren"<gren@redhat.com> To: libvir-list@redhat.com Sent: Wednesday, November 9, 2011 12:38:38 PM Subject: [libvirt] [test-API][PATCH 2/3] "clean" keyword update in libvirt-test-api, mapper, proxy part
--- libvirt-test-api.py | 7 +++++++ mapper.py | 24 +++++++++++++++++++----- proxy.py | 13 +++++++++---- 3 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/libvirt-test-api.py b/libvirt-test-api.py index 8a4bacd..171e13c 100644 --- a/libvirt-test-api.py +++ b/libvirt-test-api.py @@ -100,13 +100,20 @@ class LibvirtTestAPI(object): # extract the string of combination of # language, package, testname of a testcase. all_testcases_names = [] + prev_casename = '' for activity in activities_list: for testcase in activity: testcases_names = testcase.keys() if 'sleep' in testcases_names: testcases_names.remove('sleep') + if not cmp('clean', testcases_names[0]): + all_testcases_names += [prev_casename + ":_clean"] + continue + + prev_casename = testcases_names[0] all_testcases_names += testcases_names
+ unique_testcases_names = list(set(all_testcases_names))
# call and initilize proxy component to diff --git a/mapper.py b/mapper.py index 4f41230..affc510 100644 --- a/mapper.py +++ b/mapper.py @@ -24,20 +24,34 @@ class Mapper(object): def __init__(self, testcases_list): self.testcases_list = copy.deepcopy(testcases_list)
- def get_package_tripped(self): + def package_casename_func_map(self):
^^^ The change of function name will cause problem when options cleanup enabled in test conf files, function name should also be udpated in env_clear.py After update function name in env_clear.py, another problem came out which the whole case will be rerun in cleanup process. So, update needed.
Yes, the code for keyword "cleanup" is still not updated after changing the way of referencing test function. I will send patches later. Thanks.

--- parser.py | 21 +++++++++++++++------ 1 files changed, 15 insertions(+), 6 deletions(-) diff --git a/parser.py b/parser.py index 085a1f2..883de89 100644 --- a/parser.py +++ b/parser.py @@ -391,12 +391,21 @@ class CaseFileParser(object): if len(tripped_caselist) == 2 and \ tripped_casename == "sleep": - sleepsecs = tripped_caselist[1] - for caselist in list: - newdict = {} - newdict[tripped_casename] = {'sleep':sleepsecs} - caselist.append(newdict) - continue + sleepsecs = tripped_caselist[1] + for caselist in list: + newdict = {} + newdict[tripped_casename] = {'sleep':sleepsecs} + caselist.append(newdict) + continue + + if len(tripped_caselist) == 1 and \ + tripped_casename == "clean": + cleanflag = 'yes' + for caselist in list: + newdict = {} + newdict[tripped_casename] = {'clean': cleanflag} + caselist.append(newdict) + continue if tripped_casename == "options": option_case = [{'options':{}}] -- 1.7.1
participants (2)
-
Guannan Ren
-
Guannan Sun