Best Python code snippet using lisa_python
dpdksuite.py
Source:dpdksuite.py
...124 # enable hugepages needed for dpdk EAL125 init_hugepages(node)126 try:127 # run OVS tests, providing OVS with the NIC info needed for DPDK init128 ovs.setup_ovs(node.nics.get_nic_by_index().pci_slot)129 # validate if OVS was able to initialize DPDK130 node.execute(131 "ovs-vsctl get Open_vSwitch . dpdk_initialized",132 sudo=True,133 expected_exit_code=0,134 expected_exit_code_failure_message=(135 "OVS repoted that DPDK EAL failed to initialize."136 ),137 )138 finally:139 ovs.stop_ovs()140 @TestCaseMetadata(141 description="""142 Install and run ci test for NFF-Go on ubuntu143 """,144 priority=4,145 requirement=simple_requirement(146 min_core_count=8,147 min_nic_count=2,148 network_interface=Sriov(),149 unsupported_features=[Gpu, Infiniband],150 supported_features=[IsolatedResource],151 ),152 )153 def verify_dpdk_nff_go(154 self, node: Node, log: Logger, variables: Dict[str, Any]155 ) -> None:156 try:157 nff_go = node.tools[DpdkNffGo]158 except UnsupportedDistroException as err:159 raise SkippedException(err)160 # hugepages needed for dpdk tests161 init_hugepages(node)162 # run the nff-go tests163 nff_go.run_test()164 @TestCaseMetadata(165 description="""166 Build and run DPDK multiprocess client/server sample application.167 Requires 3 nics since client/server needs two ports + 1 nic for LISA168 """,169 priority=4,170 requirement=simple_requirement(171 min_nic_count=3,172 network_interface=Sriov(),173 unsupported_features=[Gpu, Infiniband],174 supported_features=[IsolatedResource],175 ),176 )177 def verify_dpdk_multiprocess(178 self, node: Node, log: Logger, variables: Dict[str, Any]179 ) -> None:180 # multiprocess test requires dpdk source.181 self._force_dpdk_default_source(variables)182 kill = node.tools[Kill]183 pmd = "failsafe"184 server_app_name = "dpdk-mp_server"185 client_app_name = "dpdk-mp_client"186 # initialize DPDK with sample applications selected for build187 test_kit = initialize_node_resources(188 node,189 log,190 variables,191 pmd,192 sample_apps=[193 "multi_process/client_server_mp/mp_server",194 "multi_process/client_server_mp/mp_client",195 ],196 )197 if test_kit.testpmd.is_connect_x3:198 raise SkippedException(199 "Unsupported Hardware: ConnectX3 does not support secondary process RX"200 )201 # enable hugepages needed for dpdk EAL202 init_hugepages(node)203 # setup and run mp_server application204 examples_path = test_kit.testpmd.dpdk_build_path.joinpath("examples")205 server_app_path = examples_path.joinpath(server_app_name)206 client_app_path = examples_path.joinpath(client_app_name)207 # EAL -l: start server on cores 1-2,208 # EAL -n: use 4 memory channels209 # APP: -p : set port bitmask to port 0 and 1210 # APP: -n : allow one client to connect211 server_proc = node.execute_async(212 (213 f"{server_app_path} -l 1-2 -n 4 "214 f"-b {node.nics.get_nic_by_index(0).pci_slot} -- -p 3 -n 1"215 ),216 sudo=True,217 shell=True,218 )219 # Wait for server to finish init220 server_proc.wait_output("APP: Finished Process Init.", timeout=5)221 # EAL -l: start client on core 3,222 # EAL --proc-type: client runs as secondary process.223 # APP: -n : client index is 0224 client_result = node.execute(225 (226 f"timeout -s INT 2 {client_app_path} --proc-type=secondary -l 3 -n 4"227 f" -b {node.nics.get_nic_by_index(0).pci_slot} -- -n 0"228 ),229 sudo=True,230 shell=True,231 )232 # client blocks and returns, kill server once client is finished.233 kill.by_name(str(server_app_name), signum=SIGINT)234 server_result = server_proc.wait_result()235 # perform the checks from v2236 assert_that(client_result.stdout).described_as(237 "Secondary process did not finish initialization"238 ).contains("APP: Finished Process Init")239 assert_that(client_result.stdout).described_as(240 "Secondary process did not start accepting packets from server"241 ).contains("Client process 0 handling packets")242 # mp_client returns a nonstandard positive number when killed w signal.243 # one would expect either 0 or 130 (killed by signal w sigint).244 # check that the nonsense number is at least the expected one.245 assert_that(client_result.exit_code).described_as(246 "dpdk-mp client exit code was unexpected"247 ).is_equal_to(124)248 assert_that(server_result.exit_code).is_equal_to(0)249 @TestCaseMetadata(250 description="""251 test sriov failsafe during vf revoke (receive side)252 """,253 priority=2,254 requirement=simple_requirement(255 min_core_count=8,256 min_nic_count=2,257 network_interface=Sriov(),258 min_count=2,259 unsupported_features=[Gpu, Infiniband],260 supported_features=[IsolatedResource],261 ),262 )263 def verify_dpdk_sriov_rescind_failover_receiver(264 self, environment: Environment, log: Logger, variables: Dict[str, Any]265 ) -> None:266 test_kits = init_nodes_concurrent(environment, log, variables, "failsafe")267 try:268 check_send_receive_compatibility(test_kits)269 except UnsupportedPackageVersionException as err:270 raise SkippedException(err)271 sender, receiver = test_kits272 # Want to only switch receiver sriov to avoid timing weirdness273 receiver.switch_sriov = True274 sender.switch_sriov = False275 kit_cmd_pairs = generate_send_receive_run_info("failsafe", sender, receiver)276 run_testpmd_concurrent(277 kit_cmd_pairs, DPDK_VF_REMOVAL_MAX_TEST_TIME, log, rescind_sriov=True278 )279 rescind_tx_pps_set = receiver.testpmd.get_mean_rx_pps_sriov_rescind()280 self._check_rx_or_tx_pps_sriov_rescind("RX", rescind_tx_pps_set)281 @TestCaseMetadata(282 description="""283 test sriov failsafe during vf revoke (send only version)284 """,285 priority=2,286 requirement=simple_requirement(287 min_core_count=8,288 min_nic_count=2,289 network_interface=Sriov(),290 unsupported_features=[Gpu, Infiniband],291 supported_features=[IsolatedResource],292 ),293 )294 def verify_dpdk_sriov_rescind_failover_send_only(295 self, node: Node, log: Logger, variables: Dict[str, Any]296 ) -> None:297 test_kit = initialize_node_resources(node, log, variables, "failsafe")298 testpmd = test_kit.testpmd299 test_nic = node.nics.get_nic_by_index()300 testpmd_cmd = testpmd.generate_testpmd_command(301 test_nic, 0, "txonly", "failsafe"302 )303 kit_cmd_pairs = {304 test_kit: testpmd_cmd,305 }306 run_testpmd_concurrent(307 kit_cmd_pairs, DPDK_VF_REMOVAL_MAX_TEST_TIME, log, rescind_sriov=True308 )309 rescind_tx_pps_set = testpmd.get_mean_tx_pps_sriov_rescind()310 self._check_rx_or_tx_pps_sriov_rescind("TX", rescind_tx_pps_set)311 def _check_rx_or_tx_pps_sriov_rescind(312 self, tx_or_rx: str, pps: Tuple[int, int, int]313 ) -> None:314 before_rescind, during_rescind, after_reenable = pps315 self._check_rx_or_tx_pps(tx_or_rx, before_rescind, sriov_enabled=True)316 self._check_rx_or_tx_pps(tx_or_rx, during_rescind, sriov_enabled=False)317 self._check_rx_or_tx_pps(tx_or_rx, after_reenable, sriov_enabled=True)318 def _check_rx_or_tx_pps(319 self, tx_or_rx: str, pps: int, sriov_enabled: bool = True320 ) -> None:321 if sriov_enabled:322 assert_that(pps).described_as(323 f"{tx_or_rx}-PPS ({pps}) should have been greater "324 "than 2^20 (~1m) PPS before sriov disable."325 ).is_greater_than(2**20)326 else:327 assert_that(pps).described_as(328 f"{tx_or_rx}-PPS ({pps}) should have been less "329 "than 2^20 (~1m) PPS after sriov disable."330 ).is_less_than(2**20)331 @TestCaseMetadata(332 description="""333 verify vpp is able to detect azure network interfaces334 1. run fd.io vpp install scripts335 2. install vpp from their repositories336 3. start vpp service337 4. check that azure interfaces are detected by vpp338 """,339 priority=4,340 requirement=simple_requirement(341 min_core_count=8,342 min_nic_count=2,343 network_interface=Sriov(),344 unsupported_features=[Gpu, Infiniband],345 supported_features=[IsolatedResource],346 ),347 )348 def verify_dpdk_vpp(349 self, node: Node, log: Logger, variables: Dict[str, Any]350 ) -> None:351 vpp = node.tools[DpdkVpp]352 vpp.install()353 net = node.nics354 nic = net.get_nic_by_index()355 # set devices to down and restart vpp service356 ip = node.tools[Ip]357 for dev in [nic.lower, nic.upper]:358 ip.down(dev)359 for dev in [nic.lower, nic.upper]:360 ip.addr_flush(dev)361 vpp.start()362 vpp.run_test()363 @TestCaseMetadata(364 description="""365 This test runs the dpdk ring ping utility from:366 https://github.com/shemminger/dpdk-ring-ping367 to measure the maximum latency for 99.999 percent of packets during368 the test run. The maximum should be under 200000 nanoseconds369 (.2 milliseconds).370 Not dependent on any specific PMD.371 """,372 priority=4,373 requirement=simple_requirement(374 min_core_count=8,375 network_interface=Sriov(),376 unsupported_features=[Gpu, Infiniband],377 supported_features=[IsolatedResource],378 ),379 )380 def verify_dpdk_ring_ping(381 self, node: Node, log: Logger, variables: Dict[str, Any]382 ) -> None:383 # ring ping requires dpdk source to run, since default is package_manager384 # we special case here to use to dpdk-stable as the default.385 self._force_dpdk_default_source(variables)386 # setup and unwrap the resources for this test387 test_kit = initialize_node_resources(node, log, variables, "failsafe")388 testpmd = test_kit.testpmd389 # grab a nic and run testpmd390 git = node.tools[Git]391 make = node.tools[Make]392 echo = node.tools[Echo]393 rping_build_env_vars = [394 "export RTE_TARGET=build",395 f"export RTE_SDK={str(testpmd.dpdk_path)}",396 ]397 echo.write_to_file(398 ";".join(rping_build_env_vars), node.get_pure_path("~/.bashrc"), append=True399 )400 git_path = git.clone(401 "https://github.com/shemminger/dpdk-ring-ping.git", cwd=node.working_path402 )403 make.run(404 shell=True,405 cwd=git_path,406 expected_exit_code=0,407 expected_exit_code_failure_message="make could not build rping project.",408 ).assert_exit_code()409 # run ringping for 30 seconds410 runcmd = "./build/rping -c 0x03 -n 2 --no-pci --no-huge -- -d 5 -t 10"411 result = node.execute(412 runcmd,413 shell=True,414 cwd=git_path,415 expected_exit_code=0,416 expected_exit_code_failure_message="rping program failed to run correctly.",417 )418 result.assert_exit_code()419 # get the max latency for 99.999 percent of enqueued 'packets'.420 result_regex = self._ring_ping_percentile_regex.search(result.stdout)421 if result_regex and len(result_regex.groups()) == 1:422 max_ping_measured = int(result_regex.group(1))423 assert_that(max_ping_measured).described_as(424 (425 f"RingPing measured {max_ping_measured} as maximum ping latency,"426 f" maximum should be less than {MAX_RING_PING_LIMIT_NS}"427 )428 ).is_less_than(MAX_RING_PING_LIMIT_NS)429 else:430 fail(431 (432 "Could not get latency data from rping result. "433 f"Search was for 'percentile 99.999 = ([0-9]+)'\n{result.stdout}\n"434 )435 )436 @TestCaseMetadata(437 description="""438 Tests a basic sender/receiver setup for default failsafe driver setup.439 Sender sends the packets, receiver receives them.440 We check both to make sure the received traffic is within the expected441 order-of-magnitude.442 """,443 priority=2,444 requirement=simple_requirement(445 min_core_count=8,446 min_nic_count=2,447 network_interface=Sriov(),448 min_count=2,449 unsupported_features=[Gpu, Infiniband],450 supported_features=[IsolatedResource],451 ),452 )453 def verify_dpdk_send_receive_multi_txrx_queue_failsafe(454 self, environment: Environment, log: Logger, variables: Dict[str, Any]455 ) -> None:456 try:457 verify_dpdk_send_receive_multi_txrx_queue(458 environment, log, variables, "failsafe"459 )460 except UnsupportedPackageVersionException as err:461 raise SkippedException(err)462 @TestCaseMetadata(463 description="""464 Tests a basic sender/receiver setup for default failsafe driver setup.465 Sender sends the packets, receiver receives them.466 We check both to make sure the received traffic is within the expected467 order-of-magnitude.468 """,469 priority=2,470 requirement=simple_requirement(471 min_core_count=8,472 min_nic_count=2,473 network_interface=Sriov(),474 min_count=2,475 unsupported_features=[Gpu, Infiniband],476 supported_features=[IsolatedResource],477 ),478 )479 def verify_dpdk_send_receive_multi_txrx_queue_netvsc(480 self, environment: Environment, log: Logger, variables: Dict[str, Any]481 ) -> None:482 try:483 verify_dpdk_send_receive_multi_txrx_queue(484 environment, log, variables, "netvsc"485 )486 except UnsupportedPackageVersionException as err:487 raise SkippedException(err)488 @TestCaseMetadata(489 description="""490 Tests a basic sender/receiver setup for default failsafe driver setup.491 Sender sends the packets, receiver receives them.492 We check both to make sure the received traffic is within the expected493 order-of-magnitude.494 """,495 priority=2,496 requirement=simple_requirement(497 min_core_count=8,498 min_nic_count=2,499 network_interface=Sriov(),500 min_count=2,501 unsupported_features=[Gpu, Infiniband],502 supported_features=[IsolatedResource],503 ),504 )505 def verify_dpdk_send_receive_failsafe(506 self, environment: Environment, log: Logger, variables: Dict[str, Any]507 ) -> None:508 try:509 verify_dpdk_send_receive(environment, log, variables, "failsafe")510 except UnsupportedPackageVersionException as err:511 raise SkippedException(err)512 @TestCaseMetadata(513 description="""514 Tests a basic sender/receiver setup for direct netvsc pmd setup.515 Sender sends the packets, receiver receives them.516 We check both to make sure the received traffic is within the expected517 order-of-magnitude.518 """,519 priority=2,520 requirement=simple_requirement(521 min_core_count=8,522 min_nic_count=2,523 network_interface=Sriov(),524 min_count=2,525 unsupported_features=[Gpu, Infiniband],526 supported_features=[IsolatedResource],527 ),528 )529 def verify_dpdk_send_receive_netvsc(530 self, environment: Environment, log: Logger, variables: Dict[str, Any]531 ) -> None:532 try:533 verify_dpdk_send_receive(environment, log, variables, "netvsc")534 except UnsupportedPackageVersionException as err:535 raise SkippedException(err)536 @TestCaseMetadata(537 description="""538 UIO basic functionality test.539 - Bind interface to uio_hv_generic540 - check that sysfs entry is created541 - unbind542 - check that the driver is unloaded.543 - rebind to original driver544 """,545 priority=2,546 requirement=simple_requirement(547 min_nic_count=2,548 network_interface=Sriov(),549 unsupported_features=[Gpu, Infiniband],550 supported_features=[IsolatedResource],551 ),552 )553 def verify_uio_binding(554 self, node: Node, log: Logger, variables: Dict[str, Any]555 ) -> None:556 lsmod = node.tools[Lsmod]557 modprobe = node.tools[Modprobe]558 nic = node.nics.get_nic_by_index()559 node.nics.get_nic_driver(nic.upper)560 if nic.bound_driver == "hv_netvsc":561 enable_uio_hv_generic_for_nic(node, nic)562 original_driver = nic.driver_sysfs_path563 node.nics.unbind(nic)564 node.nics.bind(nic, UIO_HV_GENERIC_SYSFS_PATH)565 node.execute(566 "test -e /dev/uio0",567 shell=True,568 expected_exit_code=0,569 expected_exit_code_failure_message=(570 "/dev/uio0 did not exist after driver bind"571 ),572 )...
performance.py
Source:performance.py
...219 server = environment.nodes[0]220 client = environment.nodes[1]221 server_xdpdump = get_xdpdump(server)222 server_xdpdump.make_by_build_type(BuildType.PERF)223 server_nic = server.nics.get_nic_by_index(1)224 # the latency is not stable in cloud environment, test multiple times225 # and aggregate the result.226 tested_runs = 5227 latency_without_xdp: List[float] = []228 latency_with_xdp: List[float] = []229 for _ in range(tested_runs):230 latency_without_xdp.append(231 self._send_packets_for_latency(server, client, test_result, tool_type)232 )233 try:234 server_xdpdump.start_async(nic_name=server_nic.upper, timeout=0)235 latency_with_xdp.append(236 self._send_packets_for_latency(237 server, client, test_result, tool_type238 )239 )240 finally:241 server_kill = server.tools[Kill]242 server_kill.by_name("xdpdump")243 final_without_xdp = calculate_middle_average(latency_without_xdp)244 final_with_xdp = calculate_middle_average(latency_with_xdp)245 log.info(246 f"Latency with XDP: {final_with_xdp}us, "247 f"without XDP: {final_without_xdp}us. "248 f"Raw with XDP: {latency_with_xdp}, "249 f"without XDP: {latency_without_xdp}. "250 )251 assert_that(final_with_xdp / final_without_xdp).described_as(252 f"The XDP latency: {final_with_xdp}us shouldn't slower 40% than "253 f"the normal latency: {final_without_xdp}us."254 ).is_less_than_or_equal_to(_default_latency_threshold)255 def _send_packets_for_latency(256 self,257 server: Node,258 client: Node,259 test_result: TestResult,260 tool_type: Type[Tool],261 ) -> float:262 assert_that(tool_type).described_as("the tool is not supported").is_in(263 Lagscope, Ntttcp264 )265 # mypy doesn't work with generic type method "get". So use a266 # intermidiate variable tools to store it.267 tools: List[Any] = run_in_parallel(268 [269 partial(server.tools.get, tool_type),270 partial(client.tools.get, tool_type),271 ]272 )273 server_nic = server.nics.get_nic_by_index(1)274 if tool_type is Lagscope:275 server_lagscope: Lagscope = tools[0]276 client_lagscope: Lagscope = tools[1]277 try:278 run_in_parallel(279 [server_lagscope.set_busy_poll, client_lagscope.set_busy_poll]280 )281 server_lagscope.run_as_server(ip=server_nic.ip_addr)282 result = client_lagscope.run_as_client(server_ip=server_nic.ip_addr)283 lagscope_messages = client_lagscope.create_latency_performance_messages(284 result=result,285 test_case_name=inspect.stack()[2].function,286 test_result=test_result,287 )288 assert lagscope_messages289 assert_that(len(lagscope_messages)).described_as(290 "at least one message is necessary"291 ).is_greater_than(0)292 return float(293 sum(x.average_latency_us for x in lagscope_messages)294 / len(lagscope_messages)295 )296 finally:297 for lagscope in [server_lagscope, client_lagscope]:298 lagscope.kill()299 lagscope.restore_busy_poll()300 else:301 ntttcp_messages = perf_ntttcp(302 test_result=test_result,303 udp_mode=False,304 connections=[1],305 test_case_name=inspect.stack()[2].function,306 )307 return float(308 # The type is always TCP message, because the above line set udp309 # to False. Ignore type error here, because UDP message has no310 # latency metrics.311 sum(x.latency_us for x in ntttcp_messages) # type: ignore312 / len(ntttcp_messages)313 )314 def _execute_rx_drop_test(315 self,316 environment: Environment,317 is_multi_thread: bool,318 log: Logger,319 threshold: float = _default_received_threshold,320 ) -> None:321 sender = environment.nodes[0]322 receiver = environment.nodes[1]323 # install pktgen on sender, and xdpdump on receiver.324 try:325 tools: List[Any] = run_in_parallel(326 [partial(sender.tools.get, Pktgen), partial(get_xdpdump, receiver)]327 )328 except UnsupportedKernelException as identifier:329 raise SkippedException(identifier)330 # type annotations331 pktgen: Pktgen = tools[0]332 xdpdump: XdpDump = tools[1]333 sender_nic = sender.nics.get_nic_by_index(1)334 receiver_nic = receiver.nics.get_nic_by_index(1)335 xdpdump.make_by_build_type(build_type=BuildType.PERF_DROP)336 original_dropped_count = get_dropped_count(337 node=receiver,338 nic=receiver_nic,339 previous_count=0,340 log=log,341 )342 try:343 xdpdump.start_async(nic_name=receiver_nic.upper, timeout=0)344 pktgen_result = self._send_packets(345 is_multi_thread, sender, pktgen, sender_nic, receiver_nic346 )347 self._wait_packets_proceeded(348 log, receiver, receiver_nic, original_dropped_count349 )350 finally:351 receiver_kill = receiver.tools[Kill]352 receiver_kill.by_name("xdpdump")353 # capture stats to calculate delta354 dropped_count = get_dropped_count(355 node=receiver,356 nic=receiver_nic,357 previous_count=original_dropped_count,358 log=log,359 )360 log.debug(361 f"sender pktgen result: {pktgen_result}, "362 f"dropped on receiver: {dropped_count}"363 )364 self._check_threshold(365 pktgen_result.sent_count, dropped_count, threshold, "dropped packets"366 )367 assert_that(pktgen_result.pps).described_as(368 "pps must be greater than 1M."369 ).is_greater_than_or_equal_to(1000000)370 def _execute_tx_forward_test(371 self,372 environment: Environment,373 log: Logger,374 is_multi_threads: bool = False,375 threshold: float = _default_received_threshold,376 ) -> None:377 sender = environment.nodes[0]378 forwarder = environment.nodes[1]379 receiver = environment.nodes[2]380 # install pktgen on sender381 try:382 pktgen = sender.tools[Pktgen]383 except UnsupportedKernelException as identifier:384 raise SkippedException(identifier)385 # install xdp dump on forwarder and receiver386 forwarder_xdpdump, receiver_xdpdump = run_in_parallel(387 [388 partial(get_xdpdump, forwarder),389 partial(get_xdpdump, receiver),390 ],391 log=log,392 )393 sender_nic = sender.nics.get_nic_by_index(1)394 forwarder_nic = forwarder.nics.get_nic_by_index(1)395 receiver_nic = receiver.nics.get_nic_by_index(1)396 run_in_parallel(397 [398 partial(399 forwarder_xdpdump.make_on_forwarder_role,400 forwarder_nic=forwarder_nic,401 receiver_nic=receiver_nic,402 ),403 partial(404 receiver_xdpdump.make_by_build_type, build_type=BuildType.PERF_DROP405 ),406 ]407 )408 # capture existing stats to calculate delta409 original_forwarded_count = get_forwarded_count(...
functional.py
Source:functional.py
...105 )106 def verify_xdp_multiple_nics(self, node: Node) -> None:107 xdpdump = get_xdpdump(node)108 for i in range(3):109 nic_info = node.nics.get_nic_by_index(i)110 output = xdpdump.test_by_ping(nic_name=nic_info.upper)111 self._verify_xdpdump_result(output)112 @TestCaseMetadata(113 description="""114 It validates the XDP with action DROP.115 1. start tcpdump with icmp filter.116 2. start xdpdump.117 3. run ping 5 times.118 4. check tcpdump with 5 packets.119 """,120 priority=2,121 requirement=simple_requirement(min_count=2),122 )123 def verify_xdp_action_drop(124 self, environment: Environment, case_name: str, log: Logger125 ) -> None:126 # expect no response from the ping source side.127 captured_node = environment.nodes[0]128 default_nic = captured_node.nics.get_nic_by_index(0)129 original_count = get_dropped_count(130 node=captured_node,131 nic=default_nic,132 previous_count=0,133 log=log,134 )135 self._test_with_build_type(136 environment=environment,137 captured_node=captured_node,138 case_name=case_name,139 build_type=BuildType.ACTION_DROP,140 expected_tcp_packet_count=5,141 failure_message="DROP mode must have and only have sent packets "142 "at the send side.",143 expected_ping_success=False,144 )145 drop_count = get_dropped_count(146 node=captured_node,147 nic=default_nic,148 previous_count=original_count,149 log=log,150 )151 assert_that(drop_count).described_as(152 "the source side should have 5 dropped packets."153 ).is_equal_to(5)154 # expect no packet from the ping target side155 captured_node = environment.nodes[1]156 default_nic = captured_node.nics.get_nic_by_index(0)157 original_count = get_dropped_count(158 node=captured_node,159 nic=default_nic,160 previous_count=0,161 log=log,162 )163 self._test_with_build_type(164 environment=environment,165 captured_node=captured_node,166 case_name=case_name,167 build_type=BuildType.ACTION_DROP,168 expected_tcp_packet_count=0,169 failure_message="DROP mode must have no packet at target side.",170 expected_ping_success=False,171 )172 drop_count = get_dropped_count(173 node=captured_node,174 nic=default_nic,175 previous_count=original_count,176 log=log,177 )178 assert_that(drop_count).described_as(179 "the target side should have 5 dropped packets."180 ).is_equal_to(5)181 @TestCaseMetadata(182 description="""183 It validates the XDP with action TX.184 1. start tcpdump with icmp filter.185 2. start xdpdump.186 3. run ping 5 times.187 4. check tcpdump with 5 packets, because the icmp is replied in xdp188 level.189 """,190 priority=2,191 requirement=simple_requirement(min_count=2),192 )193 def verify_xdp_action_tx(self, environment: Environment, case_name: str) -> None:194 # tx has response packet from ping source side195 self._test_with_build_type(196 environment=environment,197 captured_node=environment.nodes[0],198 case_name=case_name,199 build_type=BuildType.ACTION_TX,200 expected_tcp_packet_count=10,201 failure_message="TX mode should receive response from ping source side.",202 expected_ping_success=True,203 )204 # tx has no packet from target side205 self._test_with_build_type(206 environment=environment,207 captured_node=environment.nodes[1],208 case_name=case_name,209 build_type=BuildType.ACTION_TX,210 expected_tcp_packet_count=0,211 failure_message="TX mode shouldn't capture any packets "212 "from the ping target node in tcp dump.",213 expected_ping_success=True,214 )215 @TestCaseMetadata(216 description="""217 It validates the XDP with action ABORT.218 1. start tcpdump with icmp filter.219 2. start xdpdump.220 3. run ping 5 times.221 4. check tcpdump with 5 packets.222 """,223 priority=3,224 requirement=simple_requirement(min_count=2),225 )226 def verify_xdp_action_aborted(227 self, environment: Environment, case_name: str228 ) -> None:229 # expect no response from the ping source side.230 self._test_with_build_type(231 environment=environment,232 captured_node=environment.nodes[0],233 case_name=case_name,234 build_type=BuildType.ACTION_ABORTED,235 expected_tcp_packet_count=5,236 failure_message="DROP mode must have and only have sent packets "237 "at the send side.",238 expected_ping_success=False,239 )240 # expect no packet from the ping target side241 self._test_with_build_type(242 environment=environment,243 captured_node=environment.nodes[1],244 case_name=case_name,245 build_type=BuildType.ACTION_ABORTED,246 expected_tcp_packet_count=0,247 failure_message="ABORT mode must have no packet at target side.",248 expected_ping_success=False,249 )250 @TestCaseMetadata(251 description="""252 It validates XDP with different MTU253 1. Check current image supports XDP or not.254 2. change MTU to 1500, 2000, 3506 to test XDP.255 """,256 priority=3,257 requirement=simple_requirement(min_count=2),258 )259 def verify_xdp_with_different_mtu(self, environment: Environment) -> None:260 xdp_node = environment.nodes[0]261 remote_node = environment.nodes[1]262 xdpdump = get_xdpdump(xdp_node)263 remote_address = self._get_ping_address(environment)264 tested_mtu: List[int] = [1500, 2000, 3506]265 xdp_node_nic_name = xdp_node.nics.default_nic266 remote_nic_name = remote_node.nics.default_nic267 xdp_node_ip = xdp_node.tools[Ip]268 remote_ip = remote_node.tools[Ip]269 original_xdp_node_mtu = xdp_node_ip.get_mtu(xdp_node_nic_name)270 original_remote_mtu = remote_ip.get_mtu(remote_nic_name)271 try:272 for mtu in tested_mtu:273 xdp_node_ip.set_mtu(xdp_node_nic_name, mtu)274 remote_ip.set_mtu(remote_nic_name, mtu)275 # tested mtu equals (ping mtu - IP headr (20) - ICMP header (8))276 xdpdump.test_by_ping(277 xdp_node_nic_name,278 remote_address=remote_address,279 ping_package_size=mtu - 28,280 )281 finally:282 xdp_node_ip.set_mtu(xdp_node_nic_name, original_xdp_node_mtu)283 remote_ip.set_mtu(remote_nic_name, original_remote_mtu)284 @TestCaseMetadata(285 description="""286 It validates the XDP works with VF hot add/remove from API.287 1. Run xdp dump to drop and count packets.288 2. Remove VF from API.289 3. Run xdp dump to drop and count packets.290 5. Add VF back from API.291 6. Run xdp dump to drop and count packets.292 """,293 priority=3,294 requirement=simple_requirement(network_interface=Sriov()),295 )296 def verify_xdp_remove_add_vf(self, node: Node, log: Logger) -> None:297 xdpdump = get_xdpdump(node)298 nic_name = node.nics.default_nic299 nic_feature = node.features[NetworkInterface]300 default_nic = node.nics.get_nic_by_index(0)301 try:302 # validate xdp works with VF303 original_count = get_dropped_count(304 node=node,305 nic=default_nic,306 previous_count=0,307 log=log,308 )309 output = xdpdump.test_by_ping(310 nic_name=nic_name,311 build_type=BuildType.ACTION_DROP,312 expected_ping_success=False,313 remote_address=INTERNET_PING_ADDRESS,314 )315 self._verify_xdpdump_result(output)316 drop_count = get_dropped_count(317 node=node,318 nic=default_nic,319 previous_count=original_count,320 log=log,321 )322 assert_that(drop_count).described_as(323 "the source side should have 5 dropped packets when VF is enabled."324 ).is_equal_to(5)325 # disable VF326 nic_feature.switch_sriov(False)327 default_nic = node.nics.get_nic_by_index(0)328 # validate xdp works with synthetic329 original_count = get_dropped_count(330 node=node,331 nic=default_nic,332 previous_count=0,333 log=log,334 )335 output = xdpdump.test_by_ping(336 nic_name=nic_name,337 build_type=BuildType.ACTION_DROP,338 expected_ping_success=False,339 remote_address=INTERNET_PING_ADDRESS,340 )341 self._verify_xdpdump_result(output)342 drop_count = get_dropped_count(343 node=node,344 nic=default_nic,345 previous_count=original_count,346 log=log,347 )348 assert_that(drop_count).described_as(349 "There should be 5 dropped packets when VF is disabled."350 ).is_equal_to(5)351 # enable VF and validate xdp works with VF again352 nic_feature.switch_sriov(True)353 default_nic = node.nics.get_nic_by_index(0)354 original_count = get_dropped_count(355 node=node,356 nic=default_nic,357 previous_count=0,358 log=log,359 )360 output = xdpdump.test_by_ping(361 nic_name=nic_name,362 build_type=BuildType.ACTION_DROP,363 expected_ping_success=False,364 remote_address=INTERNET_PING_ADDRESS,365 )366 self._verify_xdpdump_result(output)367 drop_count = get_dropped_count(...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!