summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2023-11-30 04:07:00 +0000
committersongyanchao <[email protected]>2023-12-01 10:12:35 +0000
commitd1c299b0d0484f94ef4b3e5f942df73e9ca68c5b (patch)
treeb1956fcbc3e59d6359a75f2a56d9dcd7b6110925 /test
parent334e8b72b4b3df083919d6c582544b23ef6e3315 (diff)
✨ feat(DPISDN-28): Replace msgpack-c with mpack and add corresponding test cases
Replace msgpack-c with mpack and add corresponding test cases
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt23
-rw-r--r--test/create_veth.sh19
-rw-r--r--test/msgpack_test.py392
3 files changed, 429 insertions, 5 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 588b41a..c5b448f 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -22,6 +22,21 @@ message(FATAL_ERROR "${CMAKE_SOURCE_DIR}/test/create_veth.sh create 24")
message(FATAL_ERROR "Failed to create veth: ${VETH_ERROR}")
endif()
+# Create veth for msgpack
+execute_process(
+ COMMAND /bin/bash ${CMAKE_SOURCE_DIR}/test/create_veth.sh create msgpack
+ RESULT_VARIABLE VETH_RESULT
+ OUTPUT_VARIABLE VETH_OUTPUT
+ ERROR_VARIABLE VETH_ERROR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+
+# Check veth create for msgpack
+if(VETH_RESULT)
+message(FATAL_ERROR "${CMAKE_SOURCE_DIR}/test/create_veth.sh create msgpack")
+ message(FATAL_ERROR "Failed to create veth: ${VETH_ERROR}")
+endif()
+
# Script for generating "--interface"
# for i in range(0, 24):
# print(f"--interface {i}@veth{i}-ptf{i}", end=" ")
@@ -82,3 +97,11 @@ add_test(
--interface 0@veth0-ptf0 --interface 1@veth1-ptf1 --interface 2@veth2-ptf2 --interface 3@veth3-ptf3 --interface 4@veth4-ptf4
lb_base_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'"
)
+
+# Add msgpack test
+add_test(
+ NAME msgpack_test
+ COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_SOURCE_DIR}/test
+ --interface 0@veth0-ptf0 --interface 1@veth1-ptf1 --interface 2@veth2-ptf2
+ msgpack_serialize_test msgpack_deserialize_test msgpack_serialize_and_deserialize_test --test-params "source_dir='${CMAKE_SOURCE_DIR}'"
+)
diff --git a/test/create_veth.sh b/test/create_veth.sh
index 335cee1..ed00dd6 100644
--- a/test/create_veth.sh
+++ b/test/create_veth.sh
@@ -15,21 +15,30 @@ function delete_veth() {
}
if [[ "$1" == "create" ]]; then
- if [ -z "$2" ]; then
+ if [ "$2" == "msgpack" ]; then
+ ip link add veth-msgpack-tx type veth peer name veth-msgpack-rx
+ ip link set veth-msgpack-rx up
+ ip link set veth-msgpack-tx up
+ elif [ -z "$2" ]; then
echo "Usage: $0 create <number_of_veth_interfaces>"
exit 1
fi
+
for i in $(seq 0 $(( $2 - 1 )))
do
- create_veth "$i"
- echo "Created veth interface: veth$i"
+ create_veth "$i"
+ echo "Created veth interface: veth$i"
done
+
elif [[ "$1" == "delete" ]]; then
- if [ -z "$2" ]; then
+ if [ "$2" == "msgpack" ]; then
+ ip link delete veth-msgpack-tx
+ echo "Deleted veth interface: veth-msgpack-tx"
+ elif [ -z "$2" ]; then
echo "Usage: $0 delete <number_of_veth_interfaces>"
exit 1
fi
- delete_veth "$2"
+ delete_veth "$2"
else
echo "Usage: $0 <create/delete> <number_of_veth_interfaces>"
exit 1
diff --git a/test/msgpack_test.py b/test/msgpack_test.py
new file mode 100644
index 0000000..8aea0ed
--- /dev/null
+++ b/test/msgpack_test.py
@@ -0,0 +1,392 @@
+import ptf
+from ptf.base_tests import BaseTest
+from ptf.testutils import *
+from scapy.all import *
+from mrzcpd import Mrzcpd
+from common_pkt import *
+import ptf.mask as mask
+
+serialize_conf = """
+[device]
+device=veth0,veth1,veth2
+sz_tunnel=8192
+sz_buffer=0
+
+[device:veth0]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth1]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth2]
+promisc=1
+mtu=1500
+driver=2
+role=4
+encode=1
+
+
+[service]
+iocore=1
+distmode=2
+hashmode=0
+
+[eal]
+virtaddr=0x600000000000
+loglevel=7
+nohuge=1
+mem=65535
+
+[keepalive]
+check_spinlock=1
+
+[ctrlzone]
+ctrlzone0=tunnat,128
+
+[pool]
+create_mode=3
+sz_direct_pktmbuf=4096
+sz_indirect_pktmbuf=4096
+sz_cache=256
+sz_data=3000
+
+[ctrlmsg]
+listen_addr=0.0.0.0
+listen_port=46789
+
+[rpc]
+addr=127.0.0.1
+port=56789
+
+# sid
+[etherfabric_adapters]
+sid_range_start=100
+sid_range_end=200
+max_rules=256
+
+[vwires]
+sid_range_start=300
+sid_range_end=400
+max_rules=256
+
+# vwire
+[vwire:0]
+interface_int=veth0
+interface_ext=veth1
+
+[service_lb]
+sid_range_start=1000
+sid_range_end=2000
+
+# load banlance
+[load_balance:0]
+mode=balance
+devices=veth2,normal
+
+[classifier_rule:0]
+rule_id=1
+action=nf_steering
+priority=1
+category=0
+sid=1000
+vwire_id=0
+"""
+
+"""
+ +------------+ +------------------------------------------+ +------------+
+ | PTF | | MRZCPD | | PTF |
+ +------------+ +------------+--------+--------------------+ +------------+
+ | veth0-ptf0 | ---> | veth0 | ---> | veth2 (serialize) | ---> | veth2-ptf2 |
+ +------------+ +------------+ +--------------------+ +------------+
+ | veth1-ptf1 | <--- | veth1 | <--- | - |
+ +------------+ +------------+ +--------------------+
+"""
+
+@group("msgpack_serialize_test")
+class MpackSerializeTest(BaseTest):
+ def setUp(self):
+ self.dataplane = ptf.dataplane_instance
+
+ def __init__(self):
+ BaseTest.__init__(self)
+
+ def runTest(self):
+ try:
+ # Init & Start mrzcpd
+ mrzcpd = Mrzcpd(serialize_conf)
+ mrzcpd.start()
+
+ send_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world")
+ send_packet(self, 0,send_pkt)
+
+ # Verify
+ hex_data = "8ba4706f727400ab7061636b65745f7479706500a86f6c5f666c61677300a8646174615f6c656e64a7706b745f6c656e64a473696473980000000000cd03e8cd012c00a76375725f736964cd03e8a46865616407a47461696c06a8636170616369747907a67061636b6574c46400010203040500060708090a0800450000560001000040111e48ac110164ac1102c804d200500042f90068656c6c6f20776f726c64000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e"
+ binary_data = bytes.fromhex(hex_data)
+ verify_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data)
+
+ verify_packets(self, verify_pkt, [2])
+ finally:
+ mrzcpd.stop()
+
+deserialize_conf = """
+[device]
+device=veth0,veth1,veth2
+sz_tunnel=8192
+sz_buffer=0
+
+[device:veth0]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth1]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth2]
+promisc=1
+mtu=1500
+driver=2
+role=4
+encode=1
+
+[service]
+iocore=1
+distmode=2
+hashmode=0
+
+[eal]
+virtaddr=0x600000000000
+loglevel=7
+nohuge=1
+mem=65535
+
+[keepalive]
+check_spinlock=1
+
+[ctrlzone]
+ctrlzone0=tunnat,128
+
+[pool]
+create_mode=3
+sz_direct_pktmbuf=4096
+sz_indirect_pktmbuf=4096
+sz_cache=256
+sz_data=3000
+
+[ctrlmsg]
+listen_addr=0.0.0.0
+listen_port=46789
+
+[rpc]
+addr=127.0.0.1
+port=56789
+
+# sid
+[etherfabric_adapters]
+sid_range_start=100
+sid_range_end=200
+max_rules=256
+
+[vwires]
+sid_range_start=300
+sid_range_end=400
+max_rules=256
+
+# vwire
+[vwire:0]
+interface_int=veth0
+interface_ext=veth1
+
+[service_lb]
+sid_range_start=1000
+sid_range_end=2000
+
+# load banlance
+[load_balance:0]
+mode=balance
+devices=veth2,normal
+
+[classifier_rule:0]
+rule_id=1
+action=nf_steering
+priority=1
+category=0
+sid=1000
+vwire_id=0
+"""
+
+"""
+ +------------+ +------------------------------------------+ +------------+
+ | PTF | | MRZCPD | | PTF |
+ +------------+ +----------------------+--------+----------+ +------------+
+ | veth2-ptf2 | ---> | veth2(deserialize) | ---> | veth0 | ---> | veth0-ptf0 |
+ +------------+ +----------------------+ +----------+ +------------+
+ | veth1 | | veth1-ptf1 |
+ +----------+ +------------+
+"""
+
+@group("msgpack_deserialize_test")
+class MpackDeserializeTest(BaseTest):
+ def setUp(self):
+ self.dataplane = ptf.dataplane_instance
+
+ def __init__(self):
+ BaseTest.__init__(self)
+
+ def runTest(self):
+ try:
+ # Init & Start mrzcpd
+ mrzcpd = Mrzcpd(deserialize_conf)
+ mrzcpd.start()
+
+ hex_data = "8ba4706f727400ab7061636b65745f7479706500a86f6c5f666c61677300a8646174615f6c656e64a7706b745f6c656e64a473696473980000000000cd03e8cd012c00a76375725f736964cd03e8a46865616407a47461696c06a8636170616369747907a67061636b6574c46400010203040500060708090a0800450000560001000040111e48ac110164ac1102c804d200500042f90068656c6c6f20776f726c64000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e"
+ binary_data = bytes.fromhex(hex_data)
+ send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data)
+ send_packet(self, 2,send_pkt)
+
+ # Verify
+ verify_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world")
+ verify_packets(self, verify_pkt, [1])
+ finally:
+ mrzcpd.stop()
+
+serialize_and_deserialize_conf = """
+[device]
+device=veth0,veth1,veth-msgpack-tx,veth-msgpack-rx
+sz_tunnel=8192
+sz_buffer=0
+
+[device:veth0]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth1]
+promisc=1
+mtu=1500
+driver=2
+role=1
+
+[device:veth-msgpack-tx]
+promisc=1
+mtu=1500
+driver=2
+role=4
+encode=1
+
+[device:veth-msgpack-rx]
+promisc=1
+mtu=1500
+driver=2
+role=4
+encode=1
+
+[service]
+iocore=1
+distmode=2
+hashmode=0
+
+[eal]
+virtaddr=0x600000000000
+loglevel=7
+nohuge=1
+mem=65535
+
+[keepalive]
+check_spinlock=1
+
+[ctrlzone]
+ctrlzone0=tunnat,128
+
+[pool]
+create_mode=3
+sz_direct_pktmbuf=4096
+sz_indirect_pktmbuf=4096
+sz_cache=256
+sz_data=3000
+
+[ctrlmsg]
+listen_addr=0.0.0.0
+listen_port=46789
+
+[rpc]
+addr=127.0.0.1
+port=56789
+
+# sid
+[etherfabric_adapters]
+sid_range_start=100
+sid_range_end=200
+max_rules=256
+
+[vwires]
+sid_range_start=300
+sid_range_end=400
+max_rules=256
+
+# vwire
+[vwire:0]
+interface_int=veth0
+interface_ext=veth1
+
+[service_lb]
+sid_range_start=1000
+sid_range_end=2000
+
+# load banlance
+[load_balance:0]
+mode=balance
+devices=veth-msgpack-tx,normal
+
+[classifier_rule:0]
+rule_id=1
+action=nf_steering
+priority=1
+category=0
+sid=1000
+vwire_id=0
+"""
+
+
+"""
+ +------------+ +-----------------------------------------+
+ | PTF | | MRZCPD |
+ +------------+ +------------+--------+-------------------+
+ | veth0-ptf0 | ---> | veth0 | ---> | veth-msgpack-tx | --------+
+ +------------+ +------------+ +-------------------+ |
+ | veth1-ptf1 | <--- | veth1 | <--- | veth-msgpack-rx | <-------+
+ +------------+ +------------+ +-------------------+
+"""
+
+@group("msgpack_serialize_and_deserialize_test")
+class MpackSerializeAndDeserializeTest(BaseTest):
+ def setUp(self):
+ self.dataplane = ptf.dataplane_instance
+
+ def __init__(self):
+ BaseTest.__init__(self)
+
+ def runTest(self):
+ try:
+ # Init & Start mrzcpd
+ mrzcpd = Mrzcpd(serialize_and_deserialize_conf)
+ mrzcpd.start()
+
+ send_pkt = simple_tcp_packet(
+ ip_src="172.17.1.100", ip_dst="172.17.2.200")
+ send_packet(self, 0,send_pkt)
+ verify_packets(self, send_pkt, [1])
+ finally:
+ mrzcpd.stop()
+