tests: fix test_gbp.py. 56/20156/15
authorPaul Vinciguerra <pvinci@vinciconsulting.com>
Sun, 16 Jun 2019 00:31:31 +0000 (20:31 -0400)
committerNeale Ranns <nranns@cisco.com>
Tue, 25 Jun 2019 12:37:13 +0000 (12:37 +0000)
A number of VppGbpContractRules were missing the hash_mode_t
and were being replaced by an optional kwarg.

Type: fix

Change-Id: I6ca03c93b69e4355c237a6c9402e1e178b701b21
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
test/test_gbp.py
test/test_vxlan_gbp.py
test/vpp_papi_provider.py
test/vpp_vxlan_gbp_tunnel.py

index 0580fff..cc26238 100644 (file)
@@ -413,10 +413,10 @@ class VppGbpContractNextHop():
 
 
 class VppGbpContractRule():
-    def __init__(self, action, hash_mode, nhs=[]):
+    def __init__(self, action, hash_mode, nhs=None):
         self.action = action
         self.hash_mode = hash_mode
-        self.nhs = nhs
+        self.nhs = [] if nhs is None else nhs
 
     def encode(self):
         nhs = []
@@ -430,6 +430,10 @@ class VppGbpContractRule():
                     'n_nhs': len(self.nhs),
                     'nhs': nhs}}
 
