leverage data_files to eliminate so many hardcoded abs_path_seekings 29/52929/10
authorSerenaFeng <feng.xiaowei@zte.com.cn>
Thu, 1 Mar 2018 12:03:59 +0000 (20:03 +0800)
committerSerenaFeng <feng.xiaowei@zte.com.cn>
Tue, 6 Mar 2018 01:16:43 +0000 (09:16 +0800)
1. mv conf/ userconfig/ compliance/ patch to etc/
2. after installation etc/ will be put under /etc/dovetail
3. leveraging /etc/dovetail in coding

Change-Id: Icf9cb00ff7fc7cf35755f60d3e258b23e2c70839
Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
87 files changed:
dovetail/cli/commands/cli_testcase.py
dovetail/constants.py [new file with mode: 0644]
dovetail/run.py
dovetail/testcase.py
dovetail/tests/unit/test_parser.py
dovetail/utils/dovetail_config.py
etc/compliance/compliance_set.yml [moved from dovetail/compliance/compliance_set.yml with 100% similarity]
etc/compliance/debug.yml [moved from dovetail/compliance/debug.yml with 100% similarity]
etc/compliance/ovp.1.0.0.yml [moved from dovetail/compliance/ovp.1.0.0.yml with 100% similarity]
etc/compliance/proposed_tests.yml [moved from dovetail/compliance/proposed_tests.yml with 100% similarity]
etc/conf/__init__.py [moved from dovetail/conf/__init__.py with 100% similarity]
etc/conf/bottlenecks_config.yml [moved from dovetail/conf/bottlenecks_config.yml with 100% similarity]
etc/conf/cmd_config.yml [moved from dovetail/conf/cmd_config.yml with 100% similarity]
etc/conf/dovetail_config.yml [moved from dovetail/conf/dovetail_config.yml with 97% similarity]
etc/conf/functest_config.yml [moved from dovetail/conf/functest_config.yml with 100% similarity]
etc/conf/yardstick_config.yml [moved from dovetail/conf/yardstick_config.yml with 100% similarity]
etc/patch/0001-Adjust-Yardstick-HA-test-cases-SLA-and-log-level.patch [moved from dovetail/patch/0001-Adjust-Yardstick-HA-test-cases-SLA-and-log-level.patch with 100% similarity]
etc/testcase/example.tc001.yml [moved from dovetail/testcase/example.tc001.yml with 100% similarity]
etc/testcase/example.tc002.yml [moved from dovetail/testcase/example.tc002.yml with 100% similarity]
etc/testcase/example.tc003.yml [moved from dovetail/testcase/example.tc003.yml with 100% similarity]
etc/testcase/ha.tc001.yml [moved from dovetail/testcase/ha.tc001.yml with 100% similarity]
etc/testcase/ha.tc002.yml [moved from dovetail/testcase/ha.tc002.yml with 100% similarity]
etc/testcase/ha.tc003.yml [moved from dovetail/testcase/ha.tc003.yml with 100% similarity]
etc/testcase/ha.tc004.yml [moved from dovetail/testcase/ha.tc004.yml with 100% similarity]
etc/testcase/ha.tc005.yml [moved from dovetail/testcase/ha.tc005.yml with 100% similarity]
etc/testcase/ha.tc006.yml [moved from dovetail/testcase/ha.tc006.yml with 100% similarity]
etc/testcase/ha.tc007.yml [moved from dovetail/testcase/ha.tc007.yml with 100% similarity]
etc/testcase/ha.tc008.yml [moved from dovetail/testcase/ha.tc008.yml with 100% similarity]
etc/testcase/ha.tc009.yml [moved from dovetail/testcase/ha.tc009.yml with 100% similarity]
etc/testcase/ha.tc010.yml [moved from dovetail/testcase/ha.tc010.yml with 100% similarity]
etc/testcase/ha.tc011.yml [moved from dovetail/testcase/ha.tc011.yml with 100% similarity]
etc/testcase/ipv6.tc001.yml [moved from dovetail/testcase/ipv6.tc001.yml with 100% similarity]
etc/testcase/ipv6.tc002.yml [moved from dovetail/testcase/ipv6.tc002.yml with 100% similarity]
etc/testcase/ipv6.tc003.yml [moved from dovetail/testcase/ipv6.tc003.yml with 100% similarity]
etc/testcase/ipv6.tc004.yml [moved from dovetail/testcase/ipv6.tc004.yml with 100% similarity]
etc/testcase/ipv6.tc005.yml [moved from dovetail/testcase/ipv6.tc005.yml with 100% similarity]
etc/testcase/ipv6.tc006.yml [moved from dovetail/testcase/ipv6.tc006.yml with 100% similarity]
etc/testcase/ipv6.tc007.yml [moved from dovetail/testcase/ipv6.tc007.yml with 100% similarity]
etc/testcase/ipv6.tc008.yml [moved from dovetail/testcase/ipv6.tc008.yml with 100% similarity]
etc/testcase/ipv6.tc009.yml [moved from dovetail/testcase/ipv6.tc009.yml with 100% similarity]
etc/testcase/ipv6.tc010.yml [moved from dovetail/testcase/ipv6.tc010.yml with 100% similarity]
etc/testcase/ipv6.tc011.yml [moved from dovetail/testcase/ipv6.tc011.yml with 100% similarity]
etc/testcase/ipv6.tc012.yml [moved from dovetail/testcase/ipv6.tc012.yml with 100% similarity]
etc/testcase/ipv6.tc013.yml [moved from dovetail/testcase/ipv6.tc013.yml with 100% similarity]
etc/testcase/ipv6.tc014.yml [moved from dovetail/testcase/ipv6.tc014.yml with 100% similarity]
etc/testcase/ipv6.tc015.yml [moved from dovetail/testcase/ipv6.tc015.yml with 100% similarity]
etc/testcase/ipv6.tc016.yml [moved from dovetail/testcase/ipv6.tc016.yml with 100% similarity]
etc/testcase/ipv6.tc017.yml [moved from dovetail/testcase/ipv6.tc017.yml with 100% similarity]
etc/testcase/ipv6.tc018.yml [moved from dovetail/testcase/ipv6.tc018.yml with 100% similarity]
etc/testcase/ipv6.tc019.yml [moved from dovetail/testcase/ipv6.tc019.yml with 100% similarity]
etc/testcase/ipv6.tc020.yml [moved from dovetail/testcase/ipv6.tc020.yml with 100% similarity]
etc/testcase/ipv6.tc021.yml [moved from dovetail/testcase/ipv6.tc021.yml with 100% similarity]
etc/testcase/ipv6.tc022.yml [moved from dovetail/testcase/ipv6.tc022.yml with 100% similarity]
etc/testcase/ipv6.tc023.yml [moved from dovetail/testcase/ipv6.tc023.yml with 100% similarity]
etc/testcase/ipv6.tc024.yml [moved from dovetail/testcase/ipv6.tc024.yml with 100% similarity]
etc/testcase/ipv6.tc025.yml [moved from dovetail/testcase/ipv6.tc025.yml with 100% similarity]
etc/testcase/osinterop.tc001.yml [moved from dovetail/testcase/osinterop.tc001.yml with 100% similarity]
etc/testcase/osinterop.tc002.yml [moved from dovetail/testcase/osinterop.tc002.yml with 100% similarity]
etc/testcase/sdnvpn.tc000.yml [moved from dovetail/testcase/sdnvpn.tc000.yml with 100% similarity]
etc/testcase/sdnvpn.tc001.yml [moved from dovetail/testcase/sdnvpn.tc001.yml with 100% similarity]
etc/testcase/sdnvpn.tc002.yml [moved from dovetail/testcase/sdnvpn.tc002.yml with 100% similarity]
etc/testcase/sdnvpn.tc003.yml [moved from dovetail/testcase/sdnvpn.tc003.yml with 100% similarity]
etc/testcase/sdnvpn.tc004.yml [moved from dovetail/testcase/sdnvpn.tc004.yml with 100% similarity]
etc/testcase/sdnvpn.tc008.yml [moved from dovetail/testcase/sdnvpn.tc008.yml with 100% similarity]
etc/testcase/smoke.tc001.yml [moved from dovetail/testcase/smoke.tc001.yml with 100% similarity]
etc/testcase/smoke.tc002.yml [moved from dovetail/testcase/smoke.tc002.yml with 100% similarity]
etc/testcase/stress.tc001.yml [moved from dovetail/testcase/stress.tc001.yml with 100% similarity]
etc/testcase/tempest.tc001.yml [moved from dovetail/testcase/tempest.tc001.yml with 100% similarity]
etc/testcase/tempest.tc002.yml [moved from dovetail/testcase/tempest.tc002.yml with 100% similarity]
etc/testcase/tempest.tc003.yml [moved from dovetail/testcase/tempest.tc003.yml with 100% similarity]
etc/testcase/tempest.tc004.yml [moved from dovetail/testcase/tempest.tc004.yml with 100% similarity]
etc/testcase/tempest.tc005.yml [moved from dovetail/testcase/tempest.tc005.yml with 100% similarity]
etc/testcase/vnf.tc001.yml [moved from dovetail/testcase/vnf.tc001.yml with 100% similarity]
etc/testcase/vping.tc001.yml [moved from dovetail/testcase/vping.tc001.yml with 100% similarity]
etc/testcase/vping.tc002.yml [moved from dovetail/testcase/vping.tc002.yml with 100% similarity]
etc/userconfig/ansible.cfg [moved from dovetail/userconfig/ansible.cfg with 100% similarity]
etc/userconfig/hosts.yaml.sample [moved from dovetail/userconfig/hosts.yaml.sample with 100% similarity]
etc/userconfig/pod.yaml.sample [moved from dovetail/userconfig/pod.yaml.sample with 100% similarity]
etc/userconfig/sdnvpn_config_tc000.yaml [moved from dovetail/userconfig/sdnvpn_config_tc000.yaml with 100% similarity]
etc/userconfig/sdnvpn_config_testcase1.yaml [moved from dovetail/userconfig/sdnvpn_config_testcase1.yaml with 100% similarity]
etc/userconfig/sdnvpn_config_testcase2.yaml [moved from dovetail/userconfig/sdnvpn_config_testcase2.yaml with 100% similarity]
etc/userconfig/sdnvpn_config_testcase3.yaml [moved from dovetail/userconfig/sdnvpn_config_testcase3.yaml with 100% similarity]
etc/userconfig/sdnvpn_config_testcase4.yaml [moved from dovetail/userconfig/sdnvpn_config_testcase4.yaml with 100% similarity]
etc/userconfig/sdnvpn_config_testcase8.yaml [moved from dovetail/userconfig/sdnvpn_config_testcase8.yaml with 100% similarity]
etc/userconfig/tempest_conf.yaml.sample [moved from dovetail/userconfig/tempest_conf.yaml.sample with 100% similarity]
etc/userconfig/testcases.yaml [moved from dovetail/userconfig/testcases.yaml with 100% similarity]
setup.cfg

