diff options
Diffstat (limited to 'conf/integration')
-rw-r--r-- | conf/integration/01_testcases.conf | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/conf/integration/01_testcases.conf b/conf/integration/01_testcases.conf index dfc8a4c2..bb2809b8 100644 --- a/conf/integration/01_testcases.conf +++ b/conf/integration/01_testcases.conf @@ -1000,6 +1000,165 @@ INTEGRATION_TESTS = [ # END of VPP tests used by VERIFY and MERGE jobs by OPNFV Jenkins # + # + # Examples of functional testcases with traffic capture validation + # + # Capture Example 1 - Traffic capture inside VM (PVP scenario) + # This TestCase will modify VLAN ID set by the traffic generator to the new value. + # Correct VLAN ID settings is verified by inspection of captured frames. + { + "Name": "capture_pvp_modify_vid", + "Deployment": "pvp", + "Description": "Test and verify VLAN ID modification by Open vSwitch", + "Parameters" : { + "VSWITCH" : "OvsDpdkVhost", # works also for Vanilla OVS + "TRAFFICGEN_DURATION" : 5, + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + 'vlan': { + 'enabled': True, + 'id': 8, + 'priority': 1, + 'cfi': 0, + }, + }, + "GUEST_LOOPBACK" : ['linux_bridge'], + }, + "TestSteps": [ + # replace original flows with vlan ID modification + ['!vswitch', 'add_flow', 'br0', {'in_port': '1', 'actions': ['mod_vlan_vid:4','output:3']}], + ['!vswitch', 'add_flow', 'br0', {'in_port': '2', 'actions': ['mod_vlan_vid:4','output:4']}], + ['vswitch', 'dump_flows', 'br0'], + # verify that received frames have modified vlan ID + ['VNF0', 'execute_and_wait', 'tcpdump -i eth0 -c 5 -w dump.pcap vlan 4 &'], + ['trafficgen', 'send_traffic',{}], + ['!VNF0', 'execute_and_wait', 'tcpdump -qer dump.pcap vlan 4 2>/dev/null | wc -l','|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 5'], + ], + }, +] +# Capture Example 2 - Setup with 2 NICs, where traffic is captured after it is +# processed by NIC under the test (2nd NIC). See documentation for further details. +# This TestCase will strip VLAN headers from traffic sent by the traffic generator. +# The removal of VLAN headers is verified by inspection of captured frames. +# +# NOTE: This setup expects a DUT with two NICs with two ports each. First NIC is +# connected to the traffic generator (standard VSPERF setup). Ports of a second NIC +# are interconnected by a patch cable. PCI addresses of all four ports have to be +# properly configured in the WHITELIST_NICS parameter. +_CAPTURE_P2P2P_OVS_ACTION = '' +_CAPTURE_P2P2P_SETUP = [ + # restore original NICS configuration, so we can refer to NICS elements + ['settings', 'resetValue', 'WHITELIST_NICS'], + ['settings', 'resetValue', 'NICS'], + # create and configure two bridges to forward traffic through NIC under + # the test and back to the traffic generator + # 1st bridge: + ['vswitch', 'add_switch', 'br0'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[0]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[0]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br0 $NICS[0]["device"]'], + ['tools', 'exec_shell', 'sudo $TOOLS["bind-tool"] --bind igb_uio $NICS[3]["pci"]'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br0 dpdk0 -- ' + 'set Interface dpdk0 type=dpdk options:dpdk-devargs=$NICS[3]["pci"]'], + ['tools', 'exec_shell', '$TOOLS["ovs-ofctl"] add-flow br0 in_port=1,action=' + '$_CAPTURE_P2P2P_OVS_ACTION,output:2'], + # 2nd bridge: + ['vswitch', 'add_switch', 'br1'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[2]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[2]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br1 $NICS[2]["device"]'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[1]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[1]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br1 $NICS[1]["device"]'], + ['vswitch', 'add_flow', 'br1', {'in_port': '1', 'actions': ['output:2']}], + # log flow details + ['vswitch', 'dump_flows', 'br0'], + ['vswitch', 'dump_flows', 'br1'], +] +INTEGRATION_TESTS += [ + { + "Name": "capture_p2p2p_strip_vlan_ovs", + "Deployment": "clean", + "Description": "P2P Continuous Stream", + "Parameters" : { + "_CAPTURE_P2P2P_OVS_ACTION" : 'strip_vlan', + "TRAFFIC" : { + "bidir" : "False", + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + 'l2': { + 'srcmac': "ca:fe:00:00:00:00", + 'dstmac': "00:00:00:00:00:01" + }, + 'vlan': { + 'enabled': True, + 'id': 8, + 'priority': 1, + 'cfi': 0, + }, + }, + # suppress DPDK configuration, so physical interfaces are not bound to DPDK driver + 'WHITELIST_NICS' : [], + 'NICS' : [], + }, + "TestSteps": _CAPTURE_P2P2P_SETUP + [ + # capture traffic after processing by NIC under the test (after possible egress HW offloading) + ['tools', 'exec_shell_background', 'tcpdump -i $NICS[2]["device"] -c 5 -w capture.pcap ' + 'ether src $TRAFFIC["l2"]["srcmac"]'], + ['trafficgen', 'send_traffic', {}], + ['vswitch', 'dump_flows', 'br0'], + ['vswitch', 'dump_flows', 'br1'], + # there must be 5 captured frames... + ['tools', 'exec_shell', 'tcpdump -r capture.pcap | wc -l', '|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 5'], + # ...but no vlan headers + ['tools', 'exec_shell', 'tcpdump -r capture.pcap vlan | wc -l', '|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 0'], + ], + }, + # Capture Example 3 - Traffic capture by traffic generator. + # This TestCase uses OVS flow to add VLAN tag with given ID into every + # frame send by traffic generator. Correct frame modificaiton is verified by + # inspection of packet capture received by T-Rex. + { + "Name": "capture_p2p_add_vlan_ovs_trex", + "Deployment": "clean", + "Description": "OVS: Test VLAN tag modification and verify it by traffic capture", + "vSwitch" : "OvsDpdkVhost", # works also for Vanilla OVS + "Parameters" : { + "TRAFFICGEN" : "Trex", + "TRAFFICGEN_DURATION" : 5, + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + # enable capture of five RX frames + 'capture': { + 'enabled': True, + 'tx_ports' : [], + 'rx_ports' : [1], + 'count' : 5, + }, + }, + }, + "TestSteps" : STEP_VSWITCH_P2P_INIT + [ + # replace standard L2 flows by flows, which will add VLAN tag with ID 3 + ['!vswitch', 'add_flow', 'int_br0', {'in_port': '1', 'actions': ['mod_vlan_vid:3','output:2']}], + ['!vswitch', 'add_flow', 'int_br0', {'in_port': '2', 'actions': ['mod_vlan_vid:3','output:1']}], + ['vswitch', 'dump_flows', 'int_br0'], + ['trafficgen', 'send_traffic', {}], + ['trafficgen', 'get_results'], + # verify that captured frames have vlan tag with ID 3 + ['tools', 'exec_shell', 'tcpdump -qer $RESULTS_PATH/#STEP[-1][0]["capture_rx"] vlan 3 ' + '2>/dev/null | wc -l', '|^(\d+)$'], + # number of received frames with expected VLAN id must match the number of captured frames + ['tools', 'assert', '#STEP[-1][0] == 5'], + ] + STEP_VSWITCH_P2P_FINIT, + }, + # + # End of examples of functional testcases with traffic capture validation + # ] # Example of TC definition with exact vSwitch, VNF and TRAFFICGEN values. |