+    def __repr__(self):
+        return '<VppGbpContractRule action=%s, hash_mode=%s>' % (
+            self.action, self.hash_mode)
+
 
 class VppGbpContract(VppObject):
     """
@@ -439,6 +443,10 @@ class VppGbpContract(VppObject):
     def __init__(self, test, sclass, dclass, acl_index,
                  rules, allowed_ethertypes):
         self._test = test
+        if not isinstance(rules, list):
+            raise ValueError("'rules' must be a list.")
+        if not isinstance(allowed_ethertypes, list):
+            raise ValueError("'allowed_ethertypes' must be a list.")
         self.acl_index = acl_index
         self.sclass = sclass
         self.dclass = dclass
@@ -452,23 +460,30 @@ class VppGbpContract(VppObject):
         for r in self.rules:
             rules.append(r.encode())
         r = self._test.vapi.gbp_contract_add_del(
-            1,
-            self.sclass,
-            self.dclass,
-            self.acl_index,
-            rules,
-            self.allowed_ethertypes)
+            is_add=1,
+            contract={
+                'acl_index': self.acl_index,
+                'sclass': self.sclass,
+                'dclass': self.dclass,
+                'n_rules': len(rules),
+                'rules': rules,
+                'n_ether_types': len(self.allowed_ethertypes),
+                'allowed_ethertypes': self.allowed_ethertypes})
         self.stats_index = r.stats_index
         self._test.registry.register(self, self._test.logger)
 
     def remove_vpp_config(self):
         self._test.vapi.gbp_contract_add_del(
-            0,
-            self.sclass,
-            self.dclass,
-            self.acl_index,
-            [],
-            self.allowed_ethertypes)
+            is_add=0,
+            contract={
+                'acl_index': self.acl_index,
+                'sclass': self.sclass,
+                'dclass': self.dclass,
+                'n_rules': 0,
+                'rules': [],
+                'n_ether_types': len(self.allowed_ethertypes),
+                'allowed_ethertypes': self.allowed_ethertypes}
+        )
 
     def object_id(self):
         return "gbp-contract:[%d:%s:%d]" % (self.sclass,
@@ -556,7 +571,7 @@ class VppGbpAcl(VppObject):
 
     def add_vpp_config(self, rules):
 
-        reply = self._test.vapi.acl_add_replace(self.acl_index,
+        reply = self._test.vapi.acl_add_replace(acl_index=self.acl_index,
                                                 r=rules,
                                                 tag=b'GBPTest')
         self.acl_index = reply.acl_index
@@ -1171,9 +1186,11 @@ class TestGBP(VppTestCase):
             self, epgs[0].sclass, epgs[1].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c1.add_vpp_config()
@@ -1191,9 +1208,11 @@ class TestGBP(VppTestCase):
             self, epgs[1].sclass, epgs[0].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c2.add_vpp_config()
@@ -1233,9 +1252,11 @@ class TestGBP(VppTestCase):
             self, epgs[0].sclass, epgs[2].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c3.add_vpp_config()
@@ -1338,9 +1359,11 @@ class TestGBP(VppTestCase):
             self, epgs[0].sclass, epgs[3].sclass, acl_index2,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c4.add_vpp_config()
@@ -1379,9 +1402,11 @@ class TestGBP(VppTestCase):
             self, epgs[3].sclass, epgs[0].sclass, acl_index2,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c5.add_vpp_config()
@@ -1896,9 +1921,11 @@ class TestGBP(VppTestCase):
             self, epg_220.sclass, epg_330.sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c1.add_vpp_config()
@@ -2117,9 +2144,11 @@ class TestGBP(VppTestCase):
             self, epgs[0].sclass, epgs[1].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
              VppGbpContractRule(
                  VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                  [])],
             [ETH_P_IP, ETH_P_IPV6])
         c1.add_vpp_config()
@@ -2144,9 +2173,11 @@ class TestGBP(VppTestCase):
             self, epgs[1].sclass, epgs[0].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
              VppGbpContractRule(
                  VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                  [])],
             [ETH_P_IP, ETH_P_IPV6])
         c2.add_vpp_config()
@@ -2171,9 +2202,11 @@ class TestGBP(VppTestCase):
             self, epgs[0].sclass, epgs[2].sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
              VppGbpContractRule(
                  VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                 VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                  [])],
             [ETH_P_IP, ETH_P_IPV6])
         c3.add_vpp_config()
@@ -3333,9 +3366,11 @@ class TestGBP(VppTestCase):
             self, epg_221.sclass, epg_220.sclass, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c4.add_vpp_config()
@@ -3749,9 +3784,11 @@ class TestGBP(VppTestCase):
             self, 4220, 4221, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c1.add_vpp_config()
@@ -3763,9 +3800,11 @@ class TestGBP(VppTestCase):
             self, 4220, 113, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c2.add_vpp_config()
@@ -3773,9 +3812,11 @@ class TestGBP(VppTestCase):
             self, 113, 4220, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c3.add_vpp_config()
@@ -3905,9 +3946,11 @@ class TestGBP(VppTestCase):
             self, 4220, 4222, acl_index,
             [VppGbpContractRule(
                 VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                 []),
                 VppGbpContractRule(
                     VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT,
+                    VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP,
                     [])],
             [ETH_P_IP, ETH_P_IPV6])
         c4.add_vpp_config()
index 9abff19..bd70eef 100644 (file)
@@ -103,9 +103,16 @@ class TestVxlanGbp(VppTestCase):
                              register=False)
             rip.add_vpp_config()
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
-                cls.pg0.local_ip4,
-                dest_ip4,
-                vni=vni)
+                tunnel={
+                    'src': VppIpAddress(cls.pg0.local_ip4).encode(),
+                    'dst': VppIpAddress(dest_ip4).encode(),
+                    'vni': vni,
+                    'instance': INVALID_INDEX,
+                    'mcast_sw_if_index': INVALID_INDEX,
+                    'mode': 1,
+                },
+                is_add=1
+            )
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=vni)
 
@@ -139,13 +146,21 @@ class TestVxlanGbp(VppTestCase):
             # pg1 into BD.
             cls.single_tunnel_bd = 1
             r = cls.vapi.vxlan_gbp_tunnel_add_del(
-                VppIpAddress(cls.pg0.local_ip4).encode(),
-                VppIpAddress(cls.pg0.remote_ip4).encode(),
-                vni=cls.single_tunnel_bd)
+                tunnel={
+                    'src': VppIpAddress(cls.pg0.local_ip4).encode(),
+                    'dst': VppIpAddress(cls.pg0.remote_ip4).encode(),
+                    'vni': cls.single_tunnel_bd,
+                    'instance': INVALID_INDEX,
+                    'mcast_sw_if_index': INVALID_INDEX,
+                    'mode': 1,
+                },
+                is_add=1
+            )
             cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index,
                                                 bd_id=cls.single_tunnel_bd)
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg1.sw_if_index, bd_id=cls.single_tunnel_bd)
+                rx_sw_if_index=cls.pg1.sw_if_index,
+                bd_id=cls.single_tunnel_bd)
 
             # Setup vni 2 to test multicast flooding
             cls.n_ucast_tunnels = 2
@@ -154,7 +169,8 @@ class TestVxlanGbp(VppTestCase):
             cls.create_vxlan_gbp_flood_test_bd(cls.ucast_flood_bd,
                                                cls.n_ucast_tunnels)
             cls.vapi.sw_interface_set_l2_bridge(
-                rx_sw_if_index=cls.pg3.sw_if_index, bd_id=cls.ucast_flood_bd)
+                rx_sw_if_index=cls.pg3.sw_if_index,
+                bd_id=cls.ucast_flood_bd)
         except Exception:
             super(TestVxlanGbp, cls).tearDownClass()
             raise
index 75ec57f..29a5716 100644 (file)
@@ -131,8 +131,6 @@ defaultmapping = {
     'vxlan_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
                              'decap_next_index': 4294967295,
                              'instance': 4294967295, },
-    'vxlan_gbp_tunnel_add_del': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
-                                 'instance': 4294967295, },
     'vxlan_gbp_tunnel_dump': {'sw_if_index': 4294967295, },
     'vxlan_gpe_add_del_tunnel': {'mcast_sw_if_index': 4294967295, 'is_add': 1,
                                  'protocol': 3, },
@@ -331,7 +329,7 @@ class VppPapiProvider(object):
             if hasattr(reply, 'retval') and reply.retval != expected_retval:
                 msg = "API call failed, expected %d return value instead " \
                       "of %d in %s" % (expected_retval, reply.retval,
-                                       moves.reprlib.repr(reply))
+                                       repr(reply))
                 self.test_class.logger.info(msg)
                 raise UnexpectedApiReturnValueError(msg)
         else:
@@ -1276,41 +1274,6 @@ class VppPapiProvider(object):
                          'protocol': protocol,
                          'vni': vni})
 
-    def vxlan_gbp_tunnel_add_del(
-            self,
-            src,
-            dst,
-            mcast_sw_if_index=0xFFFFFFFF,
-            is_add=1,
-            is_ipv6=0,
-            encap_table_id=0,
-            vni=0,
-            mode=1,
-            instance=0xFFFFFFFF):
-        """
-
-        :param dst_addr:
-        :param src_addr:
-        :param is_add:  (Default value = 1)
-        :param is_ipv6:  (Default value = 0)
-        :param encap_table_id:  (Default value = 0)
-        :param decap_next_index:  (Default value = 0xFFFFFFFF)
-        :param mcast_sw_if_index:  (Default value = 0xFFFFFFFF)
-        :param vni:  (Default value = 0)
-        :param instance:  (Default value = 0xFFFFFFFF)
-
-        """
-        return self.api(self.papi.vxlan_gbp_tunnel_add_del,
-                        {'is_add': is_add,
-                         'tunnel': {
-                             'src': src,
-                             'dst': dst,
-                             'mcast_sw_if_index': mcast_sw_if_index,
-                             'encap_table_id': encap_table_id,
-                             'vni': vni,
-                             'instance': instance,
-                             "mode": mode}})
-
     def vxlan_gbp_tunnel_dump(self, sw_if_index=0xffffffff):
         return self.api(self.papi.vxlan_gbp_tunnel_dump,
                         {'sw_if_index': sw_if_index,
@@ -2135,20 +2098,6 @@ class VppPapiProvider(object):
         return self.api(self.papi.gbp_subnet_dump,
                         {'_no_type_conversion': True})
 
-    def gbp_contract_add_del(self, is_add, sclass, dclass, acl_index,
-                             rules, allowed_ethertypes):
-        """ GBP contract Add/Del """
-        return self.api(self.papi.gbp_contract_add_del,
-                        {'is_add': is_add,
-                         'contract': {
-                             'acl_index': acl_index,
-                             'sclass': sclass,
-                             'dclass': dclass,
-                             'n_rules': len(rules),
-                             'rules': rules,
-                             'n_ether_types': len(allowed_ethertypes),
-                             'allowed_ethertypes': allowed_ethertypes}})
-
     def gbp_contract_dump(self):
         """ GBP contract Dump """
         return self.api(self.papi.gbp_contract_dump, {})
index 47817ed..5352d6e 100644 (file)
@@ -25,13 +25,17 @@ class VppVxlanGbpTunnel(VppInterface):
     VPP VXLAN GBP interface
     """
 