index a498d49..6fe789f 100644 (file)
@@ -7,37 +7,23 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 import os
-import sys
-import yaml
+
 import click
-import six
+import yaml
 
-import dovetail.utils.dovetail_utils as dt_utils
-from dovetail.utils.dovetail_config import DovetailConfig as dt_cfg
+from dovetail import constants
 from dovetail.testcase import Testsuite
+from dovetail.utils.dovetail_config import DovetailConfig as dt_cfg
+import dovetail.utils.dovetail_utils as dt_utils
 
 
 class CliTestcase(object):
 
     @classmethod
     def testsuite_load(cls):
-        dt_cfg.load_config_files()
+        dt_cfg.load_config_files(constants.CONF_PATH)
         Testsuite.load()
 
-    @classmethod
-    def get_path(cls, path):
-        if isinstance(path, six.string_types):
-            dt_cfg.load_config_files()
-            dovetail_dir = os.path.abspath(
-                os.path.join(os.path.dirname(__file__),
-                             os.pardir, os.pardir))
-            relative_path = dt_cfg.dovetail_config[path]
-            abs_path = os.path.join(dovetail_dir, relative_path)
-        else:
-            click.echo("input %s is not a string" % path)
-            sys.exit(1)
-        return abs_path
-
     def list_testcase(self, testsuite):
         self.testsuite_load()
         if testsuite:
