Add vxlan tests using xconnect 05/505/10
authorPatrik Hrnciar <phrnciar@cisco.com>
Tue, 8 Mar 2016 16:34:18 +0000 (17:34 +0100)
committerPatrik Hrnciar <phrnciar@cisco.com>
Mon, 14 Mar 2016 12:52:46 +0000 (13:52 +0100)
Change-Id: I190689d5a624f1c876df90ce29b05a2b0b8a2df4
Signed-off-by: Patrik Hrnciar <phrnciar@cisco.com>
resources/libraries/python/IPv4Util.py
resources/libraries/python/InterfaceSetup.py
resources/libraries/python/InterfaceUtil.py
resources/libraries/python/L2Util.py
resources/libraries/robot/vxlan.robot
tests/suites/vxlan/vxlan_bd_untagged.robot [new file with mode: 0644]
tests/suites/vxlan/vxlan_xconnect_untagged.robot [moved from tests/suites/vxlan/vxlan_untagged.robot with 73% similarity]

index 3b500ab..b7035f2 100644 (file)
@@ -36,8 +36,6 @@ class IPv4Util(object):
         get_node(node).arp_ping(ip_address, interface)
 
     @staticmethod
-    @keyword('Node "${node}" interface "${port}" has IPv4 address "${address}"'
-             ' with prefix length "${prefix_length}"')
     def set_interface_address(node, interface, address, length):
         """See IPv4Node.set_ip for more information.
 
index f981d23..946c8fc 100644 (file)
@@ -151,8 +151,6 @@ class InterfaceSetup(object):
                                                    if_v['driver'])
 
     @staticmethod
-    @keyword('Create VXLAN interface on "${DUT}" with VNI "${VNI}"'
-             ' from "${SRC_IP}" to "${DST_IP}"')
     def create_vxlan_interface(node, vni, source_ip, destination_ip):
         """Create VXLAN interface and return index of created interface
 
index aeb54be..be12650 100644 (file)
@@ -30,10 +30,10 @@ class InterfaceUtil(object):
         Function can be used for DUTs as well as for TGs.
 
         :param node: node where the interface is
-        :param interface: interface name
+        :param interface: interface name or sw_if_index
         :param state: one of 'up' or 'down'
         :type node: dict
-        :type interface: str
+        :type interface: str or int
         :type state: str
         :return: nothing
         """
@@ -45,7 +45,11 @@ class InterfaceUtil(object):
             else:
                 raise ValueError('Unexpected interface state: {}'.format(state))
 
-            sw_if_index = Topology.get_interface_sw_index(node, interface)
+            if isinstance(interface, basestring):
+                sw_if_index = Topology.get_interface_sw_index(node, interface)
+            else:
+                sw_if_index = interface
+
             VatExecutor.cmd_from_template(node, 'set_if_state.vat',
                                           sw_if_index=sw_if_index, state=state)
 
index c0a764f..4dc230c 100644 (file)
@@ -159,14 +159,23 @@ class L2Util(object):
         """Create bidirectional cross-connect between 2 interfaces on vpp node.
 
         :param node: Node to add bidirectional cross-connect
-        :param interface1: first interface
-        :param interface2: second interface
+        :param interface1: first interface name or sw_if_index
+        :param interface2: second interface name or sw_if_index
         :type node: dict
