HC Test: address and cleanup test failures 88/5888/5
authorselias <samelias@cisco.com>
Fri, 24 Mar 2017 16:35:30 +0000 (17:35 +0100)
committerselias <samelias@cisco.com>
Thu, 30 Mar 2017 11:17:35 +0000 (13:17 +0200)
Change-Id: If3c570dbc5036915fdc68ade7a9ccc45ad21299e
Signed-off-by: selias <samelias@cisco.com>
15 files changed:
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/honeycomb/HcAPIKwACL.py
resources/libraries/python/honeycomb/HcAPIKwInterfaces.py
resources/libraries/robot/honeycomb/access_control_lists.robot
resources/libraries/robot/honeycomb/lisp.robot
resources/test_data/honeycomb/netconf/triggers.py
resources/test_data/honeycomb/persistence.py
resources/test_data/honeycomb/plugin_acl.py
resources/tools/download_hc_build_pkgs.sh
tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot
tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot
tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot
tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot
tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot
tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot

index 558e99b..793f908 100644 (file)
@@ -260,7 +260,9 @@ class InterfaceUtil(object):
          Note: A single interface may have multiple IP addresses assigned.
          :rtype: list
         """
-        sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+
+        sw_if_index = Topology.convert_interface_reference(
+            node, interface, "sw_if_index")
 
         with VatTerminal(node) as vat:
             response = vat.vat_terminal_exec_cmd_from_template(
index 565ed48..556c396 100644 (file)
@@ -47,7 +47,7 @@ class ACLKeywords(object):
         :type node: dict
         :type path: str
         :type data: dict
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the status code in response to PUT is not
         200 = OK.
@@ -79,7 +79,7 @@ class ACLKeywords(object):
         :param table: Classify table to be added.
         :type node: dict
         :type table: dict
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         """
 
@@ -93,7 +93,7 @@ class ACLKeywords(object):
 
         :param node: Honeycomb node.
         :type node: dict
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         """
 
@@ -107,7 +107,7 @@ class ACLKeywords(object):
         :param table_name: Name of the classify table to be removed.
         :type node: dict
         :type table_name: str
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         """
 
@@ -120,7 +120,7 @@ class ACLKeywords(object):
 
         :param node: Honeycomb node.
         :type node: dict
-        :return: List of classify tables.
+        :returns: List of classify tables.
         :rtype: list
         """
 
@@ -131,10 +131,8 @@ class ACLKeywords(object):
             raise HoneycombError(
                 "Not possible to get operational information about the "
                 "classify tables. Status code: {0}.".format(status_code))
-        try:
-            return resp["vpp-classifier"]["classify-table"]
-        except (KeyError, TypeError):
-            return []
+
+        return resp["vpp-classifier-state"]["classify-table"]
 
     @staticmethod
     def get_classify_table_oper_data(node, table_name):
@@ -144,22 +142,16 @@ class ACLKeywords(object):
         :param table_name: Name of the classify table.
         :type node: dict
         :type table_name: str
-        :return: Operational data about the given classify table.
+        :returns: Operational data about the given classify table.
         :rtype: dict
         """
 
-        path = "/classify-table/" + table_name
-        status_code, resp = HcUtil.\
-            get_honeycomb_data(node, "oper_classify_table", path)
-
-        if status_code != HTTPCodes.OK:
-            raise HoneycombError(
-                "Not possible to get operational information about the "
-                "classify tables. Status code: {0}.".format(status_code))
-        try:
-            return resp["classify-table"][0]
-        except (KeyError, TypeError):
-            return []
+        tables = ACLKeywords.get_all_classify_tables_oper_data(node)
+        for table in tables:
+            if table["name"] == table_name:
+                return table
+        raise HoneycombError("Table {0} not found in ACL table list.".format(
+            table_name))
 
     @staticmethod
     def get_all_classify_tables_cfg_data(node):
@@ -167,7 +159,7 @@ class ACLKeywords(object):
 
         :param node: Honeycomb node.
         :type node: dict