@@ -75,14 +61,14 @@ class CliTestcase(object):
                 click.echo("No testsuite defined yet in dovetail!!!")
 
     def show_testcase(self, testcase):
-        abs_testcase_path = self.get_path('TESTCASE_PATH')
+        abs_testcase_path = constants.TESTCASE_PATH
         if testcase.startswith("dovetail."):
             testcase_yml = testcase[9:] + '.yml'
         else:
             testcase_yml = testcase + '.yml'
         for root, dirs, files in os.walk(abs_testcase_path):
             if testcase_yml in files:
-                testcase_path = abs_testcase_path + testcase_yml
+                testcase_path = os.path.join(abs_testcase_path, testcase_yml)
                 with open(testcase_path, 'r') as stream:
                     try:
                         click.echo(stream.read())
diff --git a/dovetail/constants.py b/dovetail/constants.py
new file mode 100644 (file)
index 0000000..c3ce615
--- /dev/null
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+#
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# 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
+#
+import os.path
+
+
+DOVETAIL_CONF_PATH = '/etc/dovetail'
+USERCONF_PATH = os.path.join(DOVETAIL_CONF_PATH, 'userconfig')
+PATCH_PATH = os.path.join(DOVETAIL_CONF_PATH, 'patch')
+CONF_PATH = os.path.join(DOVETAIL_CONF_PATH, 'conf')
+TESTCASE_PATH = os.path.join(DOVETAIL_CONF_PATH, 'testcase')
+COMPLIANCE_PATH = os.path.join(DOVETAIL_CONF_PATH, 'compliance')
index cddf22e..e43c126 100755 (executable)
 ##############################################################################
 
 
