From 6df2c90d859489de8ce71a681d05a5e773b7d101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 22 May 2024 14:22:43 +0200 Subject: [PATCH] test: Refactor routing tests Make more in parallel and restructure code --- test/case/ietf_routing/ospf_basic.py | 7 +- test/case/ietf_routing/ospf_multiarea.py | 82 +++++++++---------- .../ietf_routing/ospf_unnumbered_interface.py | 29 +++---- test/case/ietf_routing/static_routing.py | 19 ++--- 4 files changed, 64 insertions(+), 73 deletions(-) diff --git a/test/case/ietf_routing/ospf_basic.py b/test/case/ietf_routing/ospf_basic.py index 7b1af1b7..b6d8bb55 100755 --- a/test/case/ietf_routing/ospf_basic.py +++ b/test/case/ietf_routing/ospf_basic.py @@ -2,7 +2,8 @@ import infamy import infamy.route as route -from infamy.util import until +from infamy.util import until, parallel + def config_target1(target, data, link): target.put_config_dict("ietf-interfaces", { "interfaces": { @@ -161,8 +162,8 @@ with infamy.Test() as test: _, target2_to_target1 = env.ltop.xlate("target2", "target1") _, target1_to_target2 = env.ltop.xlate("target1", "target2") - config_target1(target1, target1data, target1_to_target2) - config_target2(target2, target2_to_target1) + parallel(config_target1(target1, target1data, target1_to_target2), + config_target2(target2, target2_to_target1)) with test.step("Wait for OSPF routes"): print("Waiting for OSPF routes..") until(lambda: route.ipv4_route_exist(target1, "192.168.200.1/32", source_protocol = "infix-routing:ospf"), attempts=200) diff --git a/test/case/ietf_routing/ospf_multiarea.py b/test/case/ietf_routing/ospf_multiarea.py index 6c9853b9..9dc7eb2c 100755 --- a/test/case/ietf_routing/ospf_multiarea.py +++ b/test/case/ietf_routing/ospf_multiarea.py @@ -28,7 +28,7 @@ import infamy import infamy.route as route -from infamy.util import until +from infamy.util import until, parallel def config_target1(target, ring1, ring2, cross, link): target.put_config_dict("ietf-interfaces", { "interfaces": { @@ -564,11 +564,10 @@ with infamy.Test() as test: _, dut2cross = env.ltop.xlate("dut2", "cross") _, dut3cross = env.ltop.xlate("dut3", "cross") _, dut4cross = env.ltop.xlate("dut4", "cross") - - config_target1(dut1, dut1ring1, dut1ring2, dut1cross, dut1data) - config_target2(dut2, dut2ring1, dut2ring2, dut2cross, dut2data) - config_target3(dut3, dut3ring1, dut3ring2, dut3cross, dut3data) - config_target4(dut4, dut4ring1, dut4ring2, dut4cross, dut4data) + parallel(config_target1(dut1, dut1ring1, dut1ring2, dut1cross, dut1data), + config_target2(dut2, dut2ring1, dut2ring2, dut2cross, dut2data), + config_target3(dut3, dut3ring1, dut3ring2, dut3cross, dut3data), + config_target4(dut4, dut4ring1, dut4ring2, dut4cross, dut4data)) with test.step("Wait for neighbors"): print("Waiting for neighbors to peer") until(lambda: route.ospf_get_neighbor(dut1, "0.0.0.0", dut1ring1, "10.0.0.2"), attempts=200) @@ -577,58 +576,59 @@ with infamy.Test() as test: until(lambda: route.ospf_get_neighbor(dut2, "0.0.0.0", dut2ring2, "10.0.0.1"), attempts=200) until(lambda: route.ospf_get_neighbor(dut2, "0.0.0.2", dut2cross, "10.0.0.4"), attempts=200) - with test.step("Wait for routes"): + with test.step("Wait for routes from OSPF"): print("Waiting for routes from OSPF") until(lambda: route.ipv4_route_exist(dut1, "10.0.0.2/32", nexthop="10.0.12.2", source_protocol = "infix-routing:ospf"), attempts=200) until(lambda: route.ipv4_route_exist(dut1, "10.0.0.3/32", nexthop="10.0.13.2", source_protocol = "infix-routing:ospf"), attempts=200) until(lambda: route.ipv4_route_exist(dut1, "10.0.0.4/32", nexthop="10.0.41.1", source_protocol = "infix-routing:ospf"), attempts=200) until(lambda: route.ipv4_route_exist(dut1, "192.168.4.0/24", nexthop="10.0.41.1", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut1, "10.0.24.0/30", nexthop="10.0.41.1", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut2, "10.0.0.1/32", nexthop="10.0.23.2", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut2, "10.0.0.3/32", nexthop="10.0.23.2", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut2, "10.0.0.4/32", nexthop="10.0.24.2", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut3, "0.0.0.0/0", nexthop="10.0.23.1", source_protocol = "infix-routing:ospf"), attempts=200) until(lambda: route.ipv4_route_exist(dut4, "10.0.0.3/32", nexthop="10.0.41.2", source_protocol = "infix-routing:ospf"), attempts=200) + until(lambda: route.ipv4_route_exist(dut2, "10.0.13.0/30", nexthop="10.0.23.2", source_protocol = "infix-routing:ospf"), attempts=200) with test.step("Verify NSSA area"): # Should be only default route out of the area. - until(lambda: route.ipv4_route_exist(dut4, "11.0.8.0/24"), attempts=200) - until(lambda: route.ipv4_route_exist(dut4, "11.0.9.0/24"), attempts=200) - until(lambda: route.ipv4_route_exist(dut4, "11.0.10.0/24"), attempts=200) - until(lambda: route.ipv4_route_exist(dut4, "11.0.11.0/24"), attempts=200) - until(lambda: route.ipv4_route_exist(dut4, "11.0.12.0/24"), attempts=200) - until(lambda: route.ipv4_route_exist(dut3, "0.0.0.0/0"), attempts=200) - until(lambda: route.ipv4_route_exist(dut3, "10.0.12.0/30") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "10.0.12.0/30") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.8.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.9.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.10.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.11.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.12.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.13.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.14.0/24") == False, attempts=5) - until(lambda: route.ipv4_route_exist(dut3, "11.0.15.0/24") == False, attempts=5) - assert(route.ospf_is_area_nssa(dut3, "0.0.0.1")) + parallel(until(lambda: route.ipv4_route_exist(dut4, "11.0.8.0/24"), attempts=200), + until(lambda: route.ipv4_route_exist(dut4, "11.0.9.0/24"), attempts=200), + until(lambda: route.ipv4_route_exist(dut4, "11.0.10.0/24"), attempts=200), + until(lambda: route.ipv4_route_exist(dut4, "11.0.11.0/24"), attempts=200), + until(lambda: route.ipv4_route_exist(dut4, "11.0.12.0/24"), attempts=200), + until(lambda: route.ipv4_route_exist(dut3, "0.0.0.0/0"), attempts=200), + until(lambda: route.ipv4_route_exist(dut3, "10.0.12.0/30") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "10.0.12.0/30") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.8.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.9.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.10.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.11.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.12.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.13.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.14.0/24") == False, attempts=5), + until(lambda: route.ipv4_route_exist(dut3, "11.0.15.0/24") == False, attempts=5)) + assert(route.ospf_is_area_nssa(dut3, "0.0.0.1")) - _, hport0 = env.ltop.xlate("host", "data3") - with infamy.IsolatedMacVlan(hport0) as ns0: + _, hport0 = env.ltop.xlate("host", "data3") + with infamy.IsolatedMacVlan(hport0) as ns0: + with test.step("Testing connectivitiy through NSSA area"): ns0.addip("192.168.3.2") ns0.addroute("0.0.0.0/0", "192.168.3.1") - trace=ns0.traceroute("10.0.0.3") ns0.must_reach("11.0.8.1") - - with test.step("Verify correct hops"): - _, hport0 = env.ltop.xlate("host", "data4") - with infamy.IsolatedMacVlan(hport0) as ns0: - ns0.addip("192.168.4.2") - ns0.addroute("0.0.0.0/0", "192.168.4.1") + _, hport0 = env.ltop.xlate("host", "data4") + with infamy.IsolatedMacVlan(hport0) as ns0: + ns0.addip("192.168.4.2") + ns0.addroute("0.0.0.0/0", "192.168.4.1") + with test.step("Verify correct hops"): trace=ns0.traceroute("10.0.0.3") assert(len(trace) == 3) assert(trace[1][1] == "10.0.41.2") assert(trace[2][1] == "10.0.0.3") - with test.step("Disable link between R1 and R4, and verify correct hops"): - disable_link(dut1, dut1ring2) # Here we should test with link breakers, to test BFD recouppling, for now disable the link - until(lambda: route.ipv4_route_exist(dut4, "10.0.0.3/32", nexthop="10.0.24.1", source_protocol = "infix-routing:ospf"), attempts=100) - until(lambda: route.ipv4_route_exist(dut4, "10.0.0.3/32", nexthop="10.0.41.2") == False, attempts = 10) - _, hport0 = env.ltop.xlate("host", "data4") - with infamy.IsolatedMacVlan(hport0) as ns0: - ns0.addip("192.168.4.2") - ns0.addroute("0.0.0.0/0", "192.168.4.1") + with test.step("Disable link between R1 and R4, and verify correct hops"): + disable_link(dut1, dut1ring2) # Here we should test with link breakers, to test BFD recouppling, for now disable the link + until(lambda: route.ipv4_route_exist(dut4, "10.0.0.3/32", nexthop="10.0.24.1", source_protocol = "infix-routing:ospf"), attempts=100) + until(lambda: route.ipv4_route_exist(dut4, "10.0.0.3/32", nexthop="10.0.41.2") == False, attempts = 10) trace=ns0.traceroute("10.0.0.3") assert(len(trace) == 3) assert(trace[1][1] == "10.0.24.1") diff --git a/test/case/ietf_routing/ospf_unnumbered_interface.py b/test/case/ietf_routing/ospf_unnumbered_interface.py index 50e524da..2a615961 100755 --- a/test/case/ietf_routing/ospf_unnumbered_interface.py +++ b/test/case/ietf_routing/ospf_unnumbered_interface.py @@ -3,7 +3,7 @@ import infamy import time import infamy.route as route -from infamy.util import until +from infamy.util import until, parallel # This test tests passive interfaces and unnumbered interfaces. @@ -166,8 +166,8 @@ with infamy.Test() as test: _, target2_to_target1 = env.ltop.xlate("target2", "target1") _, target1_to_target2 = env.ltop.xlate("target1", "target2") - config_target1(target1, target1data, target1_to_target2) - config_target2(target2, target2_to_target1) + parallel(lambda: config_target1(target1, target1data, target1_to_target2), + lambda: config_target2(target2, target2_to_target1)) with test.step("Wait for OSPF routes"): print("Waiting for OSPF routes..") until(lambda: route.ipv4_route_exist(target1, "192.168.200.1/32", source_protocol = "infix-routing:ospf"), attempts=200) @@ -178,22 +178,17 @@ with infamy.Test() as test: assert(route.ospf_get_interface_type(target1, "0.0.0.0", target1_to_target2) == "point-to-point") assert(route.ospf_get_interface_type(target2, "0.0.0.0", target2_to_target1) == "point-to-point") - with test.step("Test passive interface"): - print("Verify that no hello packets are recieved from passive interfaces") - assert(route.ospf_get_interface_passive(target1, "0.0.0.0", target1data)) _, hport0 = env.ltop.xlate("host", "data1") - with infamy.IsolatedMacVlan(hport0) as ns0: - ns0.addip("192.168.10.2") - snif = infamy.Sniffer(ns0, "ip proto 89") - with snif: - time.sleep(15) # default hello time 10s - assert(snif.packets() == "") + with infamy.IsolatedMacVlan(hport0) as ns0: + ns0.addip("192.168.10.2") + ns0.addroute("192.168.200.1/32", "192.168.10.1") - with test.step("Test connectivity"): - _, hport0 = env.ltop.xlate("host", "data1") - with infamy.IsolatedMacVlan(hport0) as ns0: - ns0.addip("192.168.10.2") - ns0.addroute("192.168.200.1/32", "192.168.10.1") + with test.step("Test passive interface"): + assert(route.ospf_get_interface_passive(target1, "0.0.0.0", target1data)) + print("Verify that no hello packets are recieved from passive interfaces") + ns0.must_not_receive("ip proto 89", timeout=15) # Default hello time 10s + + with test.step("Test connectivity"): ns0.must_reach("192.168.200.1") test.succeed() diff --git a/test/case/ietf_routing/static_routing.py b/test/case/ietf_routing/static_routing.py index 54726772..37e5de4d 100755 --- a/test/case/ietf_routing/static_routing.py +++ b/test/case/ietf_routing/static_routing.py @@ -21,7 +21,7 @@ import infamy import time import infamy.iface as iface import infamy.route as route -from infamy.util import until +from infamy.util import until, parallel def config_target1(target, data, link): target.put_config_dict("ietf-interfaces", { @@ -200,14 +200,9 @@ with infamy.Test() as test: _, target2_to_target1 = env.ltop.xlate("target2", "target1") _, target1_to_target2 = env.ltop.xlate("target1", "target2") - config_target1(target1, target1data, target1_to_target2) - config_target2(target2, target2_to_target1) + parallel(config_target1(target1, target1data, target1_to_target2), + config_target2(target2, target2_to_target1)) - with test.step("Wait for links"): - until(lambda: iface.get_oper_up(target1, target1data)) - until(lambda: iface.get_oper_up(target1, target1data)) - until(lambda: iface.get_oper_up(target1, target1_to_target2)) - until(lambda: iface.get_oper_up(target2, target2_to_target1)) with test.step("Wait for routes"): until(lambda: route.ipv4_route_exist(target1, "192.168.200.1/32")) until(lambda: route.ipv4_route_exist(target2, "0.0.0.0/0")) @@ -230,11 +225,11 @@ with infamy.Test() as test: with test.step("Remove static routes on dut1"): config_remove_routes(target1); - until(lambda: route.ipv4_route_exist(target1, "192.168.200.1/32") == False) - until(lambda: route.ipv6_route_exist(target1, "2001:db8:3c4d:200::1/128") == False) + parallel(until(lambda: route.ipv4_route_exist(target1, "192.168.200.1/32") == False), + until(lambda: route.ipv6_route_exist(target1, "2001:db8:3c4d:200::1/128") == False)) with test.step("Verify that dut2 is no longer reachable"): - infamy.parallel(lambda: ns0.must_not_reach("192.168.200.1"), - lambda: ns0.must_not_reach("2001:db8:3c4d:200::1")) + infamy.parallel(ns0.must_not_reach("192.168.200.1"), + ns0.must_not_reach("2001:db8:3c4d:200::1")) test.succeed()