-        :return: List of classify tables.
+        :returns: List of classify tables.
         :rtype: list
         """
 
@@ -193,7 +185,7 @@ class ACLKeywords(object):
         :type node: dict
         :type table_name: str
         :type session: dict
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         """
 
@@ -212,7 +204,7 @@ class ACLKeywords(object):
         :type node: dict
         :type table_name: str
         :type session_match: str
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         """
 
@@ -229,15 +221,13 @@ class ACLKeywords(object):
         :param table_name: Name of the classify table.
         :type node: dict
         :type table_name: str
-        :return: List of classify sessions present in the classify table.
+        :returns: List of classify sessions present in the classify table.
         :rtype: list
         """
 
         table_data = ACLKeywords.get_classify_table_oper_data(node, table_name)
-        try:
-            return table_data["classify-table"][0]["classify-session"]
-        except (KeyError, TypeError):
-            return []
+
+        return table_data["classify-session"]
 
     @staticmethod
     def get_classify_session_oper_data(node, table_name, session_match):
@@ -250,23 +240,19 @@ class ACLKeywords(object):
         :type node: dict
         :type table_name: str
         :type session_match: str
-        :return: Classify session operational data.
+        :returns: Classify session operational data.
         :rtype: dict
+        :raises HoneycombError: If no session the specified match Id is found.
         """
 
-        path = "/classify-table/" + table_name + \
-               "/classify-session/" + session_match
-        status_code, resp = HcUtil.\
-            get_honeycomb_data(node, "oper_classify_table", path)
-
-        if status_code != HTTPCodes.OK:
-            raise HoneycombError(
-                "Not possible to get operational information about the "
-                "classify tables. Status code: {0}.".format(status_code))
-        try:
-            return resp["classify-session"][0]
-        except (KeyError, TypeError):
-            return {}
+        sessions = ACLKeywords.get_all_classify_sessions_oper_data(
+            node, table_name)
+        for session in sessions:
+            if session["match"] == session_match:
+                return session
+        raise HoneycombError(
+            "Session with match value \"{0}\" not found"
+            " under ACL table {1}.".format(session_match, table_name))
 
     @staticmethod
     def create_acl_plugin_classify_chain(node, list_name, data, macip=False):
@@ -281,7 +267,7 @@ class ACLKeywords(object):
         :type data: dict
         :type macip: bool
 
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the operation fails.
         """
@@ -318,8 +304,9 @@ class ACLKeywords(object):
         :type direction: str
         :type macip: bool
 
-        :return: Content of response.
+        :returns: Content of response.
         :rtype: bytearray
+        :raises ValueError: If the direction argument is incorrect.
         :raises HoneycombError: If the operation fails.
         """
 
index b4746e2..f317d06 100644 (file)
@@ -201,6 +201,16 @@ class InterfaceKeywords(object):
         :rtype: dict
         """
 
+        try:
+            interface = Topology.convert_interface_reference(
+                node, interface, "name")
+        except RuntimeError:
+            if isinstance(interface, basestring):
+                # Probably name of a custom interface (TAP, VxLAN, Vhost, ...)
+                pass
+            else:
+                raise
+
         intfs = InterfaceKeywords.get_all_interfaces_oper_data(node)
         for intf in intfs:
             if intf["name"] == interface:
@@ -653,6 +663,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6",
                 "address")
         address = [{"ip": ip_addr, "prefix-length": prefix_len}, ]
index a62ea0f..e35cc92 100644 (file)
 | | ... | \| ACL session from Honeycomb should not exist \| ${nodes['DUT1']} \
 | | ... | \| table0 \| 00:00:00:00:00:00:01:02:03:04:05:06:00:00:00:00 \|
 | | [Arguments] | ${node} | ${table_name} | ${session_match}
-| | Run keyword and expect error | *HoneycombError: *Status code: 404.
+| | Run keyword and expect error | *KeyError:*
 | | ... | Get classify session oper data
 | | ... | ${node} | ${table_name} | ${session_match}
 
