diff options
Diffstat (limited to 'dovetail')
-rw-r--r-- | dovetail/compliance/proposed_tests.yml | 6 | ||||
-rw-r--r-- | dovetail/conf/dovetail_config.yml | 5 | ||||
-rw-r--r-- | dovetail/container.py | 15 | ||||
-rw-r--r-- | dovetail/report.py | 7 | ||||
-rwxr-xr-x | dovetail/run.py | 9 | ||||
-rw-r--r-- | dovetail/testcase/sdnvpn.tc001.yml | 12 | ||||
-rw-r--r-- | dovetail/testcase/sdnvpn.tc002.yml | 12 | ||||
-rw-r--r-- | dovetail/testcase/sdnvpn.tc003.yml | 12 | ||||
-rw-r--r-- | dovetail/testcase/sdnvpn.tc004.yml | 12 | ||||
-rw-r--r-- | dovetail/testcase/sdnvpn.tc008.yml | 12 | ||||
-rw-r--r-- | dovetail/utils/dovetail_utils.py | 4 |
11 files changed, 96 insertions, 10 deletions
diff --git a/dovetail/compliance/proposed_tests.yml b/dovetail/compliance/proposed_tests.yml index aaaa2023..cc4bfa8c 100644 --- a/dovetail/compliance/proposed_tests.yml +++ b/dovetail/compliance/proposed_tests.yml @@ -45,3 +45,9 @@ proposed_tests: - dovetail.ha.tc009 # - dovetail.ha.tc010 # - dovetail.ha.tc011 + # sdnvpn + - dovetail.sdnvpn.tc001 + - dovetail.sdnvpn.tc002 + - dovetail.sdnvpn.tc003 + - dovetail.sdnvpn.tc004 + - dovetail.sdnvpn.tc008 diff --git a/dovetail/conf/dovetail_config.yml b/dovetail/conf/dovetail_config.yml index 332628a2..934ff6a6 100644 --- a/dovetail/conf/dovetail_config.yml +++ b/dovetail/conf/dovetail_config.yml @@ -1,7 +1,8 @@ --- -report_file: 'dovetail_report.txt' +# report_file: 'dovetail_report.txt' cli_file_name: 'cmd_config.yml' report_dest: 'file' +result_file: 'results.json' # OPENSTACK Credential file openrc: '/home/opnfv/dovetail/openrc.sh' @@ -20,6 +21,7 @@ testarea_supported: - ha - ipv6 - nfvi + - sdnvpn - vimops functest_testsuite: @@ -31,6 +33,7 @@ functest_testsuite: - promise functest_testcase: + - bgpvpn - connection_check - api_check - snaps_health_check diff --git a/dovetail/container.py b/dovetail/container.py index 5c128c0b..ae7c8e2e 100644 --- a/dovetail/container.py +++ b/dovetail/container.py @@ -59,12 +59,19 @@ class Container(object): # set functest envs and TEST_DB_URL for creating functest container @staticmethod - def set_functest_config(): + def set_functest_config(testcase_name): # These are all just used by Functest's function push_results_to_db. # And has nothing to do with DoveTail running test cases. - ins_type = " -e INSTALLER_TYPE=unknown" - scenario = " -e DEPLOY_SCENARIO=unknown" + ins_type = os.getenv('INSTALLER_TYPE', "unknown") + scenario = os.getenv('DEPLOY_SCENARIO', "unknown") + ins_type = ''.join([" -e INSTALLER_TYPE=", ins_type]) + scenario = ''.join([" -e DEPLOY_SCENARIO=", scenario]) + # vpn testcase only runs when scenario name includes bgpvpn + # functest requirements + if 'sdnvpn' in testcase_name: + ins_type = "-e INSTALLER_TYPE=netvirt" + scenario = " -e DEPLOY_SCENARIO=bgpvpn" node = " -e NODE_NAME=master" envs = "%s %s %s" % (ins_type, scenario, node) @@ -122,7 +129,7 @@ class Container(object): config = "" if type.lower() == "functest": - config = cls.set_functest_config() + config = cls.set_functest_config(testcase_name) if type.lower() == "yardstick": config = cls.set_yardstick_config() if not config: diff --git a/dovetail/report.py b/dovetail/report.py index 2c6200d3..0d83831d 100644 --- a/dovetail/report.py +++ b/dovetail/report.py @@ -322,7 +322,12 @@ class YardstickCrawler(object): for jsonfile in f: data = json.loads(jsonfile) if 1 == data['status']: - criteria = 'PASS' + try: + v = data['result'][1]['benchmark']['data']['sla_pass'] + if 1 == v: + criteria = 'PASS' + except KeyError as e: + self.logger.error('pass flag not found %s', e) json_results = {'criteria': criteria} self.logger.debug('Results: %s', str(json_results)) return json_results diff --git a/dovetail/run.py b/dovetail/run.py index 4bea9b53..5b4dca8e 100755 --- a/dovetail/run.py +++ b/dovetail/run.py @@ -74,17 +74,20 @@ def check_tc_result(testcase, logger): result_dir = dt_cfg.dovetail_config['result_dir'] validate_type = testcase.validate_type() functest_result = dt_cfg.dovetail_config['functest']['result']['file_path'] + dovetail_result = os.path.join(result_dir, + dt_cfg.dovetail_config['result_file']) if dt_cfg.dovetail_config['report_dest'].startswith("http"): if validate_type.lower() == 'yardstick': logger.info("Results have been stored with file %s.", os.path.join(result_dir, testcase.validate_testcase() + '.out')) else: - if dt_utils.check_db_results(dt_cfg.dovetail_config['report_dest'], + if dt_utils.store_db_results(dt_cfg.dovetail_config['report_dest'], dt_cfg.dovetail_config['build_tag'], - testcase.name(), + testcase.name(), dovetail_result, logger): - logger.info("Results have been pushed to database.") + logger.info("Results have been pushed to database and stored " + "with local file %s.", dovetail_result) else: logger.error("Fail to push results to database.") if dt_cfg.dovetail_config['report_dest'] == "file": diff --git a/dovetail/testcase/sdnvpn.tc001.yml b/dovetail/testcase/sdnvpn.tc001.yml new file mode 100644 index 00000000..a453838a --- /dev/null +++ b/dovetail/testcase/sdnvpn.tc001.yml @@ -0,0 +1,12 @@ +--- +dovetail.sdnvpn.tc001: + name: dovetail.sdnvpn.tc001 + objective: Connectivity between Neutron subnets through association of Neutron Networks to VPNs + validate: + type: functest + testcase: bgpvpn + pre_copy: + src_file: sdnvpn_config_testcase1.yaml + dest_path: /home/opnfv/repos/sdnvpn/sdnvpn/test/functest/config.yaml + report: + sub_testcase_list: diff --git a/dovetail/testcase/sdnvpn.tc002.yml b/dovetail/testcase/sdnvpn.tc002.yml new file mode 100644 index 00000000..0e4cb51e --- /dev/null +++ b/dovetail/testcase/sdnvpn.tc002.yml @@ -0,0 +1,12 @@ +--- +dovetail.sdnvpn.tc002: + name: dovetail.sdnvpn.tc002 + objective: Separation of tenant networks through association to different VPNs + validate: + type: functest + testcase: bgpvpn + pre_copy: + src_file: sdnvpn_config_testcase2.yaml + dest_path: /home/opnfv/repos/sdnvpn/sdnvpn/test/functest/config.yaml + report: + sub_testcase_list: diff --git a/dovetail/testcase/sdnvpn.tc003.yml b/dovetail/testcase/sdnvpn.tc003.yml new file mode 100644 index 00000000..3da7ccd1 --- /dev/null +++ b/dovetail/testcase/sdnvpn.tc003.yml @@ -0,0 +1,12 @@ +--- +dovetail.sdnvpn.tc003: + name: dovetail.sdnvpn.tc003 + objective: Data center gateway integration through BGP peering + validate: + type: functest + testcase: bgpvpn + pre_copy: + src_file: sdnvpn_config_testcase3.yaml + dest_path: /home/opnfv/repos/sdnvpn/sdnvpn/test/functest/config.yaml + report: + sub_testcase_list: diff --git a/dovetail/testcase/sdnvpn.tc004.yml b/dovetail/testcase/sdnvpn.tc004.yml new file mode 100644 index 00000000..6e6727d2 --- /dev/null +++ b/dovetail/testcase/sdnvpn.tc004.yml @@ -0,0 +1,12 @@ +--- +dovetail.sdnvpn.tc004: + name: dovetail.sdnvpn.tc004 + objective: VPN provides connectivity between subnets using association of Neutron Router to VPNs + validate: + type: functest + testcase: bgpvpn + pre_copy: + src_file: sdnvpn_config_testcase4.yaml + dest_path: /home/opnfv/repos/sdnvpn/sdnvpn/test/functest/config.yaml + report: + sub_testcase_list: diff --git a/dovetail/testcase/sdnvpn.tc008.yml b/dovetail/testcase/sdnvpn.tc008.yml new file mode 100644 index 00000000..80b01d7b --- /dev/null +++ b/dovetail/testcase/sdnvpn.tc008.yml @@ -0,0 +1,12 @@ +--- +dovetail.sdnvpn.tc008: + name: dovetail.sdnvpn.tc008 + objective: associate Neutron Router with an attached subnet to a VPN and verify reachability of the Floating IP + validate: + type: functest + testcase: bgpvpn + pre_copy: + src_file: sdnvpn_config_testcase8.yaml + dest_path: /home/opnfv/repos/sdnvpn/sdnvpn/test/functest/config.yaml + report: + sub_testcase_list: diff --git a/dovetail/utils/dovetail_utils.py b/dovetail/utils/dovetail_utils.py index 83390e9d..e6a775f1 100644 --- a/dovetail/utils/dovetail_utils.py +++ b/dovetail/utils/dovetail_utils.py @@ -132,12 +132,14 @@ def get_ext_net_name(env_file, logger=None): return None -def check_db_results(db_url, build_tag, testcase, logger): +def store_db_results(db_url, build_tag, testcase, dest_file, logger): url = "%s?build_tag=%s-%s" % (db_url, build_tag, testcase) logger.debug("Query to rest api: %s", url) try: data = json.load(urllib2.urlopen(url)) if data['results']: + with open(dest_file, 'a') as f: + f.write(json.dumps(data['results'][0]) + '\n') return True else: return False |