summaryrefslogtreecommitdiffstats
path: root/dovetail
diff options
context:
space:
mode:
Diffstat (limited to 'dovetail')
-rw-r--r--dovetail/compliance/proposed_tests.yml6
-rw-r--r--dovetail/conf/dovetail_config.yml5
-rw-r--r--dovetail/container.py15
-rw-r--r--dovetail/report.py7
-rwxr-xr-xdovetail/run.py9
-rw-r--r--dovetail/testcase/sdnvpn.tc001.yml12
-rw-r--r--dovetail/testcase/sdnvpn.tc002.yml12
-rw-r--r--dovetail/testcase/sdnvpn.tc003.yml12
-rw-r--r--dovetail/testcase/sdnvpn.tc004.yml12
-rw-r--r--dovetail/testcase/sdnvpn.tc008.yml12
-rw-r--r--dovetail/utils/dovetail_utils.py4
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