index f490769..e1d69ed 100644 (file)
 | | ... | \| Lisp should not be configured \| ${nodes['DUT1']} \|
 | | [Arguments] | ${node}
 | | ...
-| | ${data}= | Get Lisp operational data | ${node}
-| | Should be equal as strings | ${data['lisp-state']['enable']} | False
-| | ${data}= | Set Variable | ${data['lisp-state']['lisp-feature-data']}
-| | Should match | ${data['pitr-cfg']['locator-set']} | N/A
-| | Variable should not exist | ${data['eid-table']['vni-table'][0]}
+| | Run keyword and Expect Error | KeyError: 'lisp-feature-data'
+| | ... | Get Lisp operational data | ${node}
 
 | Lisp state From Honeycomb Should Be
 | | [Documentation] | Retrieves Lisp state from Honeycomb operational\
index 51a6ab6..5d47853 100644 (file)
@@ -285,10 +285,9 @@ a:operation="replace">
 </target>
 <default-operation>none</default-operation>
 <config>
-<vpp xmlns="urn:opendaylight:params:xml:ns:yang:v3po">
-<bridge-domains>
-<bridge-domain xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"
-a:operation="replace">
+<bridge-domains xmlns="urn:opendaylight:params:xml:ns:yang:v3po"
+xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0" a:operation="replace">
+<bridge-domain>
 <name>e86740a2-042c-4e64-a43b-cc224e0d5240</name>
 <unknown-unicast-flood>true</unknown-unicast-flood>
 <forward>true</forward>
@@ -297,7 +296,6 @@ a:operation="replace">
 <arp-termination>false</arp-termination>
 </bridge-domain>
 </bridge-domains>
-</vpp>
 </config>
 </edit-config>
 </rpc>
index 216d4fa..131a3ef 100644 (file)
@@ -102,7 +102,7 @@ def get_variables(interface):
             },
             "match": {
                 "vlan-tagged": {
-                    "match-exact-tags": False
+                    "match-exact-tags": True
                 }
             }
         },
@@ -123,7 +123,7 @@ def get_variables(interface):
         'tag_rewrite_pop_1_VAT': {
             'sub_default': 0,
             'sub_dot1ad': 0,
-            'sub_exact_match': 0,
+            'sub_exact_match': 1,
             'sub_inner_vlan_id': 0,
             'sub_inner_vlan_id_any': 1,
             'sub_number_of_tags': 2,
index d9d2ecd..6bd673d 100644 (file)
@@ -34,6 +34,7 @@ def get_variables(test_case, name):
         # Variables for control packet
         "src_ip": "16.0.0.1",
         "dst_ip": "16.0.1.1",
+        "src_net": "16.0.0.0",
         "dst_net": "16.0.1.0",
         "src_port": "1234",
         "dst_port": "1234",
index c83bada..9bcaefb 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2017 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -22,7 +22,7 @@ OS=$2
 
 # Download the latest VPP and VPP plugin .deb packages
 URL="https://nexus.fd.io/service/local/artifact/maven/content"
-VER="LATEST"
+VER="RELEASE"
 VPP_GROUP="io.fd.vpp"
 NSH_GROUP="io.fd.nsh_sfc"
 VPP_ARTIFACTS="vpp vpp-dbg vpp-dev vpp-dpdk-dev vpp-dpdk-dkms vpp-lib vpp-plugins vpp-api-java"
index b50a48f..4dad038 100644 (file)
 | Resource | resources/libraries/robot/honeycomb/honeycomb.robot
 | Resource | resources/libraries/robot/honeycomb/access_control_lists.robot
 | Variables | resources/test_data/honeycomb/acl.py
-| Suite Teardown | Run keywords
-| ... | Run Keyword If Any Tests Failed
-| ... | Restart Honeycomb and VPP | ${node}
-| ... | AND | Clear all ACL settings | ${node}
+| Suite Teardown | Restart Honeycomb and VPP | ${node}
 | Documentation | *Honeycomb access control lists test suite.*
 | Force Tags | honeycomb_sanity | honeycomb_odl
 
index fc5069f..1a8d400 100644 (file)
@@ -40,7 +40,6 @@
 | Resource | resources/libraries/robot/testing_path.robot
 | Resource | resources/libraries/robot/ipv6.robot
 | Force Tags | honeycomb_sanity | honeycomb_odl
-| Suite Setup | Vpp nodes ra suppress link layer | ${nodes}
 | Suite Teardown
 | | ... | Restart Honeycomb and VPP | ${node}
 | Documentation | *Honeycomb interface management test suite.*
 | | ... | [Ver] Send ICMP packets from TG to DUT, using different sets\
 | | ... | of source and destination IP addresses. Receive an ICMP reply\
 | | ... | for every packet sent.
+| | ...
+| | Given Path for 2-node testing is set
+| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | When Honeycomb sets interface ipv4 address with prefix
-| | ... | ${node} | ${interface} | @{ipv4_address}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv4_address}
 | | And Honeycomb adds interface ipv4 address
