aboutsummaryrefslogtreecommitdiffstats
path: root/sfc/tests/functest/sfc_parent_function.py
diff options
context:
space:
mode:
Diffstat (limited to 'sfc/tests/functest/sfc_parent_function.py')
-rw-r--r--sfc/tests/functest/sfc_parent_function.py297
1 files changed, 206 insertions, 91 deletions
diff --git a/sfc/tests/functest/sfc_parent_function.py b/sfc/tests/functest/sfc_parent_function.py
index 10c76968..410c0e71 100644
--- a/sfc/tests/functest/sfc_parent_function.py
+++ b/sfc/tests/functest/sfc_parent_function.py
@@ -47,18 +47,16 @@ class SfcCommonTestCase(object):
self.server_creator = None
self.client_instance = None
self.client_creator = None
- self.server_ip = None
self.vnf_id = None
self.client_floating_ip = None
self.server_floating_ip = None
self.fips_sfs = []
- self.neutron_port = None
self.vnf_objects = dict()
self.testcase_config = testcase_config
self.vnfs = vnfs
-
- # n-sfc variables
- self.port_groups = []
+ self.port_server = None
+ self.server_ip = None
+ self.port_client = None
self.prepare_env(testcase_config, supported_installers, vnfs)
@@ -72,37 +70,66 @@ class SfcCommonTestCase(object):
:return: Environment preparation
"""
- deployment_handler = DeploymentFactory.get_handler(
- COMMON_CONFIG.installer_type,
- COMMON_CONFIG.installer_ip,
- COMMON_CONFIG.installer_user,
- COMMON_CONFIG.installer_password,
- COMMON_CONFIG.installer_key_file)
+ if COMMON_CONFIG.installer_type != 'configByUser':
+ deployment_handler = DeploymentFactory.get_handler(
+ COMMON_CONFIG.installer_type,
+ COMMON_CONFIG.installer_ip,
+ COMMON_CONFIG.installer_user,
+ COMMON_CONFIG.installer_password,
+ COMMON_CONFIG.installer_key_file)
+
+ installer_type = os.environ.get("INSTALLER_TYPE")
+ installer_ip = os.environ.get("INSTALLER_IP")
+ cluster = COMMON_CONFIG.installer_cluster
+ openstack_nodes = (deployment_handler.
+ get_nodes({'cluster': cluster})
+ if cluster is not None
+ else deployment_handler.get_nodes())
+
+ self.compute_nodes = [node for node in openstack_nodes
+ if node.is_compute()]
+
+ for compute in self.compute_nodes:
+ logger.info("This is a compute: %s" % compute.ip)
+
+ controller_nodes = [node for node in openstack_nodes
+ if node.is_controller()]
+ self.controller_clients = test_utils. \
+ get_ssh_clients(controller_nodes)
+ self.compute_clients = test_utils. \
+ get_ssh_clients(self.compute_nodes)
+
+ self.odl_ip, self.odl_port = odl_utils. \
+ get_odl_ip_port(openstack_nodes)
+
+ else:
+ installer_type = 'configByUser'
+ installer_ip = COMMON_CONFIG.installer_ip
+ openstack_nodes = COMMON_CONFIG.nodes_pod
+ self.compute_nodes = [node for node in
+ COMMON_CONFIG.nodes_pod
+ if node['role'] == 'Compute']
+
+ for compute in self.compute_nodes:
+ logger.info("This is a compute: %s" % compute['ip'])
- installer_type = os.environ.get("INSTALLER_TYPE")
+ controller_nodes = [node for node in openstack_nodes
+ if node['role'] == 'Controller']
+
+ self.odl_ip, self.odl_port = odl_utils. \
+ get_odl_ip_port_no_installer(openstack_nodes)
if installer_type not in supported_installers:
- raise Exception(
- '\033[91mYour installer is not supported yet\033[0m')
+ if installer_type != 'configByUser':
+ raise Exception(
+ '\033[91mYour installer is not supported yet\033[0m')
- installer_ip = os.environ.get("INSTALLER_IP")
if not installer_ip:
logger.error(
'\033[91minstaller ip is not set\033[0m')
raise Exception(
'\033[91mexport INSTALLER_IP=<ip>\033[0m')
- cluster = COMMON_CONFIG.installer_cluster
- openstack_nodes = (deployment_handler.get_nodes({'cluster': cluster})
- if cluster is not None
- else deployment_handler.get_nodes())
-
- self.compute_nodes = [node for node in openstack_nodes
- if node.is_compute()]
-
- for compute in self.compute_nodes:
- logger.info("This is a compute: %s" % compute.ip)
-
results.add_to_summary(0, "=")
results.add_to_summary(2, "STATUS", "SUBTEST")
results.add_to_summary(0, "=")
@@ -115,12 +142,6 @@ class SfcCommonTestCase(object):
if not custom_flv:
raise Exception("Failed to create custom flavor")
- controller_nodes = [node for node in openstack_nodes
- if node.is_controller()]
-
- self.controller_clients = test_utils.get_ssh_clients(controller_nodes)
- self.compute_clients = test_utils.get_ssh_clients(self.compute_nodes)
-
if COMMON_CONFIG.mano_component == 'tacker':
self.tacker_client = os_sfc_utils.get_tacker_client()
os_sfc_utils.register_vim(self.tacker_client,
@@ -155,7 +176,7 @@ class SfcCommonTestCase(object):
self.creators = openstack_sfc.creators
- self.odl_ip, self.odl_port = odl_utils.get_odl_ip_port(openstack_nodes)
+ odl_utils.get_odl_username_password()
self.default_param_file = os.path.join(
COMMON_CONFIG.sfc_test_dir,
@@ -171,27 +192,39 @@ class SfcCommonTestCase(object):
logger.info('Topology description: {0}'
.format(self.test_topology['description']))
- self.server_instance, self.server_creator = \
+ self.server_instance, port_server = \
openstack_sfc.create_instance(SERVER, COMMON_CONFIG.flavor,
self.image_creator, self.network,
self.sg,
self.test_topology['server'],
[SERVER + '-port'])
- self.client_instance, self.client_creator = \
+ self.client_instance, port_client = \
openstack_sfc.create_instance(CLIENT, COMMON_CONFIG.flavor,
self.image_creator, self.network,
self.sg,
self.test_topology['client'],
[CLIENT + '-port'])
+
logger.info('This test is run with the topology {0}'.format(
self.test_topology['id']))
logger.info('Topology description: {0}'.format(
self.test_topology['description']))
- self.server_ip = self.server_instance.ports[0].ips[0]['ip_address']
- logger.info("Server instance received private ip [{}]".format(
- self.server_ip))
+ if COMMON_CONFIG.installer_type != 'configByUser':
+ self.port_server = port_server[0]
+ self.port_client = port_client[0]
+ port_fixed_ips = self.port_server
+ for ip in port_fixed_ips:
+ self.server_ip = ip.get('ip_address')
+ logger.info("Server instance received private ip [{}]".format(
+ self.server_ip))
+ else:
+ self.port_server = port_server
+ self.port_client = port_client
+ self.server_ip = self.server_instance.ports[0].ips[0]['ip_address']
+ logger.info("Server instance received private ip [{}]".format(
+ self.server_ip))
def register_vnf_template(self, test_case_name, template_name):
""" Register the template which defines the VNF
@@ -254,7 +287,7 @@ class SfcCommonTestCase(object):
ports = [vnf_name + '-port1', vnf_name + '-port2']
else:
ports = [vnf_name + '-port']
- vnf_instance, vnf_creator = \
+ vnf_instance, vnf_port = \
openstack_sfc.create_instance(vnf_name, COMMON_CONFIG.flavor,
self.vnf_image_creator,
self.network,
@@ -263,25 +296,22 @@ class SfcCommonTestCase(object):
ports,
port_security=False)
- if not openstack_sfc.wait_for_vnf(vnf_creator):
- raise Exception('ERROR while booting vnf %s' % vnf_name)
-
- self.creators.append(vnf_creator)
- self.vnf_objects[vnf_name] = [vnf_creator, vnf_instance]
+ self.vnf_objects[vnf_name] = [vnf_instance, vnf_port]
+ logger.info("Creating VNF with name...%s", vnf_name)
+ logger.info("Port associated with VNF...%s",
+ self.vnf_objects[vnf_name][1])
def assign_floating_ip_client_server(self):
"""Assign floating IPs on the router about server and the client
instances
-
:return: Floating IPs for client and server
"""
-
logger.info("Assigning floating IPs to client and server instances")
self.client_floating_ip = openstack_sfc.assign_floating_ip(
- self.router, self.client_instance, self.client_creator)
+ self.client_instance, self.port_client)
self.server_floating_ip = openstack_sfc.assign_floating_ip(
- self.router, self.server_instance, self.server_creator)
+ self.server_instance, self.port_server)
def assign_floating_ip_sfs(self):
"""Assign floating IPs to service function
@@ -299,11 +329,11 @@ class SfcCommonTestCase(object):
vnf_ip)
elif COMMON_CONFIG.mano_component == 'no-mano':
for vnf in self.vnfs:
- # creator object is in [0] and instance in [1]
- vnf_instance = self.vnf_objects[vnf][1]
- vnf_creator = self.vnf_objects[vnf][0]
- sf_floating_ip = openstack_sfc.assign_floating_ip(
- self.router, vnf_instance, vnf_creator)
+ # instance object is in [0] and port in [1]
+ vnf_instance = self.vnf_objects[vnf][0]
+ vnf_port = self.vnf_objects[vnf][1]
+ sf_floating_ip = openstack_sfc.\
+ assign_floating_ip(vnf_instance, vnf_port[0])
self.fips_sfs.append(sf_floating_ip)
def check_floating_ips(self):
@@ -404,16 +434,45 @@ class SfcCommonTestCase(object):
# TODO: If we had a testcase where only one chains must be removed
# we would need to add the logic. Now it removes all of them
openstack_sfc.delete_chain()
+ openstack_sfc.delete_port_groups()
+
+ def create_classifier(self, fc_name, port=85,
+ protocol='tcp', symmetric=False):
+ """Create the classifier component following the instructions from
+ relevant templates.
+
+ :param fc_name: The name of the classifier
+ :param port: Input port number
+ :param protocol: Input protocol
+ :param symmetric: Check symmetric
+ :return: Create the classifier component
+ """
+
+ logger.info("Creating the classifier...")
+
+ self.neutron_port = self.port_client
+ if COMMON_CONFIG.mano_component == 'no-mano':
+ openstack_sfc.create_classifier(self.neutron_port.id,
+ port,
+ protocol,
+ fc_name,
+ symmetric)
+
+ elif COMMON_CONFIG.mano_component == 'tacker':
+ logger.info("Creating classifier with tacker is not supported")
def create_vnffg(self, testcase_config_name, vnffgd_name, vnffg_name,
- port=80, protocol='tcp', symmetric=False,
- only_chain=False):
+ port=80, protocol='tcp', symmetric=False, vnf_index=-1):
"""Create the vnffg components following the instructions from
relevant templates.
:param testcase_config_name: The config input of the test case
:param vnffgd_name: The name of the vnffgd template
:param vnffg_name: The name for the vnffg
+ :param port: Input port number
+ :param protocol: Input protocol
+ :param symmetric: Check symmetric
+ :param vnf_index: Index to specify vnf
:return: Create the vnffg component
"""
@@ -428,14 +487,9 @@ class SfcCommonTestCase(object):
tosca_file=tosca_file,
vnffgd_name=vnffgd_name)
- self.neutron_port = \
- openstack_sfc.get_instance_port(self.client_instance,
- self.client_creator)
+ self.neutron_port = self.port_client
if symmetric:
- server_port = openstack_sfc.get_instance_port(
- self.server_instance,
- self.server_creator)
server_ip_prefix = self.server_ip + '/32'
os_sfc_utils.create_vnffg_with_param_file(
@@ -444,7 +498,7 @@ class SfcCommonTestCase(object):
vnffg_name,
self.default_param_file,
self.neutron_port.id,
- server_port=server_port.id,
+ server_port=self.port_server.id,
server_ip=server_ip_prefix)
else:
@@ -456,60 +510,121 @@ class SfcCommonTestCase(object):
self.neutron_port.id)
elif COMMON_CONFIG.mano_component == 'no-mano':
- if not only_chain:
+ logger.info("Creating the vnffg without any mano component...")
+ port_groups = []
+ if vnf_index == -1:
for vnf in self.vnfs:
- # creator object is in [0] and instance in [1]
- vnf_instance = self.vnf_objects[vnf][1]
- vnf_creator = self.vnf_objects[vnf][0]
+ # vnf_instance is in [0] and vnf_port in [1]
+ vnf_instance = self.vnf_objects[vnf][0]
+ vnf_port = self.vnf_objects[vnf][1]
if symmetric:
# VNFs have two ports
- p1 = vnf_instance.name + '-port1'
- neutron_port1 = \
- openstack_sfc.get_instance_port(vnf_instance,
- vnf_creator,
- port_name=p1)
- p2 = vnf_instance.name + '-port2'
- neutron_port2 = \
- openstack_sfc.get_instance_port(vnf_instance,
- vnf_creator,
- port_name=p2)
+ neutron_port1 = vnf_port[0]
+ neutron_port2 = vnf_port[1]
neutron_ports = [neutron_port1, neutron_port2]
-
else:
- neutron_port1 = \
- openstack_sfc.get_instance_port(vnf_instance,
- vnf_creator)
+ neutron_port1 = vnf_port[0]
neutron_ports = [neutron_port1]
port_group = \
openstack_sfc.create_port_groups(neutron_ports,
vnf_instance)
+ port_groups.append(port_group)
- self.port_groups.append(port_group)
- self.neutron_port = \
- openstack_sfc.get_instance_port(self.client_instance,
- self.client_creator)
+ else:
+ vnf = self.vnfs[vnf_index]
+ vnf_instance = self.vnf_objects[vnf][0]
+ vnf_port = self.vnf_objects[vnf][1]
+ if symmetric:
+ # VNFs have two ports
+ neutron_port1 = vnf_port[0]
+ neutron_port2 = vnf_port[1]
+ neutron_ports = [neutron_port1, neutron_port2]
+ else:
+ neutron_port1 = vnf_port[0]
+ neutron_ports = [neutron_port1]
+
+ port_group = openstack_sfc.create_port_groups(
+ neutron_ports, vnf_instance)
+ port_groups.append(port_group)
+
+ self.neutron_port = self.port_client
if symmetric:
# We must pass the server_port and server_ip in the symmetric
# case. Otherwise ODL does not work well
- server_port = openstack_sfc.get_instance_port(
- self.server_instance,
- self.server_creator)
server_ip_prefix = self.server_ip + '/32'
- openstack_sfc.create_chain(self.port_groups,
+ openstack_sfc.create_chain(port_groups,
self.neutron_port.id,
port, protocol, vnffg_name,
symmetric,
- server_port=server_port.id,
+ server_port=self.port_server.id,
server_ip=server_ip_prefix)
else:
- openstack_sfc.create_chain(self.port_groups,
+ openstack_sfc.create_chain(port_groups,
self.neutron_port.id,
port, protocol, vnffg_name,
symmetric)
+ def update_vnffg(self, testcase_config_name, vnffgd_name, vnffg_name,
+ port=80, protocol='tcp', symmetric=False,
+ vnf_index=0, fc_name='red'):
+ """Update the vnffg components following the instructions from
+ relevant templates.
+
+ :param testcase_config_name: The config input of the test case
+ :param vnffgd_name: The name of the vnffgd template
+ :param vnffg_name: The name for the vnffg
+ :param port: To input port number
+ :param protocol: To input protocol
+ :param symmetric: To check symmetric
+ :param vnf_index: Index to identify vnf
+ :param fc_name: The name of the flow classifier
+ :return: Update the vnffg component
+ """
+
+ logger.info("Update the vnffg...")
+
+ if COMMON_CONFIG.mano_component == 'no-mano':
+ port_groups = []
+ for vnf in self.vnfs:
+ # vnf_instance is in [0] and vnf_port in [1]
+ vnf_instance = self.vnf_objects[vnf][0]
+ vnf_port = self.vnf_objects[vnf][1]
+ if symmetric:
+ # VNFs have two ports
+ neutron_port1 = vnf_port[0]
+ neutron_port2 = vnf_port[1]
+ neutron_ports = [neutron_port1, neutron_port2]
+ else:
+ neutron_port1 = vnf_port[0]
+ neutron_ports = [neutron_port1]
+
+ port_group = \
+ openstack_sfc.create_port_groups(neutron_ports,
+ vnf_instance)
+ port_groups.append(port_group)
+
+ openstack_sfc.update_chain(vnffg_name, fc_name, symmetric)
+
+ elif COMMON_CONFIG.mano_component == 'tacker':
+ logger.info("update for tacker is not supported")
+
+ def swap_classifiers(self, vnffg_1_name, vnffg_2_name, symmetric=False):
+ """Interchange classifiers between port chains
+
+ :param vnffg_1_name: Reference to port_chain_1
+ :param vnffg_2_name: Reference to port_chain_2
+ :param symmetric: To check symmetric
+ :return: Interchange the classifiers
+ """
+
+ if COMMON_CONFIG.mano_component == 'no-mano':
+ openstack_sfc.swap_classifiers(vnffg_1_name,
+ vnffg_2_name,
+ symmetric=False)
+
def present_results_http(self):
"""Check whether the connection between server and client using
HTTP protocol is blocked or not.
@@ -589,7 +704,7 @@ class SfcCommonTestCase(object):
check_vnffg_deletion(self.odl_ip, self.odl_port,
self.ovs_logger,
[self.neutron_port],
- self.client_instance.compute_host,
+ self.client_instance.hypervisor_hostname,
self.compute_nodes):
logger.debug("The chains were not correctly removed")
raise Exception("Chains not correctly removed, test failed")