-import click
-import os
 import copy
+import os
 import time
 import uuid
 
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
+import click
 
-from parser import Parser
 from container import Container
+from dovetail import constants
+from parser import Parser
+from report import BottlenecksChecker, FunctestChecker, YardstickChecker
+from report import BottlenecksCrawler, FunctestCrawler, YardstickCrawler
+from report import Report
+from test_runner import DockerRunner, ShellRunner
 from testcase import Testcase
 from testcase import Testsuite
-from report import Report
-from report import FunctestCrawler, YardstickCrawler, BottlenecksCrawler
-from report import FunctestChecker, YardstickChecker, BottlenecksChecker
 from utils.dovetail_config import DovetailConfig as dt_cfg
-from test_runner import DockerRunner, ShellRunner
+import utils.dovetail_logger as dt_logger
+import utils.dovetail_utils as dt_utils
 
 
 def load_testsuite(testsuite):
@@ -212,22 +213,18 @@ def get_result_path():
 
 
 def copy_userconfig_files(logger):
-    dovetail_home = os.path.dirname(os.path.abspath(__file__))
-    userconfig_path = os.path.join(dovetail_home, 'userconfig')
     pre_config_path = dt_cfg.dovetail_config['config_dir']
     if not os.path.isdir(pre_config_path):
         os.makedirs(pre_config_path)
-    cmd = 'sudo cp -r %s/* %s' % (userconfig_path, pre_config_path)
+    cmd = 'sudo cp -r %s/* %s' % (constants.USERCONF_PATH, pre_config_path)
     dt_utils.exec_cmd(cmd, logger, exit_on_error=False)
 
 
 def copy_patch_files(logger):
-    dovetail_home = os.path.dirname(os.path.abspath(__file__))
-    patch_path = os.path.join(dovetail_home, 'patch')
     patch_set_path = dt_cfg.dovetail_config['patch_dir']
     if not os.path.isdir(patch_set_path):
         os.makedirs(patch_set_path)
-    cmd = 'sudo cp -r %s/* %s' % (patch_path, patch_set_path)
+    cmd = 'sudo cp -r %s/* %s' % (constants.PATCH_PATH, patch_set_path)
     dt_utils.exec_cmd(cmd, logger, exit_on_error=False)
 
 
@@ -313,7 +310,7 @@ def main(*args, **kwargs):
                      .format(kwargs['testsuite'], origin_testarea))
 
 
-dt_cfg.load_config_files()
+dt_cfg.load_config_files(constants.CONF_PATH)
 dovetail_config = copy.deepcopy(dt_cfg.dovetail_config)
 CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
 if dovetail_config['cli']['options'] is not None:
index 9984548..c9aef0e 100644 (file)
@@ -8,13 +8,14 @@
 #
 
 import os
-import yaml
 