-| | ... | ${node} | ${interface} | @{ipv4_address2}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv4_address2}
 | | And Honeycomb sets interface ipv6 address
-| | ... | ${node} | ${interface} | @{ipv6_address}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv6_address}
 | | And Honeycomb adds interface ipv6 address
-| | ... | ${node} | ${interface} | @{ipv6_address2}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv6_address2}
 | | Then IPv4 address from Honeycomb should be
-| | ... | ${node} | ${interface} | @{ipv4_address}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv4_address}
 | | And IPv4 address from VAT should be
-| | ... | ${node} | ${interface} | @{ipv4_address} | ${ipv4_mask}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv4_address} | ${ipv4_mask}
 | | And IPv6 address from Honeycomb should contain
-| | ... | ${node} | ${interface} | @{ipv6_address}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv6_address}
 | | And IPv6 address from VAT should contain
-| | ... | ${node} | ${interface} | @{ipv6_address}
-| | When Path for 2-node testing is set
-| | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
-| | And Honeycomb sets interface state | ${dut_node} | ${interface} | up
-| | And Honeycomb adds interface ipv4 neighbor | ${dut_node} | ${interface}
+| | ... | ${dut_node} | ${dut_to_tg_if1} | @{ipv6_address}
+| | And Honeycomb sets interface state | ${dut_node} | ${dut_to_tg_if1} | up
+| | And Honeycomb adds interface ipv4 neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | @{ipv4_neighbor}
-| | And Honeycomb adds interface ipv4 neighbor | ${dut_node} | ${interface}
+| | And Honeycomb adds interface ipv4 neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | @{ipv4_neighbor2}
-| | And Honeycomb adds interface ipv6 neighbor | ${dut_node} | ${interface}
+| | And Honeycomb adds interface ipv6 neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | @{ipv6_neighbor}
-| | And Honeycomb adds interface ipv6 neighbor | ${dut_node} | ${interface}
+| | And Honeycomb adds interface ipv6 neighbor | ${dut_node} | ${dut_to_tg_if1}
 | | ... | @{ipv6_neighbor2}
+| | And Vpp nodes ra suppress link layer | ${nodes}
 | | Then Ping and Verify IP address | ${nodes['TG']}
 | | ... | ${ipv4_neighbor[0]} | ${ipv4_address[0]}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
@@ -215,6 +216,8 @@ TC11: Honeycomb fails to configure two IPv4 addresses from the same subnet
 | | ... | the same subnet onto a single interface. It should not be possible.
 | | [Teardown] | Honeycomb removes interface ipv4 addresses | ${node}
 | | ... | ${interface}
+| | [Tags] | EXPECTED_FAILING
+# VPP API does not configure the second address, but returns success. VPP-649
 | | When Honeycomb sets interface ipv4 address with prefix
 | | ... | ${node} | ${interface} | 192.168.0.1 | ${9}
 | | Then Honeycomb fails to add interface ipv4 address
