summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/__init__.py0
-rw-r--r--scripts/cert/basic.yml4
-rw-r--r--scripts/conf/__init__.py0
-rw-r--r--scripts/conf/dovetail_config.py28
-rw-r--r--scripts/conf/dovetail_config.yml20
-rw-r--r--scripts/conf/functest_config.yml26
-rw-r--r--scripts/conf/yardstick_config.yml29
-rw-r--r--scripts/container.py69
-rw-r--r--scripts/parser.py40
-rw-r--r--scripts/prepare_env.py23
-rw-r--r--scripts/report.py239
-rwxr-xr-xscripts/run.py84
-rw-r--r--scripts/testcase.py178
-rw-r--r--scripts/testcase/ipv6.tc001.yml10
-rw-r--r--scripts/utils/__init__.py0
-rw-r--r--scripts/utils/dovetail_logger.py55
-rw-r--r--scripts/utils/dovetail_utils.py87
17 files changed, 0 insertions, 892 deletions
diff --git a/scripts/__init__.py b/scripts/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/scripts/__init__.py
+++ /dev/null
diff --git a/scripts/cert/basic.yml b/scripts/cert/basic.yml
deleted file mode 100644
index 25ebc7ae..00000000
--- a/scripts/cert/basic.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-certification_basic:
- name: certification_basic
- testcase_list:
- - dovetail.ipv6.tc001
diff --git a/scripts/conf/__init__.py b/scripts/conf/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/scripts/conf/__init__.py
+++ /dev/null
diff --git a/scripts/conf/dovetail_config.py b/scripts/conf/dovetail_config.py
deleted file mode 100644
index e7942f52..00000000
--- a/scripts/conf/dovetail_config.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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
-#
-
-CERT_PATH = './cert/'
-TESTCASE_PATH = './testcase/'
-SCENARIO_NAMING_FMT = 'certification_%s'
-
-import yaml
-import os
-
-with open(os.path.join(os.getcwd(),'conf','dovetail_config.yml')) as f:
- dovetail_config = yaml.safe_load(f)
-
-for extra_config_file in dovetail_config['include_config']:
- with open(os.path.join(os.getcwd(),'conf',extra_config_file)) as f:
- extra_config = yaml.safe_load(f)
- dovetail_config.update(extra_config)
-
-container_config = {}
-
-container_config['functest'] = dovetail_config['functest']
-container_config['yardstick'] = dovetail_config['yardstick']
diff --git a/scripts/conf/dovetail_config.yml b/scripts/conf/dovetail_config.yml
deleted file mode 100644
index 901988f8..00000000
--- a/scripts/conf/dovetail_config.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-work_dir: /home/opnfv/dovetail
-result_dir: /home/opnfv/dovetail/results
-report_file: 'dovetail_report.txt'
-
-# used for testcase cmd template in jinja2 format
-# we have two variables available now
-# parameter path, use this path to walk through python object and get value
-# and the python object is "testcase" object by hard-coded
-parameters:
- - name: testcase
- path: '("name",)'
- - name: script_testcase
- path: '("scripts", "testcase")'
-
-include_config:
- - functest_config.yml
- - yardstick_config.yml
-
-
diff --git a/scripts/conf/functest_config.yml b/scripts/conf/functest_config.yml
deleted file mode 100644
index cd33dc59..00000000
--- a/scripts/conf/functest_config.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-functest:
- image_name: opnfv/functest
- docker_tag: latest
- envs: '-e INSTALLER_TYPE=compass -e INSTALLER_IP=192.168.200.2
- -e NODE_NAME=dovetail-pod -e DEPLOY_SCENARIO=ha_nosdn
- -e BUILD_TAG=dovetail -e CI_DEBUG=true -e DEPLOY_TYPE=baremetal'
- opts: '-id --privileged=true'
- result_dir: '/home/opnfv/functest/results'
- pre_condition:
- cmds:
- - 'echo test for precondition'
- testcase:
- pre_cmd: 'python /home/opnfv/repos/functest/ci/prepare_env.py start'
- exec_cmd: 'python /home/opnfv/repos/functest/ci/run_tests.py -t {{script_testcase}} -r'
- post_cmd: ''
- cmds:
- - 'python /home/opnfv/repos/functest/ci/prepare_env.py start'
- - 'python /home/opnfv/repos/functest/ci/run_tests.py -t {{script_testcase}} -r'
- post_condition:
- cmds:
- - ''
- result:
- dir: '/home/opnfv/functest/results'
- store_type: 'file'
- file_path: 'tempest/tempest.log'
- db_url: 'http://testresults.opnfv.org/test/api/v1/results?case=%s&last=1'
diff --git a/scripts/conf/yardstick_config.yml b/scripts/conf/yardstick_config.yml
deleted file mode 100644
index f7f05bcc..00000000
--- a/scripts/conf/yardstick_config.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-yardstick:
- image_name: opnfv/yardstick
- docker_tag: latest
- envs: '-e INSTALLER_TYPE=compass -e INSTALLER_IP=192.168.200.2
- -e NODE_NAME=dovetail-pod -e DEPLOY_SCENARIO=ha_nosdn
- -e BUILD_TAG=dovetail -e CI_DEBUG=true -e DEPLOY_TYPE=baremetal
- -e EXTERNAL_NETWORK=ext-net'
- opts: '-id --privileged=true'
- pre_condition:
- cmds:
- - 'source /home/opnfv/repos/yardstick/tests/ci/prepare_env.sh &&
- source /home/opnfv/repos/yardstick/tests/ci/clean_images.sh && cleanup'
- - 'source /home/opnfv/repos/yardstick/tests/ci/prepare_env.sh &&
- cd /home/opnfv/repos/yardstick && source tests/ci/load_images.sh'
- testcase:
- cmds:
- - 'mkdir -p /home/opnfv/yardstick/results/'
- - 'cd /home/opnfv/repos/yardstick && source tests/ci/prepare_env.sh &&
- yardstick task start tests/opnfv/test_cases/{{script_testcase}}.yaml
- --output-file /home/opnfv/yardstick/results/{{script_testcase}}.out &>
- /home/opnfv/yardstick/results/yardstick.log'
- post_condition:
- cmds:
- - ''
- result:
- dir: '/home/opnfv/yardstick/results'
- store_type: 'file'
- file_path: 'yardstick.log'
- db_url: 'http://testresults.opnfv.org/test/api/v1/results?case=%s&last=1'
diff --git a/scripts/container.py b/scripts/container.py
deleted file mode 100644
index 918edb33..00000000
--- a/scripts/container.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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 utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-from conf.dovetail_config import *
-
-logger = dt_logger.Logger('container.py').getLogger()
-
-class Container:
-
- container_list = {}
- has_pull_latest_image = {'yardstick':False, 'functest':False}
-
- def __init__(cls):
- pass
-
- def __str__(cls):
- pass
-
- @classmethod
- def get(cls, type):
- return cls.container_list[type]
-
- @classmethod
- def get_docker_image(cls, type):
- return '%s:%s' % (dovetail_config[type]['image_name'], dovetail_config[type]['docker_tag'])
-
- @classmethod
- def create(cls, type):
- #sshkey="-v /root/.ssh/id_rsa:/root/.ssh/id_rsa "
- docker_image = cls.get_docker_image(type)
- envs = dovetail_config[type]['envs']
- opts = dovetail_config[type]['opts']
- sshkey = ''
- result_volume = ' -v %s:%s ' % (dovetail_config['result_dir'],dovetail_config[type]['result']['dir'])
- cmd = 'sudo docker run %s %s %s %s %s /bin/bash' % (opts, envs, sshkey, result_volume, docker_image)
- dt_utils.exec_cmd(cmd,logger)
- ret, container_id=dt_utils.exec_cmd("sudo docker ps | grep "+ docker_image + " | awk '{print $1}' | head -1",logger)
- cls.container_list[type] = container_id
- return container_id
-
- @classmethod
- def pull_image(cls, type):
- docker_image = cls.get_docker_image(type)
- if cls.has_pull_latest_image[type] == True:
- logger.debug('%s is already the newest version.' % (docker_image))
- else:
- cmd = 'sudo docker pull %s' % (docker_image)
- dt_utils.exec_cmd(cmd,logger)
- cls.has_pull_latest_image[type] = True
-
- @classmethod
- def clean(cls, container_id):
- cmd1 = 'sudo docker stop %s' % (container_id)
- dt_utils.exec_cmd(cmd1,logger)
- cmd2 = 'sudo docker rm %s' % (container_id)
- dt_utils.exec_cmd(cmd2,logger)
-
- @classmethod
- def exec_cmd(cls, container_id, sub_cmd, exit_on_error=False):
- cmd = 'sudo docker exec %s /bin/bash -c "%s"' % (container_id, sub_cmd)
- dt_utils.exec_cmd(cmd,logger,exit_on_error)
diff --git a/scripts/parser.py b/scripts/parser.py
deleted file mode 100644
index 1c0c0450..00000000
--- a/scripts/parser.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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 jinja2
-
-
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-
-logger = dt_logger.Logger('parser.py').getLogger()
-
-from conf.dovetail_config import *
-
-class Parser:
- '''preprocess configuration files'''
-
- @classmethod
- def parse_cmd(cls, cmd, testcase):
- cmd_lines = None
- try:
- template = jinja2.Template(cmd, undefined=jinja2.StrictUndefined)
- kwargs = {}
- for arg in dovetail_config['parameters']:
- path = eval(arg['path'])
- logger.debug('name: %s, eval path: %s ' % (arg['name'], path))
- kwargs[arg['name']] = dt_utils.get_obj_by_path(testcase.testcase,path)
-
- logger.debug('kwargs: %s' % kwargs)
- cmd_lines = template.render(**kwargs)
- except Exception as e:
- logger.error('failed to parse cmd %s, exception:%s' % (cmd, e))
- return None
-
- return cmd_lines
diff --git a/scripts/prepare_env.py b/scripts/prepare_env.py
deleted file mode 100644
index bd484302..00000000
--- a/scripts/prepare_env.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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
-
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-
-
-logger = dt_logger.Logger('prepare_env.py').getLogger()
-
-cmd = "sudo apt-get -y install docker.io python-pip"
-dt_utils.exec_cmd(cmd, logger)
-
-cmd = "sudo pip install click pyyaml jinja2"
-dt_utils.exec_cmd(cmd, logger)
-
diff --git a/scripts/report.py b/scripts/report.py
deleted file mode 100644
index 5dfa5890..00000000
--- a/scripts/report.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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 json
-import urllib2
-import re
-
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-
-from conf.dovetail_config import *
-from testcase import *
-
-logger = dt_logger.Logger('report.py').getLogger()
-
-def get_pass_str(passed):
- if passed:
- return 'PASS'
- else:
- return 'FAIL'
-
-class Report:
-
- results = {'functest':{},'yardstick':{}}
-
- @classmethod
- def check_result(cls, testcase, db_result):
- checker = CheckerFactory.create(testcase.script_type())
- checker.check(testcase, db_result)
-
- @classmethod
- def generate(cls, scenario_yaml):
- report = ''
-
- report += '\n\
-+=============================================================================+\n\
-| report | \n\
-+-----------------------------------------------------------------------------+\n'
- report += '|scenario: %s\n' % scenario_yaml['name']
- for testcase_name in scenario_yaml['testcase_list']:
- testcase = Testcase.get(testcase_name)
- report += '| [testcase]: %s\t\t\t\t[%s]\n' % (testcase_name, get_pass_str(testcase.passed()))
- report += '| |-objective: %s\n' % testcase.objective()
- if testcase.sub_testcase() is not None:
- for subtest in testcase.sub_testcase():
- report += '| |-%s \t\t [%s]\n' % (subtest, get_pass_str(testcase.sub_testcase_passed(subtest)))
- report += '+-----------------------------------------------------------------------------+\n'
-
- logger.info(report)
- cls.save(report)
- return report
-
- #save to disk as default
- @classmethod
- def save(cls, report):
- report_file_path = dovetail_config['report_file']
- try:
- with open(os.path.join(dovetail_config['result_dir'], report_file_path),'w') as report_file:
- report_file.write(report)
- logger.info('save report to %s' % report_file_path)
- except Exception as e:
- logger.error('Failed to save: %s' % report_file_path)
-
- @classmethod
- def get_result(cls, testcase):
- script_testcase = testcase.script_testcase()
- type = testcase.script_type()
- crawler = CrawlerFactory.create(type)
-
- if script_testcase in cls.results[type]:
- return cls.results[type][script_testcase]
-
- result = crawler.crawl(script_testcase)
-
- if result is not None:
- cls.results[type][script_testcase] = result
- testcase.script_result_acquired(True)
- logger.debug('testcase: %s -> result acquired' % script_testcase)
- else:
- retry = testcase.increase_retry()
- logger.debug('testcase: %s -> result acquired retry:%d' % (script_testcase, retry))
- return result
-
-class CrawlerFactory:
-
- @classmethod
- def create(cls, type):
- if type == 'functest':
- return FunctestCrawler()
-
- if type == 'yardstick':
- return YardstickCrawler()
-
- return None
-
-class FunctestCrawler:
-
- def __init__(self):
- self.type = 'functest'
-
- def crawl(self, testcase=None):
- store_type = dovetail_config[self.type]['result']['store_type']
- if store_type == 'file':
- return self.crawl_from_file(testcase)
-
- if store_type == 'url':
- return self.crawl_from_url(testcase)
-
- def crawl_from_file(self, testcase=None):
- file_path = os.path.join(dovetail_config['result_dir'],dovetail_config[self.type]['result']['file_path'])
- if not os.path.exists(file_path):
- logger.info('result file not found: %s' % file_path)
- return None
-
- try:
- with open(file_path, 'r') as myfile:
- output = myfile.read()
- error_logs = ""
-
- for match in re.findall('(.*?)[. ]*FAILED', output):
- error_logs += match
-
- criteria = 'PASS'
- failed_num = int(re.findall(' - Failed: (\d*)', output)[0])
- if failed_num != 0:
- criteria = 'FAIL'
-
- match = re.findall('Ran: (\d*) tests in (\d*)\.\d* sec.', output)
- num_tests, dur_sec_int = match[0]
- json_results = {'criteria':criteria,'details':{"timestart": '', "duration": int(dur_sec_int),
- "tests": int(num_tests), "failures": failed_num,
- "errors": error_logs}}
- logger.debug('Results: %s' % str(json_results))
- return json_results
- except Exception as e:
- logger.error('Cannot read content from the file: %s, exception: %s' % (file_path, e))
- return None
-
- def crawl_from_url(self, testcase=None):
- url = dovetail_config[self.type]['result']['db_url'] % testcase
- logger.debug("Query to rest api: %s" % url)
- try:
- data = json.load(urllib2.urlopen(url))
- return data['results'][0]
- except Exception as e:
- logger.error("Cannot read content from the url: %s, exception: %s" % (url, e))
- return None
-
-class YardstickCrawler:
-
- def __init__(self):
- self.type = 'yardstick'
-
- def crawl(self, testcase=None):
- store_type = dovetail_config[self.type]['result']['store_type']
- if store_type == 'file':
- return self.crawl_from_file(testcase)
-
- if store_type == 'url':
- return self.crawl_from_url(testcase)
-
- def crawl_from_file(self, testcase=None):
- file_path = os.path.join(dovetail_config['result_dir'], testcase+'.out')
- if not os.path.exists(file_path):
- logger.info('result file not found: %s' % file_path)
- return None
- try:
- with open(file_path, 'r') as myfile:
- output = myfile.read()
- criteria = 'PASS'
- json_results = {'criteria':criteria}
- logger.debug('Results: %s' % str(json_results))
- return json_results
- except Exception as e:
- logger.error('Cannot read content from the file: %s, exception: %s' % (file_path, e))
- return None
-
- def crawl_from_url(self, testcase=None):
- return None
-
-class CheckerFactory:
-
- @classmethod
- def create(cls,type):
- if type == 'functest':
- return FunctestChecker()
-
- if type == 'yardstick':
- return YardstickChecker()
-
- return None
-
-class ResultChecker:
-
- def check(cls):
- return 'PASS'
-
-class FunctestChecker:
-
- def check(cls, testcase, db_result):
- if not db_result:
- for sub_testcase in testcase.sub_testcase():
- testcase.sub_testcase_passed(sub_testcase,False)
- return
-
- testcase.passed(db_result['criteria'] == 'PASS')
-
- if testcase.sub_testcase() is None:
- return
-
- if testcase.testcase['passed'] == True:
- for sub_testcase in testcase.sub_testcase():
- testcase.sub_testcase_passed(sub_testcase, True)
- return
-
- all_passed = True
- for sub_testcase in testcase.sub_testcase():
- logger.debug('check sub_testcase:%s' % sub_testcase)
- if sub_testcase in db_result['details']['errors']:
- testcase.sub_testcase_passed(sub_testcase, False)
- all_passed = False
- else:
- testcase.sub_testcase_passed(sub_testcase, True)
-
- testcase.passed(all_passed)
-
-class YardstickChecker:
-
- def check(cls, testcase, result):
- if not result:
- testcase.passed(False)
- else:
- testcase.passed(result['criteria'] == 'PASS')
- return
diff --git a/scripts/run.py b/scripts/run.py
deleted file mode 100755
index 85871fab..00000000
--- a/scripts/run.py
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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 click
-import yaml
-import os
-import time
-
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-
-
-from container import Container
-from testcase import *
-from report import *
-from conf.dovetail_config import *
-
-logger = dt_logger.Logger('run.py').getLogger()
-
-def load_scenario(scenario):
- Scenario.load()
- return Scenario.get(SCENARIO_NAMING_FMT % scenario)
-
-def load_testcase():
- Testcase.load()
-
-def run_test(scenario):
- for testcase_name in scenario['testcase_list']:
- logger.info('>>[testcase]: %s' % (testcase_name))
- testcase = Testcase.get(testcase_name)
- run_testcase = True
-
- if testcase.exceed_max_retry_times():
- run_testcase = False
-
- if testcase.script_result_acquired():
- run_testcase = False
-
- if run_testcase:
- Container.pull_image(testcase.script_type())
- container_id = Container.create(testcase.script_type())
- logger.debug('container id:%s' % container_id)
-
- if not Testcase.prepared(testcase.script_type()):
- cmds = Testcase.pre_condition(testcase.script_type())['cmds']
- if cmds:
- for cmd in cmds:
- Container.exec_cmd(container_id, cmd)
- Testcase.prepared(testcase.script_type(),True)
-
- if not testcase.prepare_cmd():
- logger.error('failed to prepare testcase:%s' % testcase.name())
- else:
- for cmd in testcase.cmds:
- Container.exec_cmd(container_id, cmd)
-
- #testcase.post_condition()
-
- Container.clean(container_id)
-
- db_result = Report.get_result(testcase)
- Report.check_result(testcase, db_result)
-
-@click.command()
-@click.option('--scenario', default='basic', help='certification scenario')
-def main(scenario):
- """Dovetail certification test entry!"""
- logger.info('=======================================')
- logger.info('Dovetail certification: %s!' % scenario)
- logger.info('=======================================')
- load_testcase()
- scenario_yaml = load_scenario(scenario)
- run_test(scenario_yaml)
- Report.generate(scenario_yaml)
-
-if __name__ == '__main__':
- main()
diff --git a/scripts/testcase.py b/scripts/testcase.py
deleted file mode 100644
index 4deabe2e..00000000
--- a/scripts/testcase.py
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env python
-#
-# grakiss.wanglei@huawei.com
-# 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 jinja2
-
-import utils.dovetail_logger as dt_logger
-import utils.dovetail_utils as dt_utils
-
-from parser import *
-
-logger = dt_logger.Logger('testcase.py').getLogger()
-
-from conf.dovetail_config import *
-
-class Testcase:
-
- def __init__(self, testcase_yaml):
- self.testcase = testcase_yaml.values()[0]
- self.testcase['passed'] = False
- self.cmds = []
- self.sub_testcase_status = {}
- Testcase.update_script_testcase(self.script_type(), self.script_testcase())
-
- def prepare_cmd(self):
- for cmd in dovetail_config[self.script_type()]['testcase']['cmds']:
- cmd_lines = Parser.parse_cmd(cmd,self)
- if not cmd_lines:
- return False
- self.cmds.append(cmd_lines)
-
- return True
-
- def __str__(self):
- return self.testcase
-
- def name(self):
- return self.testcase['name']
-
- def objective(self):
- return self.testcase['objective']
-
- def sub_testcase(self):
- return self.testcase['scripts']['sub_testcase_list']
-
- def sub_testcase_passed(self, name, passed=None):
- if passed is not None:
- logger.debug('sub_testcase_passed:%s %s' % (name, passed))
- self.sub_testcase_status[name] = passed
- return self.sub_testcase_status[name]
-
- def script_type(self):
- return self.testcase['scripts']['type']
-
- def script_testcase(self):
- return self.testcase['scripts']['testcase']
-
- def exceed_max_retry_times(self):
- #logger.debug('retry times:%d' % self.testcase['retry'])
- return Testcase._exceed_max_retry_times(self.script_type(), self.script_testcase())
-
- def increase_retry(self):
- #self.testcase['retry'] = self.testcase['retry'] + 1
- #return self.testcase['retry']
- return Testcase._increase_retry(self.script_type(), self.script_testcase())
-
- def passed(self, passed = None):
- if passed is not None:
- self.testcase['passed'] = passed
- return self.testcase['passed']
-
- def script_result_acquired(self, acquired=None):
- return Testcase._result_acquired(self.script_type(), self.script_testcase(), acquired)
-
- def pre_condition(self):
- return Testcase.pre_condition(self.script_type())
-
- def post_condition(self):
- return Testcase.post_condition(self.script_type())
-
-
- #testcase in upstream testing project
- script_testcase_list = {'functest':{}, 'yardstick':{}}
-
- #testcase in dovetail
- testcase_list = {}
-
- @classmethod
- def prepared(cls, script_type, prepared=None):
- if prepared is not None:
- cls.script_testcase_list[script_type]['prepared'] = prepared
- return cls.script_testcase_list[script_type]['prepared']
-
- @classmethod
- def cleaned(cls, script_type, cleaned=None):
- if cleaned is not None:
- cls.scrpit_testcase_list[script_type]['cleaned'] = cleaned
- return cls.script_testcase_list[script_type]['cleaned']
-
- @classmethod
- def pre_condition(cls, script_type):
- return dovetail_config[script_type]['pre_condition']
-
- def post_condition(cls, script_type):
- return dovetail_config[script_type]['post_condition']
-
-
- @classmethod
- def update_script_testcase(cls,script_type, script_testcase):
- if script_testcase not in cls.script_testcase_list[script_type]:
- cls.script_testcase_list[script_type][script_testcase] = {'retry':0, 'acquired':False}
- cls.script_testcase_list[script_type]['prepared'] = False
- cls.script_testcase_list[script_type]['cleaned'] = False
-
- @classmethod
- def _exceed_max_retry_times(cls, script_type, script_testcase ):
- return cls.script_testcase_list[script_type][script_testcase]['retry'] > 1
-
- @classmethod
- def _increase_retry(cls, script_type, script_testcase):
- cls.script_testcase_list[script_type][script_testcase]['retry'] += 1
- return cls.script_testcase_list[script_type][script_testcase]['retry']
-
- @classmethod
- def _result_acquired(cls, script_type, script_testcase, acquired=None):
- if acquired is not None:
- cls.script_testcase_list[script_type][script_testcase]['acquired'] = acquired
- return cls.script_testcase_list[script_type][script_testcase]['acquired']
-
- @classmethod
- def load(cls):
- for root, dirs, files in os.walk(TESTCASE_PATH):
- for testcase_file in files:
- with open(os.path.join(root, testcase_file)) as f:
- testcase_yaml = yaml.safe_load(f)
- cls.testcase_list[testcase_yaml.keys()[0]] = Testcase(testcase_yaml)
- logger.debug( cls.testcase_list )
-
- @classmethod
- def get(cls, testcase_name):
- if testcase_name in cls.testcase_list:
- return cls.testcase_list[testcase_name]
- return None
-
-
-class Scenario:
-
- def __init__(self, scenario):
- self.scenario = scenario
- self.testcase_list = {}
-
- def get_test(self, testcase_name):
- if testcase_name in self.testcase_list:
- return self.testcase_list[testcase_name]
- return None
-
- scenario_list = {}
- @classmethod
- def load(cls):
- for root, dirs, files in os.walk(CERT_PATH):
- for scenario_yaml in files:
- with open(os.path.join(root, scenario_yaml)) as f:
- scenario_yaml = yaml.safe_load(f)
- cls.scenario_list.update(scenario_yaml)
-
- logger.debug(cls.scenario_list)
-
- @classmethod
- def get(cls, scenario_name):
- if scenario_name in cls.scenario_list:
- return cls.scenario_list[scenario_name]
- return None
-
diff --git a/scripts/testcase/ipv6.tc001.yml b/scripts/testcase/ipv6.tc001.yml
deleted file mode 100644
index 9f11ac76..00000000
--- a/scripts/testcase/ipv6.tc001.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-dovetail.ipv6.tc001:
- name: dovetail.ipv6.tc001
- objective: VIM ipv6 operations, to create/delete network, port and subnet in bulk operation
- scripts:
- type: functest
- testcase: tempest_smoke_serial
- sub_testcase_list:
- - tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_network
- - tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_port
- - tempest.api.network.test_networks.BulkNetworkOpsIpV6Test.test_bulk_create_delete_subnet
diff --git a/scripts/utils/__init__.py b/scripts/utils/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/scripts/utils/__init__.py
+++ /dev/null
diff --git a/scripts/utils/dovetail_logger.py b/scripts/utils/dovetail_logger.py
deleted file mode 100644
index 9b20225c..00000000
--- a/scripts/utils/dovetail_logger.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-#
-# jose.lausuch@ericsson.com
-# 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
-#
-# Logging levels:
-# Level Numeric value
-# CRITICAL 50
-# ERROR 40
-# WARNING 30
-# INFO 20
-# DEBUG 10
-# NOTSET 0
-#
-# Usage:
-# import dovetail_logger as dl
-# logger = dl.Logger("script_name").getLogger()
-# logger.info("message to be shown with - INFO - ")
-# logger.debug("message to be shown with - DEBUG -")
-
-import logging
-import os
-
-class Logger:
- def __init__(self, logger_name):
-
- CI_DEBUG = os.getenv('CI_DEBUG')
-
- self.logger = logging.getLogger(logger_name)
- self.logger.propagate = 0
- self.logger.setLevel(logging.DEBUG)
-
- ch = logging.StreamHandler()
- formatter = logging.Formatter('%(asctime)s - %(name)s - '
- '%(levelname)s - %(message)s')
- ch.setFormatter(formatter)
- if CI_DEBUG is not None and CI_DEBUG.lower() == "true":
- ch.setLevel(logging.DEBUG)
- else:
- ch.setLevel(logging.INFO)
- self.logger.addHandler(ch)
-
- if not os.path.exists('/home/opnfv/dovetail/results/'):
- os.makedirs('/home/opnfv/dovetail/results/')
- hdlr = logging.FileHandler('/home/opnfv/dovetail/results/dovetail.log')
- hdlr.setFormatter(formatter)
- hdlr.setLevel(logging.DEBUG)
- self.logger.addHandler(hdlr)
-
- def getLogger(self):
- return self.logger
-
diff --git a/scripts/utils/dovetail_utils.py b/scripts/utils/dovetail_utils.py
deleted file mode 100644
index 4c671552..00000000
--- a/scripts/utils/dovetail_utils.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-#
-# jose.lausuch@ericsson.com
-# valentin.boucher@orange.com
-# grakiss.wanglei@huawei.com
-# 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 sys
-import subprocess
-
-def exec_cmd(cmd, logger=None,
- exit_on_error=True,
- info=False,
- error_msg="",
- verbose=True):
- if not error_msg:
- error_msg = ("The command '%s' failed." % cmd)
- msg_exec = ("Executing command: '%s'" % cmd)
- if verbose:
- if logger:
- if info:
- logger.info(msg_exec)
- else:
- logger.debug(msg_exec)
- else:
- print(msg_exec)
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- output = p.communicate()
- for line in output[0].strip().split('\n'):
- line = line.replace('\n', '')
- if logger:
- if info:
- logger.info(line)
- else:
- logger.debug(line)
- else:
- print line
- sys.stdout.flush()
-
- returncode = p.returncode
- if returncode != 0:
- if verbose:
- if logger:
- logger.error(error_msg)
- else:
- print(error_msg)
- if exit_on_error:
- sys.exit(1)
-
- return returncode, output[0].strip()
-
-
-#walkthrough the object, yield path and value
-from collections import Mapping, Set, Sequence
-
-# dual python 2/3 compatability, inspired by the "six" library
-string_types = (str, unicode) if str is bytes else (str, bytes)
-iteritems = lambda mapping: getattr(mapping, 'iteritems', mapping.items)()
-
-def objwalk(obj, path=(), memo=None):
- if memo is None:
- memo = set()
- iterator = None
- if isinstance(obj, Mapping):
- iterator = iteritems
- elif isinstance(obj, (Sequence, Set)) and not isinstance(obj, string_types):
- iterator = enumerate
- if iterator:
- if id(obj) not in memo:
- memo.add(id(obj))
- for path_component, value in iterator(obj):
- for result in objwalk(value, path + (path_component,), memo):
- yield result
- memo.remove(id(obj))
- else:
- yield path, obj
-
-def get_obj_by_path(obj,dst_path):
- for path, obj in objwalk(obj):
- if path == dst_path:
- return obj
-