summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/functest/config.py53
-rw-r--r--test/functest/config.yaml32
-rw-r--r--test/functest/results.py19
-rw-r--r--test/functest/run_tests.py22
-rw-r--r--test/functest/tempest.py12
-rw-r--r--test/functest/testcase_1.py237
-rw-r--r--test/functest/testcase_2.py326
-rw-r--r--test/functest/testcase_4.py239
-rw-r--r--test/functest/utils.py37
9 files changed, 420 insertions, 557 deletions
diff --git a/test/functest/config.py b/test/functest/config.py
new file mode 100644
index 0000000..45611c7
--- /dev/null
+++ b/test/functest/config.py
@@ -0,0 +1,53 @@
+import yaml
+import os
+
+import functest.utils.functest_constants as ft_constants
+import functest.utils.functest_logger as ft_logger
+import functest.utils.functest_utils as ft_utils
+
+logger = ft_logger.Logger("sndvpn_test_config").getLogger()
+
+
+class CommonConfig(object):
+ """
+ Common configuration parameters across testcases
+ """
+
+ def __init__(self):
+ self.repo_path = ft_constants.SDNVPN_REPO_DIR
+ self.config_file = os.path.join(self.repo_path,
+ 'test/functest/config.yaml')
+ self.keyfile_path = os.path.join(self.repo_path,
+ 'test/functest/id_rsa')
+ self.test_db = ft_utils.get_functest_config("results.test_db_url")
+ self.line_length = 90 # length for the summary table
+ self.vm_boot_timeout = 180
+ self.default_flavor = ft_utils.get_parameter_from_yaml(
+ "defaults.flavor", self.config_file)
+ self.image_filename = ft_utils.get_functest_config(
+ "general.openstack.image_file_name")
+ self.image_format = ft_utils.get_functest_config(
+ "general.openstack.image_disk_format")
+ self.image_path = '{0}/{1}'.format(
+ ft_utils.get_functest_config(
+ "general.directories.dir_functest_data"),
+ self.image_filename)
+
+
+class TestcaseConfig(object):
+ """
+ Configuration for a testcase.
+ Parse config.yaml into a dict and create an object out of it.
+ """
+
+ def __init__(self, testcase):
+ common_config = CommonConfig()
+ test_config = None
+ with open(common_config.config_file) as f:
+ testcases_yaml = yaml.safe_load(f)
+ test_config = testcases_yaml['testcases'].get(testcase, None)
+ if test_config is None:
+ logger.error('Test {0} configuration is not present in {1}'
+ .format(testcase, common_config.config_file))
+ # Update class fields with configuration variables dynamically
+ self.__dict__.update(**test_config)
diff --git a/test/functest/config.yaml b/test/functest/config.yaml
index 63d5843..d075c77 100644
--- a/test/functest/config.yaml
+++ b/test/functest/config.yaml
@@ -5,14 +5,14 @@ testcases:
tempest:
enabled: true
description: Neutron BGPVPN tests in tempest
- succes_criteria: 100 # all the subtests must pass
+ success_criteria: 100 # all the subtests must pass
testname_db: functest_tempest # declared name in the test api
# http://testresults.opnfv.org/test/api/v1/projects/sdnvpn/cases
testcase_1:
enabled: true
description: VPN provides connectivity between subnets
- succes_criteria: 75 # we let fail 25% of the subtests
+ success_criteria: 75 # we let fail 25% of the subtests
testname_db: functest_testcase_1
instance_1_name: sdnvpn-1-1
instance_2_name: sdnvpn-1-2
@@ -28,8 +28,8 @@ testcases:
subnet_2_name: sdnvpn-1-2-subnet
subnet_2_cidr: 10.10.11.0/24
router_2_name: sdnvpn-1-2-router
- sdnvpn_sg_name: sdnvpn-sg
- sdnvpn_sg_descr: Security group for SDNVPN test cases
+ secgroup_name: sdnvpn-sg
+ secgroup_descr: Security group for SDNVPN test cases
targets1: '88:88'
targets2: '55:55'
route_distinguishers: '11:11'
@@ -37,13 +37,18 @@ testcases:
testcase_2:
enabled: true
description: Tenant separation
- succes_criteria: 100 # all the subtests must pass
+ success_criteria: 100 # all the subtests must pass
testname_db: functest_testcase_2
instance_1_name: sdnvpn-2-1
instance_2_name: sdnvpn-2-2
instance_3_name: sdnvpn-2-3
instance_4_name: sdnvpn-2-4
instance_5_name: sdnvpn-2-5
+ instance_1_ip: 10.10.10.11
+ instance_2_ip: 10.10.10.12
+ instance_3_ip: 10.10.11.13
+ instance_4_ip: 10.10.10.12
+ instance_5_ip: 10.10.11.13
image_name: sdnvpn-image
net_1_name: sdnvpn-2-1-net
subnet_1a_name: sdnvpn-2-1a-subnet
@@ -57,21 +62,23 @@ testcases:
subnet_2b_name: sdnvpn-2-2b-subnet
subnet_2b_cidr: 10.10.10.0/24
router_2_name: sdnvpn-2-2-router
- sdnvpn_sg_name: sdnvpn-sg
- sdnvpn_sg_descr: Security group for SDNVPN test cases
+ secgroup_name: sdnvpn-sg
+ secgroup_descr: Security group for SDNVPN test cases
targets1: '88:88'
targets2: '55:55'
+ route_distinguishers1: '111:111'
+ route_distinguishers2: '222:222'
testcase_3:
enabled: false
description: Data center gateway integration
- succes_criteria: 100 # all the subtests must pass
+ success_criteria: 100 # all the subtests must pass
testname_db: functest_testcase_3
testcase_4:
- enabled: false
+ enabled: true
description: VPN provides connectivity between subnets using router association
- succes_criteria: 75 # we let fail 25% of the subtests
+ success_criteria: 75 # we let fail 25% of the subtests
testname_db: functest_testcase_4
instance_1_name: sdnvpn-4-1
instance_2_name: sdnvpn-4-2
@@ -87,7 +94,8 @@ testcases:
subnet_2_name: sdnvpn-4-2-subnet
subnet_2_cidr: 10.10.11.0/24
router_2_name: sdnvpn-4-2-router
- sdnvpn_sg_name: sdnvpn-sg
- sdnvpn_sg_descr: Security group for SDNVPN test cases
+ secgroup_name: sdnvpn-sg
+ secgroup_descr: Security group for SDNVPN test cases
targets1: '88:88'
targets2: '55:55'
+ route_distinguishers: '12:12'
diff --git a/test/functest/results.py b/test/functest/results.py
index baa6af7..7c73556 100644
--- a/test/functest/results.py
+++ b/test/functest/results.py
@@ -145,3 +145,22 @@ class Results(object):
% vm_source.name)
self.add_to_summary(2, "FAIL", test_case_name)
break
+
+ def compile_summary(self, SUCCESS_CRITERIA):
+ success_message = "All the subtests have passed."
+ failure_message = "One or more subtests have failed."
+
+ self.add_to_summary(0, "=")
+ logger.info("\n%s" % self.summary)
+ if self.test_result == "PASS":
+ logger.info(success_message)
+ else:
+ logger.info(failure_message)
+
+ status = "PASS"
+ success = 100 - \
+ (100 * int(self.num_tests_failed) / int(self.num_tests))
+ if success < int(SUCCESS_CRITERIA):
+ status = "FAILED"
+
+ return {"status": status, "details": self.details}
diff --git a/test/functest/run_tests.py b/test/functest/run_tests.py
index be2bcb2..e05cd7f 100644
--- a/test/functest/run_tests.py
+++ b/test/functest/run_tests.py
@@ -10,12 +10,13 @@
import argparse
import importlib
-import os
import sys
import time
+import yaml
+
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
-import yaml
+import config as sdnvpn_config
parser = argparse.ArgumentParser()
@@ -26,7 +27,8 @@ args = parser.parse_args()
TEST_DB_URL = ft_utils.get_functest_config('results.test_db_url')
logger = ft_logger.Logger("sdnvpn-run-tests").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
+
+COMMON_CONFIG = sdnvpn_config.CommonConfig()
def push_results(testname, start_time, end_time, criteria, details):
@@ -41,13 +43,11 @@ def push_results(testname, start_time, end_time, criteria, details):
def main():
- with open(REPO_PATH + 'test/functest/config.yaml') as f:
+ with open(COMMON_CONFIG.config_file) as f:
config_yaml = yaml.safe_load(f)
testcases = config_yaml.get("testcases")
- overall_details = {}
overall_status = "PASS"
- overall_start_time = time.time()
for testcase in testcases:
if testcases[testcase]['enabled']:
test_name = testcase
@@ -61,11 +61,9 @@ def main():
start_time = time.time()
result = t.main()
end_time = time.time()
- duration = end_time - start_time
if result < 0:
status = "FAIL"
overall_status = "FAIL"
- overall_details.update({test_name_db: "execution error."})
else:
status = result.get("status")
details = result.get("details")
@@ -75,18 +73,10 @@ def main():
if status == "FAIL":
overall_status = "FAIL"
- dic = {"duration": duration, "status": status}
- overall_details.update({test_name_db: dic})
if args.report:
push_results(
test_name_db, start_time, end_time, status, details)
- overall_end_time = time.time()
- if args.report:
- push_results(
- "bgpvpn", overall_start_time, overall_end_time,
- overall_status, overall_details)
-
if overall_status == "FAIL":
sys.exit(-1)
diff --git a/test/functest/tempest.py b/test/functest/tempest.py
index 61616de..9797ced 100644
--- a/test/functest/tempest.py
+++ b/test/functest/tempest.py
@@ -12,17 +12,17 @@ import ConfigParser
import os
import re
import shutil
+
import functest.utils.functest_logger as ft_logger
import functest.utils.functest_utils as ft_utils
-
+import config as sdnvpn_config
logger = ft_logger.Logger("sdnvpn-tempest").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
-config_file = REPO_PATH + 'test/functest/config.yaml'
+COMMON_CONFIG = sdnvpn_config.CommonConfig()
SUCCESS_CRITERIA = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.succes_criteria", config_file)
+ "testcases.testcase_1.succes_criteria", COMMON_CONFIG.config_file)
def main():
@@ -44,8 +44,8 @@ def main():
config.read(bgpvpn_tempest_conf)
config.set('service_available', 'bgpvpn', 'True')
logger.debug("Updating %s with bgpvpn=True" % bgpvpn_tempest_conf)
- with open(bgpvpn_tempest_conf, 'wb') as config_file:
- config.write(config_file)
+ with open(bgpvpn_tempest_conf, 'wb') as tempest_conf:
+ config.write(tempest_conf)
cmd_line = (src_tempest_dir +
"/run_tempest.sh -C %s -t -N -- "
diff --git a/test/functest/testcase_1.py b/test/functest/testcase_1.py
index 4ad29b6..eba39bb 100644
--- a/test/functest/testcase_1.py
+++ b/test/functest/testcase_1.py
@@ -9,16 +9,13 @@
#
import argparse
-import os
from random import randint
-import sys
-import time
import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
import utils as test_utils
+import config as sdnvpn_config
from results import Results
parser = argparse.ArgumentParser()
@@ -31,70 +28,12 @@ args = parser.parse_args()
logger = ft_logger.Logger("sdnvpn-testcase-1").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
-
-VM_BOOT_TIMEOUT = 180
-
-config_file = REPO_PATH + 'test/functest/config.yaml'
-
-INSTANCE_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.instance_1_name", config_file)
-INSTANCE_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.instance_2_name", config_file)
-INSTANCE_3_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.instance_3_name", config_file)
-INSTANCE_4_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.instance_4_name", config_file)
-INSTANCE_5_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.instance_5_name", config_file)
-IMAGE_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.image_name", config_file)
-ROUTE_DISTINGUISHERS = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.route_distinguishers", config_file)
-
-IMAGE_FILENAME = ft_utils.get_functest_config(
- "general.openstack.image_file_name")
-IMAGE_FORMAT = ft_utils.get_functest_config(
- "general.openstack.image_disk_format")
-IMAGE_PATH = ft_utils.get_functest_config(
- "general.directories.dir_functest_data") + "/" + IMAGE_FILENAME
-
-# NEUTRON Private Network parameters
-
-NET_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.net_1_name", config_file)
-SUBNET_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.subnet_1_name", config_file)
-SUBNET_1_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.subnet_1_cidr", config_file)
-ROUTER_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.router_1_name", config_file)
-NET_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.net_2_name", config_file)
-SUBNET_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.subnet_2_name", config_file)
-SUBNET_2_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.subnet_2_cidr", config_file)
-ROUTER_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.router_2_name", config_file)
-SECGROUP_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.sdnvpn_sg_name", config_file)
-SECGROUP_DESCR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.sdnvpn_sg_descr", config_file)
-TARGETS_1 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.targets1", config_file)
-TARGETS_2 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.targets2", config_file)
-SUCCESS_CRITERIA = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.succes_criteria", config_file)
-TEST_DB = ft_utils.get_functest_config("results.test_db_url")
-
-LINE_LENGTH = 60
+COMMON_CONFIG = sdnvpn_config.CommonConfig()
+TESTCASE_CONFIG = sdnvpn_config.TestcaseConfig('testcase_1')
def main():
- global LINE_LENGTH
- results = Results(LINE_LENGTH)
+ results = Results(COMMON_CONFIG.line_length)
results.add_to_summary(0, "=")
results.add_to_summary(2, "STATUS", "SUBTEST")
@@ -105,89 +44,78 @@ def main():
glance_client = os_utils.get_glance_client()
image_id = os_utils.create_glance_image(glance_client,
- IMAGE_NAME,
- IMAGE_PATH,
- disk=IMAGE_FORMAT,
+ TESTCASE_CONFIG.image_name,
+ COMMON_CONFIG.image_path,
+ disk=COMMON_CONFIG.image_format,
container="bare",
public=True)
network_1_id = test_utils.create_net(neutron_client,
- NET_1_NAME)
+ TESTCASE_CONFIG.net_1_name)
test_utils.create_subnet(neutron_client,
- SUBNET_1_NAME,
- SUBNET_1_CIDR,
+ TESTCASE_CONFIG.subnet_1_name,
+ TESTCASE_CONFIG.subnet_1_cidr,
network_1_id)
network_2_id = test_utils.create_net(neutron_client,
- NET_2_NAME)
+ TESTCASE_CONFIG.net_2_name)
test_utils.create_subnet(neutron_client,
- SUBNET_2_NAME,
- SUBNET_2_CIDR,
+ TESTCASE_CONFIG.subnet_2_name,
+ TESTCASE_CONFIG.subnet_2_cidr,
network_2_id)
sg_id = os_utils.create_security_group_full(neutron_client,
- SECGROUP_NAME, SECGROUP_DESCR)
-
- # Get hypervisors zones
- compute_nodes = os_utils.get_hypervisors(nova_client)
- num_compute_nodes = len(compute_nodes)
- if num_compute_nodes < 2:
- logger.error("There are %s compute nodes in the deployment. "
- "Minimum number of nodes to complete the test is 2."
- % num_compute_nodes)
- sys.exit(-1)
-
- logger.debug("Compute nodes: %s" % compute_nodes)
+ TESTCASE_CONFIG.secgroup_name,
+ TESTCASE_CONFIG.secgroup_descr)
+
+ compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+
av_zone_1 = "nova:" + compute_nodes[0]
av_zone_2 = "nova:" + compute_nodes[1]
# boot INTANCES
- vm_2 = test_utils.create_instance(nova_client,
- INSTANCE_2_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1)
+ vm_2 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_2_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1)
vm_2_ip = vm_2.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_2_NAME, vm_2_ip))
-
- vm_3 = test_utils.create_instance(nova_client,
- INSTANCE_3_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2)
+
+ vm_3 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_3_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2)
vm_3_ip = vm_3.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_3_NAME, vm_3_ip))
-
- vm_5 = test_utils.create_instance(nova_client,
- INSTANCE_5_NAME,
- image_id,
- network_2_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2)
+
+ vm_5 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_5_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2)
vm_5_ip = vm_5.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_5_NAME, vm_5_ip))
# We boot vm5 first because we need vm5_ip for vm4 userdata
u4 = test_utils.generate_ping_userdata([vm_5_ip])
- vm_4 = test_utils.create_instance(nova_client,
- INSTANCE_4_NAME,
- image_id,
- network_2_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u4)
+ vm_4 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_4_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u4)
vm_4_ip = vm_4.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_4_NAME, vm_4_ip))
# We boot VM1 at the end because we need to get the IPs first to generate
# the userdata
@@ -195,30 +123,32 @@ def main():
vm_3_ip,
vm_4_ip,
vm_5_ip])
- vm_1 = test_utils.create_instance(nova_client,
- INSTANCE_1_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u1)
+ vm_1 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_1_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u1)
vm_1_ip = vm_1.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_1_NAME, vm_1_ip))
+
msg = ("Create VPN with eRT<>iRT")
logger.info(msg)
results.add_to_summary(1, msg)
vpn_name = "sdnvpn-" + str(randint(100000, 999999))
- kwargs = {"import_targets": TARGETS_1,
- "export_targets": TARGETS_2,
- "route_distinguishers": ROUTE_DISTINGUISHERS,
- "name": vpn_name}
+ kwargs = {
+ "import_targets": TESTCASE_CONFIG.targets1,
+ "export_targets": TESTCASE_CONFIG.targets2,
+ "route_distinguishers": TESTCASE_CONFIG.route_distinguishers,
+ "name": vpn_name
+ }
bgpvpn = os_utils.create_bgpvpn(neutron_client, **kwargs)
bgpvpn_id = bgpvpn['bgpvpn']['id']
logger.debug("VPN created details: %s" % bgpvpn)
- msg = ("Associate network '%s' to the VPN." % NET_1_NAME)
+ msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_1_name)
logger.info(msg)
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
@@ -245,7 +175,7 @@ def main():
results.get_ping_status(vm_1, vm_1_ip, vm_4, vm_4_ip,
expected="FAIL", timeout=30)
- msg = ("Associate network '%s' to the VPN." % NET_2_NAME)
+ msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_2_name)
logger.info(msg)
results.add_to_summary(0, "-")
results.add_to_summary(1, msg)
@@ -260,7 +190,7 @@ def main():
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# Ping from VM4 to VM5 should work
results.get_ping_status(vm_4, vm_4_ip, vm_5, vm_5_ip,
@@ -277,13 +207,14 @@ def main():
results.add_to_summary(0, "-")
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
- kwargs = {"import_targets": TARGETS_1,
- "export_targets": TARGETS_1,
+ kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+ "export_targets": TESTCASE_CONFIG.targets1,
"name": vpn_name}
bgpvpn = os_utils.update_bgpvpn(neutron_client, bgpvpn_id, **kwargs)
+
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# Ping from VM1 to VM4 should work
results.get_ping_status(vm_1, vm_1_ip, vm_4, vm_4_ip,
@@ -292,21 +223,7 @@ def main():
results.get_ping_status(vm_1, vm_1_ip, vm_5, vm_5_ip,
expected="PASS", timeout=30)
- results.add_to_summary(0, "=")
- logger.info("\n%s" % results.summary)
-
- if results.test_result == "PASS":
- logger.info("All the ping tests have passed as expected.")
- else:
- logger.info("One or more ping tests have failed.")
-
- status = "PASS"
- success = 100 - \
- (100 * int(results.num_tests_failed) / int(results.num_tests))
- if success < int(SUCCESS_CRITERIA):
- status = "FAILED"
-
- return {"status": status, "details": results.details}
+ return results.compile_summary(TESTCASE_CONFIG.success_criteria)
if __name__ == '__main__':
diff --git a/test/functest/testcase_2.py b/test/functest/testcase_2.py
index ed86b02..e8b8048 100644
--- a/test/functest/testcase_2.py
+++ b/test/functest/testcase_2.py
@@ -9,17 +9,15 @@
#
import argparse
-import os
from random import randint
import sys
-import time
import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
import utils as test_utils
from results import Results
+import config as sdnvpn_config
parser = argparse.ArgumentParser()
@@ -31,85 +29,12 @@ args = parser.parse_args()
logger = ft_logger.Logger("sdnvpn-testcase-2").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
-
-VM_BOOT_TIMEOUT = 180
-
-config_file = REPO_PATH + 'test/functest/config.yaml'
-
-INSTANCE_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.instance_1_name", config_file)
-INSTANCE_1_IP = "10.10.10.11"
-INSTANCE_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.instance_2_name", config_file)
-INSTANCE_2_IP = "10.10.10.12"
-INSTANCE_3_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.instance_3_name", config_file)
-INSTANCE_3_IP = "10.10.11.13"
-INSTANCE_4_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.instance_4_name", config_file)
-INSTANCE_4_IP = "10.10.10.12"
-INSTANCE_5_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.instance_5_name", config_file)
-INSTANCE_5_IP = "10.10.11.13"
-IMAGE_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.image_name", config_file)
-IMAGE_FILENAME = ft_utils.get_functest_config(
- "general.openstack.image_file_name")
-IMAGE_FORMAT = ft_utils.get_functest_config(
- "general.openstack.image_disk_format")
-IMAGE_PATH = ft_utils.get_functest_config(
- "general.directories.dir_functest_data") + "/" + IMAGE_FILENAME
-
-KEYFILE_PATH = REPO_PATH + 'test/functest/id_rsa'
-
-# NEUTRON Private Network parameters
-
-NET_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.net_1_name", config_file)
-SUBNET_1a_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_1a_name", config_file)
-SUBNET_1a_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_1a_cidr", config_file)
-SUBNET_1b_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_1b_name", config_file)
-SUBNET_1b_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_1b_cidr", config_file)
-ROUTER_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.router_1_name", config_file)
-NET_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.net_2_name", config_file)
-SUBNET_2a_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_2a_name", config_file)
-SUBNET_2a_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_2a_cidr", config_file)
-SUBNET_2b_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_2b_name", config_file)
-SUBNET_2b_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.subnet_2b_cidr", config_file)
-ROUTER_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.router_1_name", config_file)
-ROUTER_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.router_2_name", config_file)
-SECGROUP_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.sdnvpn_sg_name", config_file)
-SECGROUP_DESCR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.sdnvpn_sg_descr", config_file)
-TARGETS_1 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.targets1", config_file)
-TARGETS_2 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_2.targets2", config_file)
-SUCCESS_CRITERIA = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_1.succes_criteria", config_file)
-TEST_DB = ft_utils.get_functest_config("results.test_db_url")
-
-LINE_LENGTH = 90 # length for the summary table
+COMMON_CONFIG = sdnvpn_config.CommonConfig()
+TESTCASE_CONFIG = sdnvpn_config.TestcaseConfig('testcase_2')
def main():
- global LINE_LENGTH
-
- results = Results(LINE_LENGTH)
+ results = Results(COMMON_CONFIG.line_length)
results.add_to_summary(0, "=")
results.add_to_summary(2, "STATUS", "SUBTEST")
@@ -119,137 +44,146 @@ def main():
neutron_client = os_utils.get_neutron_client()
glance_client = os_utils.get_glance_client()
- logger.debug("Using private key %s injected to the VMs." % KEYFILE_PATH)
- keyfile = open(KEYFILE_PATH, 'r')
+ logger.debug("Using private key %s injected to the VMs."
+ % COMMON_CONFIG.keyfile_path)
+ keyfile = open(COMMON_CONFIG.keyfile_path, 'r')
key = keyfile.read()
keyfile.close()
files = {"/home/cirros/id_rsa": key}
image_id = os_utils.create_glance_image(glance_client,
- IMAGE_NAME,
- IMAGE_PATH,
- disk=IMAGE_FORMAT,
+ TESTCASE_CONFIG.image_name,
+ COMMON_CONFIG.image_path,
+ disk=COMMON_CONFIG.image_format,
container="bare",
public=True)
- network_1_id, _, _ = test_utils.create_network(neutron_client,
- NET_1_NAME,
- SUBNET_1a_NAME,
- SUBNET_1a_CIDR,
- ROUTER_1_NAME,
- SUBNET_1b_NAME,
- SUBNET_1b_CIDR)
- network_2_id, _, _ = test_utils.create_network(neutron_client,
- NET_2_NAME,
- SUBNET_2a_NAME,
- SUBNET_2a_CIDR,
- ROUTER_2_NAME,
- SUBNET_2b_NAME,
- SUBNET_2b_CIDR)
+ network_1_id = test_utils.create_net(
+ neutron_client,
+ TESTCASE_CONFIG.net_1_name)
+ test_utils.create_subnet(
+ neutron_client,
+ TESTCASE_CONFIG.subnet_1a_name,
+ TESTCASE_CONFIG.subnet_1a_cidr,
+ network_1_id)
+ test_utils.create_subnet(
+ neutron_client,
+ TESTCASE_CONFIG.subnet_1b_name,
+ TESTCASE_CONFIG.subnet_1b_cidr,
+ network_1_id)
+
+ network_2_id = test_utils.create_net(
+ neutron_client,
+ TESTCASE_CONFIG.net_2_name)
+ test_utils.create_subnet(
+ neutron_client,
+ TESTCASE_CONFIG.subnet_2a_name,
+ TESTCASE_CONFIG.subnet_2a_cidr,
+ network_2_id)
+ test_utils.create_subnet(
+ neutron_client,
+ TESTCASE_CONFIG.subnet_2b_name,
+ TESTCASE_CONFIG.subnet_2b_cidr,
+ network_2_id)
+
sg_id = os_utils.create_security_group_full(neutron_client,
- SECGROUP_NAME, SECGROUP_DESCR)
-
- # Get hypervisors zones
- compute_nodes = os_utils.get_hypervisors(nova_client)
- num_compute_nodes = len(compute_nodes)
- if num_compute_nodes < 2:
- logger.error("There are %s compute nodes in the deployment. "
- "Minimum number of nodes to complete the test is 2."
- % num_compute_nodes)
- sys.exit(-1)
+ TESTCASE_CONFIG.secgroup_name,
+ TESTCASE_CONFIG.secgroup_descr)
+
+ compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
- logger.debug("Compute nodes: %s" % compute_nodes)
av_zone_1 = "nova:" + compute_nodes[0]
av_zone_2 = "nova:" + compute_nodes[1]
# boot INTANCES
userdata_common = test_utils.generate_userdata_common()
- vm_2 = test_utils.create_instance(nova_client,
- INSTANCE_2_NAME,
- image_id,
- network_1_id,
- sg_id,
- fixed_ip=INSTANCE_2_IP,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=userdata_common)
+ vm_2 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_2_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ fixed_ip=TESTCASE_CONFIG.instance_2_ip,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=userdata_common)
vm_2_ip = vm_2.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_2_NAME, vm_2_ip))
-
- vm_3 = test_utils.create_instance(nova_client,
- INSTANCE_3_NAME,
- image_id,
- network_1_id,
- sg_id,
- fixed_ip=INSTANCE_3_IP,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2,
- userdata=userdata_common)
+
+ vm_3 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_3_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ fixed_ip=TESTCASE_CONFIG.instance_3_ip,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2,
+ userdata=userdata_common)
vm_3_ip = vm_3.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_3_NAME, vm_3_ip))
-
- vm_5 = test_utils.create_instance(nova_client,
- INSTANCE_5_NAME,
- image_id,
- network_2_id,
- sg_id,
- fixed_ip=INSTANCE_5_IP,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2,
- userdata=userdata_common)
+
+ vm_5 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_5_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ fixed_ip=TESTCASE_CONFIG.instance_5_ip,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2,
+ userdata=userdata_common)
vm_5_ip = vm_5.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_5_NAME, vm_5_ip))
# We boot vm5 first because we need vm5_ip for vm4 userdata
u4 = test_utils.generate_userdata_with_ssh(
- [INSTANCE_1_IP, INSTANCE_3_IP, INSTANCE_5_IP])
- vm_4 = test_utils.create_instance(nova_client,
- INSTANCE_4_NAME,
- image_id,
- network_2_id,
- sg_id,
- fixed_ip=INSTANCE_4_IP,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u4,
- files=files)
+ [TESTCASE_CONFIG.instance_1_ip,
+ TESTCASE_CONFIG.instance_3_ip,
+ TESTCASE_CONFIG.instance_5_ip])
+ vm_4 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_4_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ fixed_ip=TESTCASE_CONFIG.instance_4_ip,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u4,
+ files=files)
vm_4_ip = vm_4.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_4_NAME, vm_4_ip))
# We boot VM1 at the end because we need to get the IPs first to generate
# the userdata
u1 = test_utils.generate_userdata_with_ssh(
- [INSTANCE_2_IP, INSTANCE_3_IP, INSTANCE_4_IP, INSTANCE_5_IP])
- vm_1 = test_utils.create_instance(nova_client,
- INSTANCE_1_NAME,
- image_id,
- network_1_id,
- sg_id,
- fixed_ip=INSTANCE_1_IP,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u1,
- files=files)
+ [TESTCASE_CONFIG.instance_2_ip,
+ TESTCASE_CONFIG.instance_3_ip,
+ TESTCASE_CONFIG.instance_4_ip,
+ TESTCASE_CONFIG.instance_5_ip])
+ vm_1 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_1_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ fixed_ip=TESTCASE_CONFIG.instance_1_ip,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u1,
+ files=files)
vm_1_ip = vm_1.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_1_NAME, vm_1_ip))
msg = ("Create VPN1 with eRT=iRT")
logger.info(msg)
results.add_to_summary(1, msg)
vpn1_name = "sdnvpn-1-" + str(randint(100000, 999999))
- kwargs = {"import_targets": TARGETS_2,
- "export_targets": TARGETS_2,
- "route_targets": TARGETS_2,
+ kwargs = {"import_targets": TESTCASE_CONFIG.targets2,
+ "export_targets": TESTCASE_CONFIG.targets2,
+ "route_targets": TESTCASE_CONFIG.targets2,
+ "route_distinguishers": TESTCASE_CONFIG.route_distinguishers1,
"name": vpn1_name}
bgpvpn1 = os_utils.create_bgpvpn(neutron_client, **kwargs)
bgpvpn1_id = bgpvpn1['bgpvpn']['id']
logger.debug("VPN1 created details: %s" % bgpvpn1)
- msg = ("Associate network '%s' to the VPN." % NET_1_NAME)
+ msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_1_name)
logger.info(msg)
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
@@ -268,29 +202,36 @@ def main():
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# 10.10.10.12 should return sdnvpn-2 to sdnvpn-1
results.check_ssh_output(
- vm_1, vm_1_ip, vm_2, vm_2_ip, expected=INSTANCE_2_NAME, timeout=200)
+ vm_1, vm_1_ip,
+ vm_2, vm_2_ip,
+ expected=TESTCASE_CONFIG.instance_2_name,
+ timeout=200)
# 10.10.11.13 should return sdnvpn-3 to sdnvpn-1
results.check_ssh_output(
- vm_1, vm_1_ip, vm_3, vm_3_ip, expected=INSTANCE_3_NAME, timeout=30)
+ vm_1, vm_1_ip,
+ vm_3, vm_3_ip,
+ expected=TESTCASE_CONFIG.instance_3_name,
+ timeout=30)
results.add_to_summary(0, "-")
msg = ("Create VPN2 with eRT=iRT")
logger.info(msg)
results.add_to_summary(1, msg)
vpn2_name = "sdnvpn-2-" + str(randint(100000, 999999))
- kwargs = {"import_targets": TARGETS_1,
- "export_targets": TARGETS_1,
- "route_targets": TARGETS_1,
+ kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+ "export_targets": TESTCASE_CONFIG.targets1,
+ "route_targets": TESTCASE_CONFIG.targets1,
+ "route_distinguishers": TESTCASE_CONFIG.route_distinguishers2,
"name": vpn2_name}
bgpvpn2 = os_utils.create_bgpvpn(neutron_client, **kwargs)
bgpvpn2_id = bgpvpn2['bgpvpn']['id']
logger.debug("VPN created details: %s" % bgpvpn2)
- msg = ("Associate network '%s' to the VPN2." % NET_2_NAME)
+ msg = ("Associate network '%s' to the VPN2." % TESTCASE_CONFIG.net_2_name)
logger.info(msg)
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
@@ -303,31 +244,20 @@ def main():
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# 10.10.11.13 should return sdnvpn-5 to sdnvpn-4
results.check_ssh_output(
- vm_4, vm_4_ip, vm_5, vm_5_ip, expected=INSTANCE_5_NAME, timeout=30)
+ vm_4, vm_4_ip,
+ vm_5, vm_5_ip,
+ expected=TESTCASE_CONFIG.instance_5_name,
+ timeout=30)
# 10.10.10.11 should return "not reachable" to sdnvpn-4
results.check_ssh_output(
vm_4, vm_4_ip, vm_1, vm_1_ip, expected="not reachable", timeout=30)
- results.add_to_summary(0, "=")
- logger.info("\n%s" % results.summary)
-
- if results.test_result == "PASS":
- logger.info("All the sub tests have passed as expected.")
- else:
- logger.info("One or more sub tests have failed.")
-
- status = "PASS"
- success = 100 - \
- (100 * int(results.num_tests_failed) / int(results.num_tests))
- if success < int(SUCCESS_CRITERIA):
- status = "FAILED"
-
- return {"status": status, "details": results.details}
+ return results.compile_summary(TESTCASE_CONFIG.success_criteria)
if __name__ == '__main__':
diff --git a/test/functest/testcase_4.py b/test/functest/testcase_4.py
index 13f531f..bb25cce 100644
--- a/test/functest/testcase_4.py
+++ b/test/functest/testcase_4.py
@@ -9,17 +9,14 @@
#
import argparse
-import os
from random import randint
-import sys
-import time
import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
import utils as test_utils
from results import Results
+import config as sdnvpn_config
parser = argparse.ArgumentParser()
@@ -31,68 +28,12 @@ args = parser.parse_args()
logger = ft_logger.Logger("sdnvpn-testcase-4").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
-
-VM_BOOT_TIMEOUT = 180
-
-config_file = REPO_PATH + 'test/functest/config.yaml'
-
-INSTANCE_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.instance_1_name", config_file)
-INSTANCE_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.instance_2_name", config_file)
-INSTANCE_3_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.instance_3_name", config_file)
-INSTANCE_4_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.instance_4_name", config_file)
-INSTANCE_5_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.instance_5_name", config_file)
-IMAGE_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.image_name", config_file)
-IMAGE_FILENAME = ft_utils.get_functest_config(
- "general.openstack.image_file_name")
-IMAGE_FORMAT = ft_utils.get_functest_config(
- "general.openstack.image_disk_format")
-IMAGE_PATH = ft_utils.get_functest_config(
- "general.directories.dir_functest_data") + "/" + IMAGE_FILENAME
-
-# NEUTRON Private Network parameters
-
-NET_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.net_1_name", config_file)
-SUBNET_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.subnet_1_name", config_file)
-SUBNET_1_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.subnet_1_cidr", config_file)
-ROUTER_1_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.router_1_name", config_file)
-NET_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.net_2_name", config_file)
-SUBNET_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.subnet_2_name", config_file)
-SUBNET_2_CIDR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.subnet_2_cidr", config_file)
-ROUTER_2_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.router_2_name", config_file)
-SECGROUP_NAME = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.sdnvpn_sg_name", config_file)
-SECGROUP_DESCR = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.sdnvpn_sg_descr", config_file)
-TARGETS_1 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.targets1", config_file)
-TARGETS_2 = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.targets2", config_file)
-SUCCESS_CRITERIA = ft_utils.get_parameter_from_yaml(
- "testcases.testcase_4.succes_criteria", config_file)
-TEST_DB = ft_utils.get_functest_config("results.test_db_url")
-
-LINE_LENGTH = 60 # length for the summary table
+COMMON_CONFIG = sdnvpn_config.CommonConfig()
+TESTCASE_CONFIG = sdnvpn_config.TestcaseConfig('testcase_4')
def main():
- global LINE_LENGTH
-
- results = Results(LINE_LENGTH)
+ results = Results(COMMON_CONFIG.line_length)
results.add_to_summary(0, "=")
results.add_to_summary(2, "STATUS", "SUBTEST")
@@ -103,84 +44,78 @@ def main():
glance_client = os_utils.get_glance_client()
image_id = os_utils.create_glance_image(glance_client,
- IMAGE_NAME,
- IMAGE_PATH,
- disk=IMAGE_FORMAT,
+ TESTCASE_CONFIG.image_name,
+ COMMON_CONFIG.image_path,
+ disk=COMMON_CONFIG.image_format,
container="bare",
public=True)
- network_1_id, _, router_1_id = test_utils.create_network(neutron_client,
- NET_1_NAME,
- SUBNET_1_NAME,
- SUBNET_1_CIDR,
- ROUTER_1_NAME)
- network_2_id, _, router_2_id = test_utils.create_network(neutron_client,
- NET_2_NAME,
- SUBNET_2_NAME,
- SUBNET_2_CIDR,
- ROUTER_2_NAME)
+ network_1_id, _, router_1_id = test_utils.create_network(
+ neutron_client,
+ TESTCASE_CONFIG.net_1_name,
+ TESTCASE_CONFIG.subnet_1_name,
+ TESTCASE_CONFIG.subnet_1_cidr,
+ TESTCASE_CONFIG.router_1_name)
+
+ network_2_id = test_utils.create_net(
+ neutron_client,
+ TESTCASE_CONFIG.net_2_name)
+ test_utils.create_subnet(neutron_client,
+ TESTCASE_CONFIG.subnet_2_name,
+ TESTCASE_CONFIG.subnet_2_cidr,
+ network_2_id)
+
sg_id = os_utils.create_security_group_full(neutron_client,
- SECGROUP_NAME, SECGROUP_DESCR)
-
- # Get hypervisors zones
- compute_nodes = os_utils.get_hypervisors(nova_client)
- num_compute_nodes = len(compute_nodes)
- if num_compute_nodes < 2:
- logger.error("There are %s compute nodes in the deployment. "
- "Minimum number of nodes to complete the test is 2."
- % num_compute_nodes)
- sys.exit(-1)
-
- logger.debug("Compute nodes: %s" % compute_nodes)
+ TESTCASE_CONFIG.secgroup_name,
+ TESTCASE_CONFIG.secgroup_descr)
+
+ compute_nodes = test_utils.assert_and_get_compute_nodes(nova_client)
+
av_zone_1 = "nova:" + compute_nodes[0]
av_zone_2 = "nova:" + compute_nodes[1]
# boot INTANCES
- vm_2 = test_utils.create_instance(nova_client,
- INSTANCE_2_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1)
+ vm_2 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_2_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1)
vm_2_ip = vm_2.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_2_NAME, vm_2_ip))
-
- vm_3 = test_utils.create_instance(nova_client,
- INSTANCE_3_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2)
+
+ vm_3 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_3_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2)
vm_3_ip = vm_3.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_3_NAME, vm_3_ip))
-
- vm_5 = test_utils.create_instance(nova_client,
- INSTANCE_5_NAME,
- image_id,
- network_2_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_2)
+
+ vm_5 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_5_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_2)
vm_5_ip = vm_5.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_5_NAME, vm_5_ip))
# We boot vm5 first because we need vm5_ip for vm4 userdata
u4 = test_utils.generate_ping_userdata([vm_5_ip])
- vm_4 = test_utils.create_instance(nova_client,
- INSTANCE_4_NAME,
- image_id,
- network_2_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u4)
+ vm_4 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_4_name,
+ image_id,
+ network_2_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u4)
vm_4_ip = vm_4.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_4_NAME, vm_4_ip))
# We boot VM1 at the end because we need to get the IPs first to generate
# the userdata
@@ -188,29 +123,30 @@ def main():
vm_3_ip,
vm_4_ip,
vm_5_ip])
- vm_1 = test_utils.create_instance(nova_client,
- INSTANCE_1_NAME,
- image_id,
- network_1_id,
- sg_id,
- secgroup_name=SECGROUP_NAME,
- compute_node=av_zone_1,
- userdata=u1)
+ vm_1 = test_utils.create_instance(
+ nova_client,
+ TESTCASE_CONFIG.instance_1_name,
+ image_id,
+ network_1_id,
+ sg_id,
+ secgroup_name=TESTCASE_CONFIG.secgroup_name,
+ compute_node=av_zone_1,
+ userdata=u1)
vm_1_ip = vm_1.networks.itervalues().next()[0]
- logger.debug("Instance '%s' booted successfully. IP='%s'." %
- (INSTANCE_1_NAME, vm_1_ip))
+
msg = ("Create VPN with eRT<>iRT")
logger.info(msg)
results.add_to_summary(1, msg)
vpn_name = "sdnvpn-" + str(randint(100000, 999999))
- kwargs = {"import_targets": TARGETS_1,
- "export_targets": TARGETS_2,
+ kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+ "export_targets": TESTCASE_CONFIG.targets2,
+ "route_distinguishers": TESTCASE_CONFIG.route_distinguishers,
"name": vpn_name}
bgpvpn = os_utils.create_bgpvpn(neutron_client, **kwargs)
bgpvpn_id = bgpvpn['bgpvpn']['id']
logger.debug("VPN created details: %s" % bgpvpn)
- msg = ("Associate router '%s' to the VPN." % ROUTER_1_NAME)
+ msg = ("Associate router '%s' to the VPN." % TESTCASE_CONFIG.router_1_name)
logger.info(msg)
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
@@ -237,7 +173,7 @@ def main():
results.get_ping_status(vm_1, vm_1_ip, vm_4, vm_4_ip,
expected="FAIL", timeout=30)
- msg = ("Associate network '%s' to the VPN." % NET_2_NAME)
+ msg = ("Associate network '%s' to the VPN." % TESTCASE_CONFIG.net_2_name)
logger.info(msg)
results.add_to_summary(0, "-")
results.add_to_summary(1, msg)
@@ -252,7 +188,7 @@ def main():
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# Ping from VM4 to VM5 should work
results.get_ping_status(vm_4, vm_4_ip, vm_5, vm_5_ip,
@@ -269,14 +205,14 @@ def main():
results.add_to_summary(0, "-")
results.add_to_summary(1, msg)
results.add_to_summary(0, "-")
- kwargs = {"import_targets": TARGETS_1,
- "export_targets": TARGETS_1,
+ kwargs = {"import_targets": TESTCASE_CONFIG.targets1,
+ "export_targets": TESTCASE_CONFIG.targets1,
"name": vpn_name}
bgpvpn = os_utils.update_bgpvpn(neutron_client, bgpvpn_id, **kwargs)
logger.info("Waiting for the VMs to connect to each other using the"
" updated network configuration")
- time.sleep(30)
+ test_utils.wait_before_subtest()
# Ping from VM1 to VM4 should work
results.get_ping_status(vm_1, vm_1_ip, vm_4, vm_4_ip,
@@ -288,18 +224,7 @@ def main():
results.add_to_summary(0, "=")
logger.info("\n%s" % results.summary)
- if results.test_result == "PASS":
- logger.info("All the ping tests have passed as expected.")
- else:
- logger.info("One or more ping tests have failed.")
-
- status = "PASS"
- success = 100 - \
- (100 * int(results.num_tests_failed) / int(results.num_tests_failed))
- if success < int(SUCCESS_CRITERIA):
- status = "FAILED"
-
- return {"status": status, "details": results.details}
+ return results.compile_summary(TESTCASE_CONFIG.success_criteria)
if __name__ == '__main__':
diff --git a/test/functest/utils.py b/test/functest/utils.py
index be08572..90dfe93 100644
--- a/test/functest/utils.py
+++ b/test/functest/utils.py
@@ -9,21 +9,16 @@
#
import sys
import time
-import os
import functest.utils.functest_logger as ft_logger
-import functest.utils.functest_utils as ft_utils
import functest.utils.openstack_utils as os_utils
import re
+import config as sdnvpn_config
logger = ft_logger.Logger("sndvpn_test_utils").getLogger()
-REPO_PATH = os.environ['repos_dir'] + '/sdnvpn/'
-config_file = REPO_PATH + 'test/functest/config.yaml'
-
-DEFAULT_FLAVOR = ft_utils.get_parameter_from_yaml(
- "defaults.flavor", config_file)
+common_config = sdnvpn_config.CommonConfig()
def create_net(neutron_client, name):
@@ -94,7 +89,7 @@ def create_instance(nova_client,
**kwargs
):
if 'flavor' not in kwargs:
- kwargs['flavor'] = DEFAULT_FLAVOR
+ kwargs['flavor'] = common_config.default_flavor
logger.info("Creating instance '%s'..." % name)
logger.debug(
@@ -117,6 +112,9 @@ def create_instance(nova_client,
if instance is None:
logger.error("Error while booting instance.")
sys.exit(-1)
+ else:
+ logger.debug("Instance '%s' booted successfully. IP='%s'." %
+ (name, instance.networks.itervalues().next()[0]))
# Retrieve IP of INSTANCE
# instance_ip = instance.networks.get(network_id)[0]
@@ -269,3 +267,26 @@ def wait_for_bgp_router_assocs(neutron_client, bgpvpn_id, *args):
for id in args]
# Return True if all associations succeeded
return all(check)
+
+
+def wait_before_subtest(*args, **kwargs):
+ ''' This is a placeholder.
+ TODO: Replace delay with polling logic. '''
+ time.sleep(30)
+
+
+def assert_and_get_compute_nodes(nova_client, required_node_number=2):
+ """Get the compute nodes in the deployment
+
+ Exit if the deployment doesn't have enough compute nodes"""
+ compute_nodes = os_utils.get_hypervisors(nova_client)
+
+ num_compute_nodes = len(compute_nodes)
+ if num_compute_nodes < 2:
+ logger.error("There are %s compute nodes in the deployment. "
+ "Minimum number of nodes to complete the test is 2."
+ % num_compute_nodes)
+ sys.exit(-1)
+
+ logger.debug("Compute nodes: %s" % compute_nodes)
+ return compute_nodes