@@ -226,7 +229,7 @@ TC12: Honeycomb fails to configure two IPv6 addresses from the same subnet
 | | [Documentation] | Check if Honeycomb can configure two IPv6 addresses in\
 | | ... | the same subnet onto a single interface. It should not be possible.
 | | [Tags] | EXPECTED_FAILING
-# Subnet validation on IPv6 not supported.
+# VPP API does not configure the second address, but returns success. VPP-649
 | | [Teardown] | Honeycomb removes interface ipv6 addresses | ${node}
 | | ... | ${interface}
 | | When Honeycomb sets interface ipv6 address
index ba63cf6..74480ba 100644 (file)
@@ -46,7 +46,6 @@
 | Test Teardown | Run Keywords | Show Packet Trace on All DUTs | ${nodes}
 | ... | AND | Read plugin-ACL configuration from VAT | ${node}
 | ... | AND | Clear plugin-acl settings | ${node} | ${dut_to_tg_if1}
-| Suite Setup | Vpp All ra suppress link layer | ${nodes}
 | Suite Teardown
 | ... | Restart Honeycomb and VPP | ${node}
 | Documentation | *Honeycomb access control lists test suite for ACL plugin.*
 | | ... | [Ver] Send ICMP packets from one TG interface\
 | | ... | to the other, using different codes and types. Receive all packets\
 | | ... | except those with types and codes in the filtered ranges.
-| | [Tags] | EXPECTED_FAILING
-# Bug VPP-624, ICMP type/code values are not matched
 | | [Teardown] | Run Keywords
 | | ... | Show Packet Trace on All DUTs | ${nodes} | AND
 | | ... | Read plugin-ACL configuration from VAT | ${node} | AND
 | | ... | [Ver] Send ICMPv6 packets from one TG interface\
 | | ... | to the other, using different codes and types. Receive all packets\
 | | ... | except those with the filtered type and code.
-| | [Tags] | EXPECTED_FAILING
-# Bug VPP-624, ICMP type/code values are not matched
 | | [Teardown] | Run Keywords
 | | ... | Show Packet Trace on All DUTs | ${nodes} | AND
 | | ... | Read plugin-ACL configuration from VAT | ${node} | AND
 | | ... | to VPP interface 2 and receive it from interface 1(this should create\
 | | ... | a reflexive "permit" rule) Finally, send the original packet again\
 | | ... | and receive it from interface 2.
-| | [Tags] | EXPCETED_FAILING
-# Bug VPP-633, VPP crashes when any packet hits a reflexive rule
 | | [Teardown] | Run Keywords
 | | ... | Show Packet Trace on All DUTs | ${nodes} | AND
 | | ... | Read plugin-ACL configuration from VAT | ${node} | AND
 | | ... | [Ver] Send simple TCP and UDP packets from one TG interface\
 | | ... | to the other, using different IPv4 IPs. Receive all packets except\
 | | ... | those with IPs in the filtered ranges and UDP protocol payload.
-| | [Tags] | EXPECTED_FAILING
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | l3_ip4 | ${acl_name_l3_ip4}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | [Ver] Send simple TCP and UDP packets from one TG interface\
 | | ... | to the other, using different IPv6 IPs. Receive all packets except\
 | | ... | those with IPs in the filtered ranges and UDP protocol payload.
-| | [Tags] | EXPECTED_FAILING
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Path for 2-node testing is set
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Import Variables | resources/test_data/honeycomb/plugin_acl.py
 | | ... | [Ver] Send simple TCP and UDP packets from one TG interface\
 | | ... | to the other, using different ports. Receive all packets except\
 | | ... | those with ports in the filtered ranges.
-| | [Tags] | EXPECTED_FAILING
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | L4 | ${acl_name_l4}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | [Ver] Send simple TCP packets from one TG interface to the other,\
 | | ... | using IPs and ports. Receive all packets except those with\
 | | ... | both IPs and ports in the filtered ranges.