-import utils.dovetail_logger as dt_logger
+import yaml
 
+from dovetail import constants
 from parser import Parser
-from utils.dovetail_config import DovetailConfig as dt_cfg
 from test_runner import TestRunnerFactory
+from utils.dovetail_config import DovetailConfig as dt_cfg
+import utils.dovetail_logger as dt_logger
 
 
 class Testcase(object):
@@ -221,9 +222,7 @@ class Testcase(object):
 
     @classmethod
     def load(cls):
-        testcase_dir = os.path.dirname(os.path.abspath(__file__))
-        testcase_path = dt_cfg.dovetail_config['TESTCASE_PATH']
-        abs_testcase_path = os.path.join(testcase_dir, testcase_path)
+        abs_testcase_path = constants.TESTCASE_PATH
         for root, dirs, files in os.walk(abs_testcase_path):
             for testcase_file in files:
                 with open(os.path.join(root, testcase_file)) as f:
@@ -363,9 +362,7 @@ class Testsuite(object):
 
     @classmethod
     def load(cls):
-        compliance_dir = os.path.dirname(os.path.abspath(__file__))
-        compliance_path = dt_cfg.dovetail_config['COMPLIANCE_PATH']
-        abs_compliance_path = os.path.join(compliance_dir, compliance_path)
+        abs_compliance_path = constants.COMPLIANCE_PATH
         for root, dirs, files in os.walk(abs_compliance_path):
             for testsuite_yaml in files:
                 with open(os.path.join(root, testsuite_yaml)) as f:
index 7047d5c..5cc3fe9 100644 (file)
@@ -28,7 +28,10 @@ class TestParser(unittest.TestCase):
 
     def setUp(self):
         """Test case setup"""
-        dt_cfg.load_config_files()
+        conf_path = os.path.join(self.test_path,
+                                 os.pardir, os.pardir, os.pardir,
+                                 'etc/conf')
+        dt_cfg.load_config_files(conf_path)
         logging.disable(logging.CRITICAL)
 
     def test_parser_cmd(self, mock_logger):
index 5e100d6..d3b5419 100644 (file)
@@ -16,18 +16,16 @@ class DovetailConfig(object):
     dovetail_config = {}
 
     @classmethod
-    def load_config_files(cls):
-        curr_path = os.path.dirname(os.path.abspath(__file__))
-        config_path = os.path.join(os.path.dirname(curr_path), 'conf')
-        with open(os.path.join(config_path, 'dovetail_config.yml')) as f:
+    def load_config_files(cls, conf_path):
+        with open(os.path.join(conf_path, 'dovetail_config.yml')) as f:
             cls.dovetail_config = yaml.safe_load(f)
 
         for extra_config_file in cls.dovetail_config['include_config']:
-            with open(os.path.join(config_path, extra_config_file)) as f:
+            with open(os.path.join(conf_path, extra_config_file)) as f:
                 extra_config = yaml.safe_load(f)
                 cls.dovetail_config.update(extra_config)
 
-        path = os.path.join(config_path, cls.dovetail_config['cli_file_name'])
+        path = os.path.join(conf_path, cls.dovetail_config['cli_file_name'])
         with open(path) as f:
             cmd_yml = yaml.safe_load(f)
             cls.dovetail_config['cli'] = cmd_yml[cmd_yml.keys()[0]]
similarity index 97%
rename from dovetail/conf/dovetail_config.yml
rename to etc/conf/dovetail_config.yml
index 290798d..47b4650 100644 (file)
@@ -29,8 +29,6 @@ cloudify_image: 'cloudify-manager-premium-4.0.1.qcow2'
 # Trusty image
 trusty_image: 'trusty-server-cloudimg-amd64-disk1.img'
 
-COMPLIANCE_PATH: compliance/
-TESTCASE_PATH: testcase/
 # testsuite supported, should adjust accordingly
 testsuite_supported:
   - compliance_set
index e39a644..c8fbc81 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -3,6 +3,15 @@ name = dovetail
 version = 1.0.0
 home-page = https://wiki.opnfv.org/display/dovetail
 
+[files]
+
+packages =
+    dovetail
+
+data_files =
+    /etc/dovetail = etc/*
+
+
 [entry_points]
 console_scripts =
     dovetail = dovetail.cli.cli_base:cli