-        :type interface1: str
-        :type interface2: str
+        :type interface1: str or int
+        :type interface2: str or int
         """
-        sw_iface1 = Topology().get_interface_sw_index(node, interface1)
-        sw_iface2 = Topology().get_interface_sw_index(node, interface2)
+
+        if isinstance(interface1, basestring):
+            sw_iface1 = Topology().get_interface_sw_index(node, interface1)
+        else:
+            sw_iface1 = interface1
+
+        if isinstance(interface2, basestring):
+            sw_iface2 = Topology().get_interface_sw_index(node, interface2)
+        else:
+            sw_iface2 = interface2
+
         with VatTerminal(node) as vat:
             vat.vat_terminal_exec_cmd_from_template('l2_xconnect.vat',
                                                     interface1=sw_iface1,
index e38c678..e855f24 100644 (file)
@@ -15,6 +15,7 @@
 | Library  | Collections
 | Resource | resources/libraries/robot/default.robot
 | Resource | resources/libraries/robot/bridge_domain.robot
+| Resource | resources/libraries/robot/l2_xconnect.robot
 | Library  | resources.libraries.python.L2Util
 | Library  | resources.libraries.python.IPUtil
 | Library  | resources.libraries.python.IPv4Util
 | | Set Suite Variable | ${duts_ip_address_prefix} | 24
 | | Set Interface State | ${TG} | ${tgs_to_dut1} | up
 | | Set Interface State | ${TG} | ${tgs_to_dut2} | up
-| | Setup DUT for VXLAN | ${DUT1} | ${VNI} | ${dut1s_ip_address} | ${dut2s_ip_address}
-| | ...                 | ${dut1s_to_tg} | ${dut1s_to_dut2} | ${dut1s_ip_address} | ${duts_ip_address_prefix}
-| | Setup DUT for VXLAN | ${DUT2} | ${VNI} | ${dut2s_ip_address} | ${dut1s_ip_address}
-| | ...                 | ${dut2s_to_tg} | ${dut2s_to_dut1} | ${dut2s_ip_address} | ${duts_ip_address_prefix}
+| | ${vxlan_dut1}= | Setup VXLAN on DUT | ${DUT1} | ${VNI} | ${dut1s_ip_address}
+| | ...                                 | ${dut2s_ip_address} | ${dut1s_to_tg}
+| | ...                                 | ${dut1s_to_dut2} | ${dut1s_ip_address}
+| | ...                                 | ${duts_ip_address_prefix}
+| | Set Suite Variable | ${vxlan_dut1}
+| | ${vxlan_dut2}= | Setup VXLAN on DUT | ${DUT2} | ${VNI} | ${dut2s_ip_address}
+| | ...                                 | ${dut1s_ip_address} | ${dut2s_to_tg}
+| | ...                                 | ${dut2s_to_dut1} | ${dut2s_ip_address}
+| | ...                                 | ${duts_ip_address_prefix}
+| | Set Suite Variable | ${vxlan_dut2}
 | | @{test_nodes}= | Create list | ${DUT1} | ${DUT2}
 | | Vpp Nodes Interfaces Ready Wait | ${test_nodes}
 # ip arp table must be filled on both nodes with neighbors address
 | | VPP IP Probe | ${DUT1} | ${dut1s_to_dut2} | ${dut2s_ip_address}
 
-| Setup DUT for VXLAN
-| | [Arguments] | ${DUT} | ${VNI} | ${SRC_IP} | ${DST_IP} | ${INGRESS} | ${EGRESS} | ${IP} | ${PREFIX}
-| | Set Interface State | ${DUT} | ${EGRESS} | up
-| | Set Interface State | ${DUT} | ${INGRESS} | up
-| | Node "${DUT}" interface "${EGRESS}" has IPv4 address "${IP}" with prefix length "${PREFIX}"
-| | ${vxlan_if_index}= | Create VXLAN interface on "${DUT}" with VNI "${VNI}" from "${SRC_IP}" to "${DST_IP}"
+| Setup DUT for VXLAN using BD
+| | [Arguments] | ${DUT} | ${VNI} | ${INGRESS} | ${vxlan_if_index}
 | | Create L2 BD | ${DUT} | ${VNI}
 | | Add sw if index To L2 BD | ${DUT} | ${vxlan_if_index} | ${VNI}
 | | Add Interface To L2 BD | ${DUT} | ${INGRESS} | ${VNI}
+
+| Setup VXLAN on DUT
+| | [Arguments] | ${DUT} | ${VNI} | ${SRC_IP} | ${DST_IP} | ${INGRESS}
+| | ...         | ${EGRESS} | ${IP} | ${PREFIX}
+| | Set Interface State | ${DUT} | ${EGRESS} | up
+| | Set Interface State | ${DUT} | ${INGRESS} | up
+| | Set Interface Address | ${DUT} | ${EGRESS} | ${IP} | ${PREFIX}
+| | ${vxlan_if_index}= | Create VXLAN interface | ${DUT} | ${VNI} | ${SRC_IP}
+| | ...                                         | ${DST_IP}
+| | [Return] | ${vxlan_if_index}
diff --git a/tests/suites/vxlan/vxlan_bd_untagged.robot b/tests/suites/vxlan/vxlan_bd_untagged.robot
new file mode 100644 (file)
index 0000000..2e5d27a
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (c) 2016 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:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+| Documentation | VXLAN tunnel untagged traffic tests using bridge domain.
+| Resource | resources/libraries/robot/default.robot
+| Resource | resources/libraries/robot/vxlan.robot
+| Resource | resources/libraries/robot/l2_traffic.robot
+| Force Tags | 3_NODE_SINGLE_LINK_TOPO | VM_ENV | HW_ENV
+| Suite Setup | Run Keywords | Setup all DUTs before test
+| ...         | AND          | Setup all TGs before traffic script
+| ...         | AND          | Setup VXLAN tunnel on nodes | ${nodes['TG']}
+|             | ...          | ${nodes['DUT1']} | ${nodes['DUT2']} | ${VNI}
+
+*** Variables ***
+| ${VNI}= | 23
+
+*** Test Cases ***
+| VPP can encapsulate L2 in VXLAN over V4
+| | Setup DUT for VXLAN using BD | ${nodes['DUT1']} | ${23} | ${dut1s_to_tg}
+| | ...                          | ${vxlan_dut1}
+| | Setup DUT for VXLAN using BD | ${nodes['DUT2']} | ${23} | ${dut2s_to_tg}
+| | ...                          | ${vxlan_dut2}
+| | Send and receive ICMPv4 | ${nodes['TG']} | ${tgs_to_dut1} | ${tgs_to_dut2}
+| | Send and receive ICMPv4 | ${nodes['TG']} | ${tgs_to_dut2} | ${tgs_to_dut1}
similarity index 73%
rename from tests/suites/vxlan/vxlan_untagged.robot
rename to tests/suites/vxlan/vxlan_xconnect_untagged.robot
index 638c056..c3d2a3c 100644 (file)
@@ -12,7 +12,7 @@
 # limitations under the License.
 
 *** Settings ***
-| Documentation | VXLAN tunnel untagged traffic tests
+| Documentation | VXLAN tunnel untagged traffic tests using xconnect.
 | Resource | resources/libraries/robot/default.robot
 | Resource | resources/libraries/robot/vxlan.robot
 | Resource | resources/libraries/robot/l2_traffic.robot
 | Suite Setup | Run Keywords | Setup all DUTs before test
 | ...         | AND          | Setup all TGs before traffic script
 | ...         | AND          | Setup VXLAN tunnel on nodes | ${nodes['TG']}
-|             | ...          | ${nodes['DUT1']} | ${nodes['DUT2']} | ${23}
+|             | ...          | ${nodes['DUT1']} | ${nodes['DUT2']} | ${VNI}
+
+*** Variables ***
+| ${VNI}= | 24
 
 *** Test Cases ***
-| VPP can encapsulate L2 in VXLAN over V4
+| VPP can pass IPv4 bidirectionally through VXLAN tunnel using l2-xconnect
+| | L2 setup xconnect on DUT | ${nodes['DUT1']} | ${dut1s_to_tg} | ${vxlan_dut1}
+| | L2 setup xconnect on DUT | ${nodes['DUT2']} | ${dut2s_to_tg} | ${vxlan_dut2}
 | | Send and receive ICMPv4 | ${nodes['TG']} | ${tgs_to_dut1} | ${tgs_to_dut2}
+| | Send and receive ICMPv4 | ${nodes['TG']} | ${tgs_to_dut2} | ${tgs_to_dut1}