-| | [Tags] | EXPECTED_FAILING
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | mixed | ${acl_name_mixed}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | [Ver] Send ICMP packets from one TG interface\
 | | ... | to the other, using different codes and types. Receive all packets\
 | | ... | except those with the filtered type and code.
-| | [Tags] | EXPECTED_FAILING
-# Bug VPP-624, ICMP type/code values are not matched
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | icmp | ${acl_name_icmp}
 | | When Honeycomb Creates ACL Chain Through ACL plugin
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac}
 | | ... | ${classify_type} | ${icmp_code}
-| | And Run Keyword And Expect Error | TCP/UDP Rx timeout
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
 | | ... | Send ICMP packet with type and code | ${tg_node}
 | | ... | ${src_ip} | ${dst_ip}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | ... | [Ver] Send ICMPv6 packets from one TG interface\
 | | ... | to the other, using different codes and types. Receive all packets\
 | | ... | except those with the filtered type and code.
-| | [Tags] | EXPECTED_FAILING
-# Bug VPP-624, ICMP type/code values are not matched
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
 | | Given Path for 2-node testing is set
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | And Import Variables | resources/test_data/honeycomb/plugin_acl.py
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac}
 | | ... | ${classify_type} | ${icmp_code}
-| | And Run Keyword And Expect Error | TCP/UDP Rx timeout
+| | And Run Keyword And Expect Error | ICMP echo Rx timeout
 | | ... | Send ICMP packet with type and code | ${tg_node}
 | | ... | ${src_ip} | ${dst_ip}
 | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac}
 | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac}
 | | ... | ${classify_type} | ${classify_code}
 
-| TC15: ACL reflexive IPv4 filtering through plugin-acl node - bridged
+| TC15: ACL reflexive IPv4 filtering through plugin-acl node - routed
 | | [Documentation]
 | | ... | [Top] TG=DUT1=TG.
 | | ... | [Enc] Eth-IPv4-TCP.
 | | ... | to VPP interface 2 and receive it from interface 1(this should create\
 | | ... | a reflexive "permit" rule) Finally, send the original packet again\
 | | ... | and receive it from interface 2.
-| | [Tags] | EXPECTED_FAILING
-# routed interfaces not yet supported by ACL plugin (no Jira id available)
-# Bug VPP-633, VPP crashes when any packet hits a reflexive rule
 | | Given Setup Interface IPs And Routes For IPv4 plugin-acl Test
 | | ... | reflex | ${acl_name_reflex}
 | | And Add ARP on DUT
index aea7f2d..d850cc9 100644 (file)
@@ -33,7 +33,7 @@
 | Suite Teardown
 | ... | Run Keyword If Any Tests Failed
 | ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node}
-| Force Tags | honeycomb_sanity
+| Force Tags | honeycomb_sanity | honeycomb_odl
 | Documentation | *Honeycomb proxyARP management test suite.*
 
 *** Test Cases ***
index 6651cd7..93c8420 100644 (file)
 | Resource | resources/libraries/robot/honeycomb/honeycomb.robot
 | Resource | resources/libraries/robot/honeycomb/interfaces.robot
 | Resource | resources/libraries/robot/honeycomb/routing.robot
-| Suite Setup | Vpp nodes ra suppress link layer | ${nodes}
 | Test Setup | Clear Packet Trace on All DUTs | ${nodes}
-| Suite Teardown | Run Keyword If Any Tests Failed
-| ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node}
+| Suite Teardown | Restart Honeycomb And VPP | ${node}
 | Test Teardown | Honeycomb routing test teardown
 | ... | ${node} | ${table}
 | Documentation | *Honeycomb routing test suite.*
-| Force Tags | Honeycomb_sanity
+| Force Tags | Honeycomb_sanity | honeycomb_odl
 
 *** Test Cases ***
 | TC01: Single hop IPv4 route
 | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']}
 | | Import Variables | resources/test_data/honeycomb/routing.py
 | | ... | ${nodes['DUT1']} | ipv4 | ${dut_to_tg_if2}
