X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=inline;f=functest%2Fopnfv_tests%2Fopenstack%2Frefstack_client%2Frefstack_client.py;h=101bf73607cc9e2c96ce528eea24d7d19c12b668;hb=0385fdaa5b8b39c2cbc75c7d7719d872b317e0b9;hp=c9f0f27520263529aa5f47f376ba99d40139f0db;hpb=b8403226b35dbd884906276e9b8fc5c21226b387;p=functest.git diff --git a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py index c9f0f2752..101bf7360 100755 --- a/functest/opnfv_tests/openstack/refstack_client/refstack_client.py +++ b/functest/opnfv_tests/openstack/refstack_client/refstack_client.py @@ -12,18 +12,18 @@ import sys import subprocess import time -from functest.core import testcase_base +from functest.core import testcase from functest.opnfv_tests.openstack.tempest import conf_utils -from functest.utils import openstack_utils from functest.utils.constants import CONST import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils +from tempest_conf import TempestConf """ logging configuration """ logger = ft_logger.Logger("refstack_defcore").getLogger() -class RefstackClient(testcase_base.TestcaseBase): +class RefstackClient(testcase.TestCase): def __init__(self): super(RefstackClient, self).__init__() @@ -35,12 +35,6 @@ class RefstackClient(testcase_base.TestcaseBase): self.CONF_PATH) self.defcorelist = os.path.join(self.FUNCTEST_TEST, self.DEFCORE_LIST) - self.VERIFIER_ID = conf_utils.get_verifier_id() - self.VERIFIER_REPO_DIR = conf_utils.get_verifier_repo_dir( - self.VERIFIER_ID) - self.DEPLOYMENT_ID = conf_utils.get_verifier_deployment_id() - self.DEPLOYMENT_DIR = conf_utils.get_verifier_deployment_dir( - self.VERIFIER_ID, self.DEPLOYMENT_ID) def source_venv(self): @@ -69,8 +63,8 @@ class RefstackClient(testcase_base.TestcaseBase): self.defcorelist)) logger.info("Starting Refstack_defcore test case: '%s'." % cmd) - header = ("Tempest environment:\n" - " Installer: %s\n Scenario: %s\n Node: %s\n Date: %s\n" % + header = ("Refstack environment:\n" + " SUT: %s\n Scenario: %s\n Node: %s\n Date: %s\n" % (CONST.INSTALLER_TYPE, CONST.DEPLOY_SCENARIO, CONST.NODE_NAME, @@ -79,26 +73,23 @@ class RefstackClient(testcase_base.TestcaseBase): f_stdout = open( os.path.join(conf_utils.REFSTACK_RESULTS_DIR, "refstack.log"), 'w+') - f_stderr = open( - os.path.join(conf_utils.REFSTACK_RESULTS_DIR, - "refstack-error.log"), 'w+') f_env = open(os.path.join(conf_utils.REFSTACK_RESULTS_DIR, "environment.log"), 'w+') f_env.write(header) p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, - stderr=f_stderr, bufsize=1) + stderr=subprocess.STDOUT, bufsize=1) with p.stdout: for line in iter(p.stdout.readline, b''): if 'Tests' in line: break - logger.info(line.replace('\n', '')) + if re.search("\} tempest\.", line): + logger.info(line.replace('\n', '')) f_stdout.write(line) p.wait() f_stdout.close() - f_stderr.close() f_env.close() def parse_refstack_result(self): @@ -110,12 +101,16 @@ class RefstackClient(testcase_base.TestcaseBase): for match in re.findall("Ran: (\d+) tests in (\d+\.\d{4}) sec.", output): num_tests = match[0] - for match in re.findall("- Passed: (\d+)", output): - num_success = match - for match in re.findall("- Skipped: (\d+)", output): - num_skipped = match - for match in re.findall("- Failed: (\d+)", output): - num_failures = match + logger.info("Ran: %s tests in %s sec." % (num_tests, match[1])) + for match in re.findall("(- Passed: )(\d+)", output): + num_success = match[1] + logger.info("".join(match)) + for match in re.findall("(- Skipped: )(\d+)", output): + num_skipped = match[1] + logger.info("".join(match)) + for match in re.findall("(- Failed: )(\d+)", output): + num_failures = match[1] + logger.info("".join(match)) success_testcases = "" for match in re.findall(r"\{0\}(.*?)[. ]*ok", output): success_testcases += match + ", " @@ -129,10 +124,10 @@ class RefstackClient(testcase_base.TestcaseBase): num_executed = int(num_tests) - int(num_skipped) success_rate = 100 * int(num_success) / int(num_executed) - self.details = {"num_tests": int(num_tests), - "num_failures": int(num_failures), + self.details = {"tests": int(num_tests), + "failures": int(num_failures), "success": success_testcases, - "failed": failed_testcases, + "errors": failed_testcases, "skipped": skipped_testcases} except Exception: success_rate = 0 @@ -142,59 +137,62 @@ class RefstackClient(testcase_base.TestcaseBase): logger.info("Testcase %s success_rate is %s%%, is marked as %s" % (self.case_name, success_rate, self.criteria)) - def defcore_env_prepare(self): - try: - img_flavor_dict = conf_utils.create_tempest_resources( - use_custom_images=True, use_custom_flavors=True) - conf_utils.configure_tempest_defcore( - self.DEPLOYMENT_DIR, img_flavor_dict) - self.source_venv() - res = testcase_base.TestcaseBase.EX_OK - except KeyError as e: - logger.error("defcore prepare env error with: %s", e) - res = testcase_base.TestcaseBase.EX_RUN_ERROR - - return res - def run(self): + '''used for functest command line, + functest testcase run refstack_defcore''' self.start_time = time.time() if not os.path.exists(conf_utils.REFSTACK_RESULTS_DIR): os.makedirs(conf_utils.REFSTACK_RESULTS_DIR) try: - self.defcore_env_prepare() + tempestconf = TempestConf() + tempestconf.generate_tempestconf() + self.source_venv() self.run_defcore_default() self.parse_refstack_result() - res = testcase_base.TestcaseBase.EX_OK + res = testcase.TestCase.EX_OK except Exception as e: logger.error('Error with run: %s', e) - res = testcase_base.TestcaseBase.EX_RUN_ERROR + res = testcase.TestCase.EX_RUN_ERROR self.stop_time = time.time() return res + def _prep_test(self): + '''Check that the config file exists.''' + if not os.path.isfile(self.confpath): + logger.error("Conf file not valid: %s" % self.confpath) + if not os.path.isfile(self.testlist): + logger.error("testlist file not valid: %s" % self.testlist) + def main(self, **kwargs): + '''used for manually running, + python refstack_client.py -c + --testlist + can generate a reference tempest.conf by + python tempest_conf.py + ''' try: - tempestconf = kwargs['config'] - testlist = kwargs['testlist'] + self.confpath = kwargs['config'] + self.testlist = kwargs['testlist'] except KeyError as e: logger.error("Cannot run refstack client. Please check " "%s", e) return self.EX_RUN_ERROR try: - openstack_utils.source_credentials(CONST.openstack_creds) - self.defcore_env_prepare() - self.run_defcore(tempestconf, testlist) - res = testcase_base.TestcaseBase.EX_OK + self.source_venv() + self._prep_test() + self.run_defcore(self.confpath, self.testlist) + res = testcase.TestcaseBase.EX_OK except Exception as e: logger.error('Error with run: %s', e) - res = testcase_base.TestcaseBase.EX_RUN_ERROR + res = testcase.TestCase.EX_RUN_ERROR return res -class RefstackClientParser(testcase_base.TestcaseBase): +class RefstackClientParser(testcase.TestCase): def __init__(self): super(RefstackClientParser, self).__init__() @@ -227,7 +225,7 @@ if __name__ == '__main__': args = parser.parse_args(sys.argv[1:]) try: result = refstackclient.main(**args) - if result != testcase_base.TestcaseBase.EX_OK: + if result != testcase.TestCase.EX_OK: sys.exit(result) except Exception: - sys.exit(testcase_base.TestcaseBase.EX_RUN_ERROR) + sys.exit(testcase.TestCase.EX_RUN_ERROR)