Merge "Enable tempest offline by use_custom_images=True"
[functest.git] / functest / opnfv_tests / openstack / refstack_client / refstack_client.py
index 441abfe..b2a2153 100755 (executable)
@@ -5,7 +5,12 @@
 # are made available under the terms of the Apache License, Version 2.0
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
+
+from __future__ import division
+
+
 import argparse
+import logging
 import os
 import re
 import sys
@@ -15,21 +20,22 @@ import time
 from functest.core import testcase
 from functest.opnfv_tests.openstack.tempest import conf_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()
+logger = logging.getLogger(__name__)
 
 
-class RefstackClient(testcase.TestCase):
+class RefstackClient(testcase.OSGCTestCase):
 
-    def __init__(self, case_name="refstack_defcore"):
-        super(RefstackClient, self).__init__(case_name)
-        self.FUNCTEST_TEST = CONST.dir_functest_test
-        self.CONF_PATH = CONST.refstack_tempest_conf_path
-        self.DEFCORE_LIST = CONST.refstack_defcore_list
+    def __init__(self, **kwargs):
+        if "case_name" not in kwargs:
+            kwargs["case_name"] = "refstack_defcore"
+        super(RefstackClient, self).__init__(**kwargs)
+        self.FUNCTEST_TEST = CONST.__getattribute__('dir_functest_test')
+        self.CONF_PATH = CONST.__getattribute__('refstack_tempest_conf_path')
+        self.DEFCORE_LIST = CONST.__getattribute__('refstack_defcore_list')
         self.confpath = os.path.join(self.FUNCTEST_TEST,
                                      self.CONF_PATH)
         self.defcorelist = os.path.join(self.FUNCTEST_TEST,
@@ -39,7 +45,7 @@ class RefstackClient(testcase.TestCase):
 
         cmd = ("cd {0};"
                ". .venv/bin/activate;"
-               "cd -;".format(CONST.dir_refstack_client))
+               "cd -;".format(CONST.__getattribute__('dir_refstack_client')))
         ft_utils.execute_command(cmd)
 
     def run_defcore(self, conf, testlist):
@@ -47,7 +53,7 @@ class RefstackClient(testcase.TestCase):
 
         cmd = ("cd {0};"
                "./refstack-client test -c {1} -v --test-list {2};"
-               "cd -;".format(CONST.dir_refstack_client,
+               "cd -;".format(CONST.__getattribute__('dir_refstack_client'),
                               conf,
                               testlist))
         ft_utils.execute_command(cmd)
@@ -57,16 +63,16 @@ class RefstackClient(testcase.TestCase):
 
         cmd = ("cd {0};"
                "./refstack-client test -c {1} -v --test-list {2};"
-               "cd -;".format(CONST.dir_refstack_client,
+               "cd -;".format(CONST.__getattribute__('dir_refstack_client'),
                               self.confpath,
                               self.defcorelist))
         logger.info("Starting Refstack_defcore test case: '%s'." % cmd)
 
         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,
+                  (CONST.__getattribute__('INSTALLER_TYPE'),
+                   CONST.__getattribute__('DEPLOY_SCENARIO'),
+                   CONST.__getattribute__('NODE_NAME'),
                    time.strftime("%a %b %d %H:%M:%S %Z %Y")))
 
         f_stdout = open(
@@ -121,7 +127,11 @@ class RefstackClient(testcase.TestCase):
                 skipped_testcases += match + ", "
 
             num_executed = int(num_tests) - int(num_skipped)
-            success_rate = 100 * int(num_success) / int(num_executed)
+
+            try:
+                self.result = 100 * int(num_success) / int(num_executed)
+            except ZeroDivisionError:
+                logger.error("No test has been executed")
 
             self.details = {"tests": int(num_tests),
                             "failures": int(num_failures),
@@ -129,12 +139,10 @@ class RefstackClient(testcase.TestCase):
                             "errors": failed_testcases,
                             "skipped": skipped_testcases}
         except Exception:
-            success_rate = 0
+            self.result = 0
 
-        self.criteria = ft_utils.check_success_rate(
-            self.case_name, success_rate)
-        logger.info("Testcase %s success_rate is %s%%, is marked as %s"
-                    % (self.case_name, success_rate, self.criteria))
+        logger.info("Testcase %s success_rate is %s%%"
+                    % (self.case_name, self.result))
 
     def run(self):
         '''used for functest command line,
@@ -169,7 +177,7 @@ class RefstackClient(testcase.TestCase):
         '''used for manually running,
            python refstack_client.py -c <tempest_conf_path>
            --testlist <testlist_path>
-           can generate a reference tempest.conf by
+           can generate a reference refstack_tempest.conf by
            python tempest_conf.py
         '''
         try:
@@ -194,9 +202,9 @@ class RefstackClient(testcase.TestCase):
 class RefstackClientParser(object):
 
     def __init__(self):
-        self.FUNCTEST_TEST = CONST.dir_functest_test
-        self.CONF_PATH = CONST.refstack_tempest_conf_path
-        self.DEFCORE_LIST = CONST.refstack_defcore_list
+        self.FUNCTEST_TEST = CONST.__getattribute__('dir_functest_test')
+        self.CONF_PATH = CONST.__getattribute__('refstack_tempest_conf_path')
+        self.DEFCORE_LIST = CONST.__getattribute__('refstack_defcore_list')
         self.confpath = os.path.join(self.FUNCTEST_TEST,
                                      self.CONF_PATH)
         self.defcorelist = os.path.join(self.FUNCTEST_TEST,
@@ -204,7 +212,7 @@ class RefstackClientParser(object):
         self.parser = argparse.ArgumentParser()
         self.parser.add_argument(
             '-c', '--config',
-            help='the file path of tempest.conf',
+            help='the file path of refstack_tempest.conf',
             default=self.confpath)
         self.parser.add_argument(
             '-t', '--testlist',
@@ -218,6 +226,7 @@ class RefstackClientParser(object):
 
 
 if __name__ == '__main__':
+    logging.basicConfig()
     refstackclient = RefstackClient()
     parser = RefstackClientParser()
     args = parser.parse_args(sys.argv[1:])