-| | Honeycomb sets interface vrf ID
-| | ... | ${dut_node} | ${dut_to_tg_if1} | ${1} | ipv4
-| | Honeycomb sets interface vrf ID
-| | ... | ${dut_node} | ${dut_to_tg_if2} | ${1} | ipv4
+| | Setup vrf IDs | ${dut_node} | ${dut_to_tg_if1} | ${1}
+| | Setup vrf IDs | ${dut_node} | ${dut_to_tg_if2} | ${1}
 | | Honeycomb sets interface state | ${dut_node} | ${dut_to_tg_if1} | up
 | | Honeycomb sets interface state | ${dut_node} | ${dut_to_tg_if2} | up
 | | Honeycomb sets interface ipv4 address with prefix | ${dut_node}
 | | ... | ${src_ip} | ${tg_to_dut_if1_mac}
 | | Honeycomb adds interface ipv6 neighbor | ${dut_node} | ${dut_to_tg_if2}
 | | ... | ${next_hop} | ${tg_to_dut_if2_mac}
+| | Vpp all ra suppress link layer | ${nodes}
 
 | Honeycomb routing test teardown
 | | [arguments] | ${node} | ${routing_table}
 | | Show Packet Trace on All DUTs | ${nodes}
 | | Log routing configuration from VAT | ${node}
 | | Honeycomb removes routing configuration | ${node} | ${routing_table}
+
+| Setup vrf IDs
+| | [Arguments] | ${node} | ${interface} | ${vrf}
+| | Honeycomb sets interface vrf ID
+| | ... | ${node} | ${interface} | ${vrf} | ipv4
+| | Honeycomb sets interface vrf ID
+| | ... | ${node} | ${interface} | ${vrf} | ipv6
\ No newline at end of file
index f15a632..c4e9295 100644 (file)
 | | ... | ${node} | ${nat_empty}
 | | When Honeycomb Configures NAT Entry | ${node} | ${entry1}
 | | Then NAT Entries From Honeycomb Should Be | ${node} | ${entry1}
-| | And NAT Entries From VAT Should Be | ${node} | ${entry1_vat}
 
 | TC02: Honeycomb removes NAT entry
 | | [Documentation] | Honeycomb removes a configured static NAT entry.
 | | Given NAT Entries From Honeycomb Should Be | ${node} | ${entry1}
-| | And NAT Entries From VAT Should Be | ${node} | ${entry1_vat}
 | | When Honeycomb Configures NAT Entry | ${node} | ${NONE}
 | | Then NAT configuration from Honeycomb should be empty
 | | ... | ${node} | ${nat_empty}
@@ -50,7 +48,6 @@
 | | And Honeycomb Configures NAT Entry | ${node} | ${entry2} | ${0} | ${2}
 | | Then NAT Entries From Honeycomb Should Be
 | | ... | ${node} | ${entry1_2_oper} | ${0}
-| | And NAT Entries From VAT Should Be | ${node} | ${entry1_2_vat}
 
 | TC04: Honeycomb enables NAT on interface - inbound
 | | [Documentation] | Honeycomb configures NAT on an interface\
@@ -63,8 +60,6 @@
 | | ... | ${node} | ${interface} | inbound
 | | Then NAT Interface Configuration From Honeycomb Should Be
 | | ... | ${node} | ${interface} | inbound
-| | And NAT Interface Configuration From VAT Should Be
-| | ... | ${node} | ${nat_interface_vat_in}
 | | And NAT Interface Configuration From Honeycomb Should be empty
 | | ... | ${node} | ${interface} | outbound
 
@@ -96,5 +91,3 @@
 | | ... | ${node} | ${interface} | inbound
 | | And NAT Interface Configuration From Honeycomb Should Be
 | | ... | ${node} | ${interface} | outbound
-| | And NAT Interface Configuration From VAT Should Be
-| | ... | ${node} | ${nat_interface_vat_out}