# 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:
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())
--- /dev/null
+#!/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')
##############################################################################
-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):
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)
.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:
#
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):
@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:
@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:
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):
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]]
# 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
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