diff options
| author | songyanchao <[email protected]> | 2023-11-30 04:07:00 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2023-12-01 10:12:35 +0000 |
| commit | d1c299b0d0484f94ef4b3e5f942df73e9ca68c5b (patch) | |
| tree | b1956fcbc3e59d6359a75f2a56d9dcd7b6110925 /test | |
| parent | 334e8b72b4b3df083919d6c582544b23ef6e3315 (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.txt | 23 | ||||
| -rw-r--r-- | test/create_veth.sh | 19 | ||||
| -rw-r--r-- | test/msgpack_test.py | 392 |
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() + |