-    def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None):
+    def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None,
+                 is_ipv6=None, encap_table_id=None, instance=0xffffffff):
         """ Create VXLAN-GBP Tunnel interface """
         super(VppVxlanGbpTunnel, self).__init__(test)
         self.src = VppIpAddress(src)
         self.dst = VppIpAddress(dst)
         self.vni = vni
         self.mcast_itf = mcast_itf
+        self.ipv6 = is_ipv6
+        self.encap_table_id = encap_table_id
+        self.instance = instance
         if not mode:
             self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t.
                          VXLAN_GBP_API_TUNNEL_MODE_L2)
@@ -43,11 +47,16 @@ class VppVxlanGbpTunnel(VppInterface):
         if (self.mcast_itf):
             mcast_sw_if_index = self.mcast_itf.sw_if_index
         reply = self.test.vapi.vxlan_gbp_tunnel_add_del(
-            self.src.encode(),
-            self.dst.encode(),
-            mode=self.mode,
-            vni=self.vni,
-            mcast_sw_if_index=mcast_sw_if_index)
+            is_add=1,
+            tunnel={
+                'src': self.src.encode(),
+                'dst': self.dst.encode(),
+                'mode': self.mode,
+                'vni': self.vni,
+                'mcast_sw_if_index': mcast_sw_if_index,
+                'encap_table_id': self.encap_table_id,
+                'instance': self.instance
+            })
         self.set_sw_if_index(reply.sw_if_index)
         self._test.registry.register(self, self._test.logger)
 
@@ -56,11 +65,16 @@ class VppVxlanGbpTunnel(VppInterface):
         if (self.mcast_itf):
             mcast_sw_if_index = self.mcast_itf.sw_if_index
         self.test.vapi.vxlan_gbp_tunnel_add_del(
-            self.src.encode(),
-            self.dst.encode(),
-            vni=self.vni,
             is_add=0,
-            mcast_sw_if_index=mcast_sw_if_index)
+            tunnel={
+                'src': self.src.encode(),
+                'dst': self.dst.encode(),
+                'mode': self.mode,
+                'vni': self.vni,
+                'mcast_sw_if_index': mcast_sw_if_index,
+                'encap_table_id': self.encap_table_id,
+                'instance': self.instance,
+            })
 
     def query_vpp_config(self):
         return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test,