Fix network assoc tests in Boron 27/23927/1 stable/colorado colorado.2.0
authorRomanos Skiadas <rski@intracom-telecom.com>
Tue, 18 Oct 2016 13:34:24 +0000 (16:34 +0300)
committerJose Lausuch <jose.lausuch@ericsson.com>
Thu, 3 Nov 2016 10:38:56 +0000 (10:38 +0000)
Network assoc in Boron with netvirt does not work for subnets that have
a router due to an inherent limitation in the implementation. See the
mailing list and related bug:
https://bugs.opendaylight.org/show_bug.cgi?id=6962
https://lists.opendaylight.org/pipermail/netvirt-dev/2016-October/001815.html
Also, if a subnet does not have a route distinguisher, it is not added
to the FIB, so association does not make traffic move between subnets.
This is intentional and an error is logged when a subnet is associated
to a bvpvpn without a route distinguisher.

This commit fixes the net assoc case and works around these issues by:
- Removing the routers from the subnets in testcase_1
- Adding a route distinguisher to the bgpvpn

JIRA: SDNVPN-74
Change-Id: I6b57eab89839d9e9122cd24b0f05737467439dd9
Signed-off-by: Romanos Skiadas <rski@intracom-telecom.com>
(cherry picked from commit b9eb7024b014cba0d299b1cf3b01e179c7d0482e)

test/functest/config.yaml
test/functest/testcase_1.py
test/functest/utils.py

index 93f3552..076989a 100644 (file)
@@ -31,6 +31,7 @@ testcases:
       sdnvpn_sg_descr: Security group for SDNVPN test cases
       targets1: '88:88'
       targets2: '55:55'
+      route_distinguishers: '11:11'
 
   testcase_2:
       enabled: true
index 1356518..fe4298b 100644 (file)
@@ -50,6 +50,9 @@ FLAVOR = ft_utils.get_parameter_from_yaml(
     "testcases.testcase_1.flavor", 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(
@@ -188,16 +191,21 @@ def main():
                                             disk=IMAGE_FORMAT,
                                             container="bare",
                                             public=True)
-    network_1_id, _, _ = test_utils.create_network(neutron_client,
-                                                   NET_1_NAME,
-                                                   SUBNET_1_NAME,
-                                                   SUBNET_1_CIDR,
-                                                   ROUTER_1_NAME)
-    network_2_id, _, _ = test_utils.create_network(neutron_client,
-                                                   NET_2_NAME,
-                                                   SUBNET_2_NAME,
-                                                   SUBNET_2_CIDR,
-                                                   ROUTER_2_NAME)
+    network_1_id = test_utils.create_net(neutron_client,
+                                         NET_1_NAME)
+    test_utils.create_subnet(neutron_client,
+                             SUBNET_1_NAME,
+                             SUBNET_1_CIDR,
+                             network_1_id)
+
+    network_2_id = test_utils.create_net(neutron_client,
+                                         NET_2_NAME)
+
+    test_utils.create_subnet(neutron_client,
+                             SUBNET_2_NAME,
+                             SUBNET_2_CIDR,
+                             network_2_id)
+
     sg_id = os_utils.create_security_group_full(neutron_client,
                                                 SECGROUP_NAME, SECGROUP_DESCR)
 
@@ -289,6 +297,7 @@ def main():
     vpn_name = "sdnvpn-" + str(randint(100000, 999999))
     kwargs = {"import_targets": TARGETS_1,
               "export_targets": TARGETS_2,
+              "route_distinguishers": ROUTE_DISTINGUISHERS,
               "name": vpn_name}
     bgpvpn = os_utils.create_bgpvpn(neutron_client, **kwargs)
     bgpvpn_id = bgpvpn['bgpvpn']['id']
index 4d921c8..97f58c7 100644 (file)
@@ -16,8 +16,36 @@ import functest.utils.openstack_utils as os_utils
 logger = ft_logger.Logger("sndvpn_test_utils").getLogger()
 
 
+def create_net(neutron_client, name):
+    logger.debug("Creating network %s", name)
+    net_id = os_utils.create_neutron_net(neutron_client, name)
+    if not net_id:
+        logger.error(
+            "There has been a problem when creating the neutron network")
+        sys.exit(-1)
+    return net_id
+
+
+def create_subnet(neutron_client, name, cidr, net_id):
+    logger.debug("Creating subnet %s in network %s with cidr %s",
+                 name, net_id, cidr)
+    subnet_id = os_utils.create_neutron_subnet(neutron_client,
+                                               name,
+                                               cidr,
+                                               net_id)
+    if not subnet_id:
+        logger.error(
+            "There has been a problem when creating the neutron subnet")
+        sys.exit(-1)
+    return subnet_id
+
+
 def create_network(neutron_client, net, subnet1, cidr1,
                    router, subnet2=None, cidr2=None):
+    """Network assoc will not work for networks/subnets created by this function.
+
+    It is an ODL limitation due to it handling routers as vpns.
+    See https://bugs.opendaylight.org/show_bug.cgi?id=6962"""
     network_dic = os_utils.create_network_full(neutron_client,
                                                net,
                                                subnet1,