From a8cd51e43be9bb37658908a6ed1ec062c3c9c8d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 09:37:36 +0200 Subject: [PATCH 1/7] Bump FRR to 10.5.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit isisd: Reject duplicate SRv6 SID Structure Sub-Sub-TLV (backport #21656) by @mergify[bot] in #21723 isisd: validate ASLA sub-sub-TLV length ... (10.6 backport of 21542) (backport #21721) by @mergify[bot] in #21738 pimd: cap PIM Hello secondary address list parsing (backport #21707) by @mergify[bot] in #21737 pimd: reject truncated IP datagrams before IGMP/mtrace handling (backport #21705) by @mergify[bot] in #21714 nhrpd: improve validation in packet parsing (backport #21686) by @mergify[bot] in #21762 pimd: harden BSM group/RP parsing paths (backport #21734) by @mergify[bot] in #21767 bgpd: Move rpki strict check to bgp_accept() (backport) by @ton31337 in #21331 pimd: Provide better ordering for calling pim_upstream_use_rpt (backport #21764) by @mergify[bot] in #21772 bgpd: Add some defences for AS4/ENCAP handling (backport #21777) by @ton31337 in #21791 bgpd: Fix EVPN shutdown memory leak (backport #21511, #21698) by @ton31337 in #21806 bgpd: fix EVPN VRF auto RT deletion collision (backport #21808) by @mergify[bot] in #21836 bfdd: avoid close(-1) in bfd_dplane_finish_late (backport #21841) by @mergify[bot] in #21849 zebra: tear down old L3VNI before adding new one on VNI value change (backport #21757) by @mergify[bot] in #21857 pimd: validate PIM LAN sources and cap neighbors (backport #21747) by @mergify[bot] in #21854 bgpd: Allow no network .... form for safi = EVPN or MPLS_VPN (backport #21860) by @ton31337 in #21874 bgpd: Skip route clearing for peers that were never established (backport #21867) by @mergify[bot] in #21880 yang: allow match-metric value of zero (backport #21888) by @mergify[bot] in #21891 bgpd: Fix srv6 type parsing and EVPN type-5 NLRI prefix length parsing for IPv4 (backport #21345) by @mjstapp in #21900 pimd: MLAG: skip pim_register_join on non-DR (backport #21920) by @mergify[bot] in #21934 lib: add missing hook_unregister_arg in mgmt_be_client_destroy (backport #21940) by @mergify[bot] in #21945 Fix event bugs in ldpd/lib and fix bgp_bmp misshandling of memory that leads to a crash (backport #21952) by @mergify[bot] in #21955 pimd: Fix crash when up->channel_oil is NULL (backport #21961) by @mergify[bot] in #21964 bgpd: cancel LLGR stale timer on peer AF delete (backport #21947) by @mergify[bot] in #21969 bgpd: cancel BFD strict hold timer on peer delete (backport #21926) by @mergify[bot] in #21976 ospfd: remove unnecessary space (backport #21979) by @mergify[bot] in #21994 bgpd: BGPd crash due to multiple bnc entry linked to same peer. (backport #21962) by @mergify[bot] in #21988 zebra: fix neighbor entries ns_id (backport #22034) by @mergify[bot] in #22073 bgpd: Fix use-after-free for ORF case (backport #22080) by @mergify[bot] in #22088 bgpd: Fix infinite loop in MRT route dump for oversized paths (backport #22082) by @mergify[bot] in #22107 bgpd: Skip route-map LPM optimisation for AF_FLOWSPEC (backport #22083) by @mergify[bot] in #22099 lib, zebra: bound SRv6 locator name length in ZAPI (backport #21868) by @cscarpitta in #22019 pimd: guard NULL RP lookups in BSM and RP deletion paths (backport #22131) by @mergify[bot] in #22140 pimd: fix mapping agent AutoRP discovery packet size (backport #22121) by @mergify[bot] in #22142 lib: test the right bytes in flowspec prefixes (backport #22138) by @mergify[bot] in #22153 bgpd: remove unneeded sort of communities in rmap delete (backport #22151) by @mergify[bot] in #22155 pimd: fix BSR failover RP not setting i_am_rp locally (backport #22157) by @mergify[bot] in #22164 bgpd: Start BFD hold timer ONLY if hold-time is configured (not zero) (backport #20223) by @mergify[bot] in #22134 bgpd: Set extended flag for NHC attribute when re-encoding (backport #22159) by @mergify[bot] in #22166 bgpd: Avoid cluster list attribute truncation (backport #22081) by @mergify[bot] in #22171 pimd: BSR/C-RP fixes with expanded topotest coverage (backport #22117) by @mergify[bot] in #22181 bgpd: Fixes in comm/lcomm/ecomm str functions (backport #22176) by @mergify[bot] in #22186 ospfd: validate extended prefix TLV before accessing prefix SID (backport #22215) by @mergify[bot] in #22220 lib: bound masklen values, don't assert (backport #22216) by @mergify[bot] in #22223 pimd: fix heap OOB write in BSM fragmenter (backport #22222) by @mergify[bot] in #22226 bgpd: Fix community string truncation for big community sets (backport #22160) by @mergify[bot] in #22246 ospfd: Validate PREFIX_SID subtlv len before accessing (backport #22218) by @mergify[bot] in #22232 bgpd: add LLGR to capability length validation switch (backport #22249) by @mergify[bot] in #22264 bgpd: fix return NULL in bool function ecommunity_node_target_match (backport #22273) by @mergify[bot] in #22281 pimd: fix wrong endian convertion (backport #22244) by @mergify[bot] in #22259 bgpd: fixes for NH and aggregator attribute parsing (backport #22200) by @mjstapp in #22290 tests: Allow bfdd to be part of the unified config world by @donaldsharp in #22329 pimd: use RFC 3973 dm graft retry period for retransmission (backport #22376) by @mergify[bot] in #22391 bgpd: don't advertise LLGR stale routes to non-LLGR peers (backport #22297) by @mergify[bot] in #22402 bgpd: Fix memory leak for EVPN Type-4 and dangling pointer for bgp_debug_rdpfxpath2str() (backport #22210) by @mergify[bot] in #22447 bgpd: Ignore parsing ORF route-refresh messages (backport #22429) by @mergify[bot] in #22457 bgpd: fix strlcat/strlcpy size parameter in NOTIFICATION send path (backport #22279) by @mergify[bot] in #22433 bgpd: fix bmp connect deletion with source-interface (backport #22469) by @mergify[bot] in #22510 bgpd: Do not accept AIGP for OAD peers if not enabled (backport #22519) by @mergify[bot] in #22527 Merge pull request #22423 from rdemsystems/fix/bgp-extended-message-r… by @rdemsystems in #22543 ospf6d: check length before accessing grace LSA TLVs (backport #22539) by @mergify[bot] in #22558 ldpd: check fec elem length before accessing (backport #22537) by @mergify[bot] in #22561 *: fix overflow in comparator functions used by sorted containers (backport #22498) by @mergify[bot] in #22576 bgpd: don't emit "no neighbor X capability link-local" for unnumbered… (backport #22540) by @mergify[bot] in #22666 lib: fix wrong nexthop comparision for SRv6 (backport #22710) by @mergify[bot] in #22715 lib: fix wrong nexthop comparision for SRv6 by @ton31337 in #22761 lib: Fix ZAPI SRv6 nexthop comparison (backport #22772) by @mergify[bot] in #22788 bgpd: Fix crash for no neighbor X path-attribute discard ... (backport #22785) by @mergify[bot] in #22795 lib: Clear seg6local context when deleting seg6local state (backport #22790) by @mergify[bot] in #22801 bgpd: Fix link-bandwidth extended community handling above ~34 Gbps (backport #22681) by @mergify[bot] in #22847 bgpd: fix BAD_COPY_PASTE in bgp_path_info_cmp() (backport #22838) by @mergify[bot] in #22861 bgpd: fix link-bandwidth AS truncation in route-map for extended encoding (backport #22867) by @mergify[bot] in #22870 A couple minor bgpd fixes #22512 by @ton31337 in #22857 zebra: Fix SRv6 source-address config output (backport #22879) by @mergify[bot] in #22904 bgpd: fix RD route_node refcount leak in bgp_safi_node_lookup() (backport #22938) by @mergify[bot] in #22942 tests: Fixup frr_load_config to be correct for 10.5 branch by @donaldsharp in #22876 bgpd: Fix route-map use count for EVPN no advertise (backport #22945) by @mergify[bot] in #22956 bgpd: backport ieee link-bw disable fixes to 10.5 by @mjstapp in #22982 ospf6d: bypass MinLSArrival for self-originated MaxAge LSAs (10.5 backport) by @mjstapp in #23005 tests: edit bgp_evpn_rt5_addpath to pass on 10.5 branch by @mjstapp in #23007 zebra: backport stale ifp cleanup PRs to 10.5 (second try) by @mjstapp in #22974 github: Drop commitlint check (backport #23086) by @mergify[bot] in #23095 bgpd: allow GR-helper stale paths through the evaluate_paths peer-down skip (backport #23067) by @mergify[bot] in #23113 isisd: Fix Router Capability subTLV parsing (backport #22873) by @cscarpitta in #22981 zebra: notify the client when an SRv6 SID allocation fails (backport #23051) by @mergify[bot] in #23130 Changelog: https://github.com/FRRouting/frr/releases/tag/frr-10.5.5 --- buildroot | 2 +- doc/ChangeLog.md | 8 ++++++++ patches/frr/{10.5.4 => 10.5.5}/0001-Libyang4-compat.patch | 0 ...ailed-without-c-23-this-adds-compatibility-layer.patch | 0 ...a-don-t-resolve-nexthop-via-inactive-connected-r.patch | 0 5 files changed, 9 insertions(+), 1 deletion(-) rename patches/frr/{10.5.4 => 10.5.5}/0001-Libyang4-compat.patch (100%) rename patches/frr/{10.5.4 => 10.5.5}/0002-Failed-without-c-23-this-adds-compatibility-layer.patch (100%) rename patches/frr/{10.5.4 => 10.5.5}/0003-zebra-don-t-resolve-nexthop-via-inactive-connected-r.patch (100%) diff --git a/buildroot b/buildroot index 75b8cfffb..01ba698a1 160000 --- a/buildroot +++ b/buildroot @@ -1 +1 @@ -Subproject commit 75b8cfffbfde511aeb0e2650b769fc03b55c9403 +Subproject commit 01ba698a1bc218414912602cd63d33037af3888a diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index bc12e39b3..1111e32c4 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -3,6 +3,13 @@ Change Log All notable changes to the project are documented in this file. +[v26.09.0][UNRELEASED] +------------------------- + +### Changes + +- Upgrade FRR to 10.5.5 + [v26.08.0][] - 2026-09-01 ------------------------- @@ -2271,6 +2278,7 @@ Supported YANG models in addition to those used by sysrepo and netopeer: [buildroot]: https://buildroot.org/ [UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.08.0...HEAD +[v26.09.0]: https://github.com/kernelkit/infix/compare/v26.08.0...v26.09.0 [v26.08.0]: https://github.com/kernelkit/infix/compare/v26.06.0...v26.08.0 [v26.06.0]: https://github.com/kernelkit/infix/compare/v26.05.0...v26.06.0 [v26.05.0]: https://github.com/kernelkit/infix/compare/v26.04.0...v26.05.0 diff --git a/patches/frr/10.5.4/0001-Libyang4-compat.patch b/patches/frr/10.5.5/0001-Libyang4-compat.patch similarity index 100% rename from patches/frr/10.5.4/0001-Libyang4-compat.patch rename to patches/frr/10.5.5/0001-Libyang4-compat.patch diff --git a/patches/frr/10.5.4/0002-Failed-without-c-23-this-adds-compatibility-layer.patch b/patches/frr/10.5.5/0002-Failed-without-c-23-this-adds-compatibility-layer.patch similarity index 100% rename from patches/frr/10.5.4/0002-Failed-without-c-23-this-adds-compatibility-layer.patch rename to patches/frr/10.5.5/0002-Failed-without-c-23-this-adds-compatibility-layer.patch diff --git a/patches/frr/10.5.4/0003-zebra-don-t-resolve-nexthop-via-inactive-connected-r.patch b/patches/frr/10.5.5/0003-zebra-don-t-resolve-nexthop-via-inactive-connected-r.patch similarity index 100% rename from patches/frr/10.5.4/0003-zebra-don-t-resolve-nexthop-via-inactive-connected-r.patch rename to patches/frr/10.5.5/0003-zebra-don-t-resolve-nexthop-via-inactive-connected-r.patch From 333123706819e5899e795ff8e4171501c27d397d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 13:21:42 +0200 Subject: [PATCH 2/7] test: Fix flaky test `ospf_default_route_advertise` --- test/case/routing/ospf_default_route_advertise/test.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/case/routing/ospf_default_route_advertise/test.py b/test/case/routing/ospf_default_route_advertise/test.py index 1767336fd..c177f8dc4 100755 --- a/test/case/routing/ospf_default_route_advertise/test.py +++ b/test/case/routing/ospf_default_route_advertise/test.py @@ -276,14 +276,14 @@ def set_redistribute_default_always(target): until(lambda: route.ipv4_route_exist(R2, "0.0.0.0/0", proto="ietf-ospf:ospfv2"), attempts=200) until(lambda: route.ipv4_route_exist(R2, "192.168.100.1/32", proto="ietf-ospf:ospfv2"), attempts=200) until(lambda: route.ipv4_route_exist(R1, "192.168.200.1/32", proto="ietf-ospf:ospfv2"), attempts=200) + until(lambda: route.ipv4_route_exist(R1, "192.168.20.0/24", proto="ietf-ospf:ospfv2"), attempts=200) with test.step("Verify connectivity from PC:data2 to 10.10.10.10"): _, hport0 = env.ltop.xlate("PC", "data2") with infamy.IsolatedMacVlan(hport0) as ns0: ns0.addip("192.168.20.2") ns0.addroute("0.0.0.0/0", "192.168.20.1") - #breakpoint() - ns0.must_reach("10.10.10.10") + ns0.must_reach("10.10.10.10", timeout=15) with test.step("Disable link PC:data1 <--> R1:data (take default gateway down)"): disable_interface(R1, R1data) @@ -311,6 +311,7 @@ def set_redistribute_default_always(target): print("Waiting for OSPF routes...") until(lambda: route.ipv4_route_exist(R2, "192.168.100.1/32", proto="ietf-ospf:ospfv2"), attempts=200) until(lambda: route.ipv4_route_exist(R1, "192.168.200.1/32", proto="ietf-ospf:ospfv2"), attempts=200) + until(lambda: route.ipv4_route_exist(R1, "192.168.20.0/24", proto="ietf-ospf:ospfv2"), attempts=200) until(lambda: route.ipv4_route_exist(R2, "0.0.0.0/0", proto="ietf-ospf:ospfv2"), attempts=200) with test.step("Verify connectivity from PC:data2 to 10.10.10.10"): @@ -318,6 +319,6 @@ def set_redistribute_default_always(target): with infamy.IsolatedMacVlan(hport0) as ns0: ns0.addip("192.168.20.2") ns0.addroute("0.0.0.0/0", "192.168.20.1") - ns0.must_reach("10.10.10.10") + ns0.must_reach("10.10.10.10", timeout=15) test.succeed() From 6079dd229bf83bafa2d5f66ff92395379f6317b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 13:22:11 +0200 Subject: [PATCH 3/7] test: wireguard: Fix flaky test since `test: Fix parallel() missing lambdas` --- .../interfaces/wireguard_multipoint/test.py | 24 ++++++++++--------- .../interfaces/wireguard_roadwarrior/test.py | 8 ++++--- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/test/case/interfaces/wireguard_multipoint/test.py b/test/case/interfaces/wireguard_multipoint/test.py index 0562fee58..a6fd11437 100755 --- a/test/case/interfaces/wireguard_multipoint/test.py +++ b/test/case/interfaces/wireguard_multipoint/test.py @@ -472,7 +472,9 @@ def configure_client2(dut): _, hserver = env.ltop.xlate("host", "data2") with test.step("Configure server, client1 and client2"): - util.parallel(lambda: configure_server(server), lambda: configure_client1(client1), lambda: configure_client2(client2)) + configure_server(server) + util.parallel(lambda: configure_client1(client1), + lambda: configure_client2(client2)) with infamy.IsolatedMacVlan(hserver) as nsserver, infamy.IsolatedMacVlan(hclient1) as nsclient1: nsserver.addip("192.168.0.1") @@ -485,25 +487,25 @@ def configure_client2(dut): nsclient1.addroute("default", "2001:db8:3c4d:01::2", proto="ipv6") with test.step("Verify IPv4 connectivity with ping 10.0.0.1, 10.0.0.2 and 10.0.0.3 from host:data1"): - util.parallel(lambda: nsclient1.must_reach("10.0.0.1"), - lambda: nsclient1.must_reach("10.0.0.2"), - lambda: nsclient1.must_reach("10.0.0.3")) + util.parallel(lambda: nsclient1.must_reach("10.0.0.1", timeout=15), + lambda: nsclient1.must_reach("10.0.0.2", timeout=15), + lambda: nsclient1.must_reach("10.0.0.3", timeout=15)) with test.step("Verify IPv4 connectivity with ping 10.0.0.1 and 10.0.0.2 from host:data2"): - util.parallel(lambda: nsserver.must_reach("10.0.0.1"), - lambda: nsserver.must_reach("10.0.0.2")) + util.parallel(lambda: nsserver.must_reach("10.0.0.1", timeout=15), + lambda: nsserver.must_reach("10.0.0.2", timeout=15)) with test.step("Verify host:data2 can not ping 10.0.0.3"): nsserver.must_not_reach("10.0.0.3") # Not in allowed IPs with test.step("Verify IPv6 connectivity with ping fd00:0::1, fd00:0::2 and fd00:0::3 from host:data1"): - util.parallel(lambda: nsclient1.must_reach("fd00:0::1"), - lambda: nsclient1.must_reach("fd00:0::2"), - lambda: nsclient1.must_reach("fd00:0::3")) + util.parallel(lambda: nsclient1.must_reach("fd00:0::1", timeout=15), + lambda: nsclient1.must_reach("fd00:0::2", timeout=15), + lambda: nsclient1.must_reach("fd00:0::3", timeout=15)) with test.step("Verify IPv6 connectivity with ping fd00:0:1 and fd00:0:2 from host:data2"): - util.parallel(lambda: nsserver.must_reach("fd00:0::1"), - lambda: nsserver.must_reach("fd00:0::2")) + util.parallel(lambda: nsserver.must_reach("fd00:0::1", timeout=15), + lambda: nsserver.must_reach("fd00:0::2", timeout=15)) with test.step("Verify host:data2 can not ping fd00:0::3"): nsserver.must_not_reach("fd00:0::3") # Not in allowed IPs diff --git a/test/case/interfaces/wireguard_roadwarrior/test.py b/test/case/interfaces/wireguard_roadwarrior/test.py index 232cfdcf1..5d6a5294a 100755 --- a/test/case/interfaces/wireguard_roadwarrior/test.py +++ b/test/case/interfaces/wireguard_roadwarrior/test.py @@ -329,7 +329,9 @@ def configure_client(client, client_num, private_key, public_key, server_pubkey) with test.step("Configure DUTs"): util.parallel( lambda: configure_server(server, server_public_key, server_private_key, client1_public_key, client2_public_key), - lambda: configure_router(router), + lambda: configure_router(router) + ) + util.parallel( lambda: configure_client(client1, 1, client1_private_key, client1_public_key, server_public_key), lambda: configure_client(client2, 2, client2_private_key, client2_public_key, server_public_key) ) @@ -352,8 +354,8 @@ def configure_client(client, client_num, private_key, public_key, server_pubkey) with test.step("Verify IPv4 connectivity with ping 192.168.0.2 from host:data1 and host:data2"): util.parallel( - lambda: ns_client1.must_reach("192.168.0.2"), - lambda: ns_client2.must_reach("192.168.0.2") + lambda: ns_client1.must_reach("192.168.0.2", timeout=15), + lambda: ns_client2.must_reach("192.168.0.2", timeout=15) ) test.succeed() From 200311d6bc7d59439eb9ab46e1da7d48dbfbbbf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 13:55:47 +0200 Subject: [PATCH 4/7] test: infamy: ssh: Make SSH connection more robust Test to run `true` over SSH, not only a SYN check. --- test/infamy/ssh.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/infamy/ssh.py b/test/infamy/ssh.py index 2db6bde56..4714ac934 100644 --- a/test/infamy/ssh.py +++ b/test/infamy/ssh.py @@ -70,6 +70,9 @@ def __init__(self, name: str, location: Location, wait: bool=True): self.location = location if wait: util.until(lambda: ssh_syn(location.host, location.port)) + util.until(lambda: self.run("true", stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL).returncode == 0, + attempts=30) def __str__(self): nm = f"{self.name}" From ba61ba869e38d4869b918ef3adab921818da2cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 13:57:10 +0200 Subject: [PATCH 5/7] test: Fix flaky test `factory_config` Could fail because the SSH client failed. --- test/case/system/factory_config/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/case/system/factory_config/test.py b/test/case/system/factory_config/test.py index ecbfb7593..5852979d1 100755 --- a/test/case/system/factory_config/test.py +++ b/test/case/system/factory_config/test.py @@ -18,7 +18,7 @@ def factory_hostname(tgtssh): """Read the hostname the factory-config will boot with.""" - cfg = json.loads(tgtssh.runsh(f"cat {FACTORY}").stdout) + cfg = json.loads(tgtssh.runsh(f"cat {FACTORY}", check=True).stdout) return cfg.get("ietf-system:system", {}).get("hostname") def cleanup(env): From 077e83ad6b3d850e05e3723acef0620b7fb6caf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 14:19:04 +0200 Subject: [PATCH 6/7] test: Connect in parallel in some more tests --- test/case/meta/bootorder.py | 12 ++++++++---- test/case/meta/check-version.py | 12 ++++++++---- test/case/meta/play.py | 9 +++++++-- test/case/services/mdns/mdns_allow_deny/test.py | 5 +++-- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/test/case/meta/bootorder.py b/test/case/meta/bootorder.py index a82d4c7b1..68c4e98a5 100755 --- a/test/case/meta/bootorder.py +++ b/test/case/meta/bootorder.py @@ -1,16 +1,20 @@ #!/usr/bin/env python3 import infamy +from infamy.util import parallel with infamy.Test() as test: with test.step("Discover topology and attach to available DUTs"): env = infamy.Env(False) ctrl = env.ptop.get_ctrl() - duts = {} - duts_state = {} - for ix in env.ptop.get_infixen(): + + def attach(ix): cport, ixport = env.ptop.get_mgmt_link(ctrl, ix) print(f"Attaching to {ix}:{ixport} via {ctrl}:{cport}") - duts[ix] = env.attach(ix, ixport) + return env.attach(ix, ixport) + + infixen = env.ptop.get_infixen() + duts = dict(zip(infixen, parallel(*(lambda ix=ix: attach(ix) + for ix in infixen)))) with test.step("Verify bootorder"): for name, tgt in duts.items(): diff --git a/test/case/meta/check-version.py b/test/case/meta/check-version.py index 1ec8570a3..72e379f40 100755 --- a/test/case/meta/check-version.py +++ b/test/case/meta/check-version.py @@ -1,17 +1,21 @@ #!/usr/bin/env python3 import infamy +from infamy.util import parallel import os with infamy.Test() as test: with test.step("Discover topology and attach to available DUTs"): env = infamy.Env(False) ctrl = env.ptop.get_ctrl() - duts = {} - duts_state = {} - for ix in env.ptop.get_infixen(): + + def attach(ix): cport, ixport = env.ptop.get_mgmt_link(ctrl, ix) print(f"Attaching to {ix}:{ixport} via {ctrl}:{cport}") - duts[ix] = env.attach(ix, ixport) + return env.attach(ix, ixport) + + infixen = env.ptop.get_infixen() + duts = dict(zip(infixen, parallel(*(lambda ix=ix: attach(ix) + for ix in infixen)))) with test.step("Verify software version"): expected=os.environ.get("VERSION") diff --git a/test/case/meta/play.py b/test/case/meta/play.py index 6046be5ae..2eeace309 100755 --- a/test/case/meta/play.py +++ b/test/case/meta/play.py @@ -3,6 +3,7 @@ import json import infamy +from infamy.util import parallel def jq(yangdata): print(json.dumps(yangdata, indent=True)) @@ -11,9 +12,13 @@ def jq(yangdata): ctrl = env.ptop.get_ctrl() infixen = env.ptop.get_infixen() -for ix in infixen: + +def attach(ix): cport, ixport = env.ptop.get_mgmt_link(ctrl, ix) print(f"Attaching to {ix}:{ixport} via {ctrl}:{cport}") - exec(f"{ix} = env.attach(\"{ix}\", \"{ixport}\")") + return env.attach(ix, ixport) + +globals().update(zip(infixen, parallel(*(lambda ix=ix: attach(ix) + for ix in infixen)))) print("\nGLHF") diff --git a/test/case/services/mdns/mdns_allow_deny/test.py b/test/case/services/mdns/mdns_allow_deny/test.py index 0311d9168..6feea7cbf 100755 --- a/test/case/services/mdns/mdns_allow_deny/test.py +++ b/test/case/services/mdns/mdns_allow_deny/test.py @@ -12,6 +12,7 @@ """ import re import infamy +from infamy.util import parallel def mdns_scan(): @@ -64,8 +65,8 @@ def check(expected, allow=None, deny=None): with infamy.Test() as test: with test.step("Set up topology and attach to target DUT"): env = infamy.Env() - dut = env.attach("dut", "mgmt") - ssh = env.attach("dut", "mgmt", "ssh") + dut, ssh = parallel(lambda: env.attach("dut", "mgmt"), + lambda: env.attach("dut", "mgmt", "ssh")) _, p1 = env.ltop.xlate("dut", "p1") _, p2 = env.ltop.xlate("dut", "p2") _, p3 = env.ltop.xlate("dut", "p3") From 7766363b847ae4079f4dc079e9e4e18a6c7ceced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Thu, 3 Sep 2026 15:59:07 +0200 Subject: [PATCH 7/7] test: fix flaky test hardware/watchdog --- test/case/hardware/watchdog/test.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/case/hardware/watchdog/test.py b/test/case/hardware/watchdog/test.py index 3c4d66dff..a3d3e0be8 100755 --- a/test/case/hardware/watchdog/test.py +++ b/test/case/hardware/watchdog/test.py @@ -12,7 +12,7 @@ """ import base64 import infamy -from infamy.util import parallel +from infamy.util import parallel, until import json import subprocess import time @@ -24,8 +24,11 @@ lambda: env.attach("target", "mgmt", "ssh")) with test.step("Verify the presence of a watchdog device"): - wctl = tgtssh.run(["watchdogctl"], stdout=subprocess.PIPE) - conf = json.loads(wctl.stdout) + def status(): + wctl = tgtssh.run(["watchdogctl"], stdout=subprocess.PIPE, check=True) + return json.loads(wctl.stdout) + + conf = until(status) dogs = [ dog for dog in conf.get("device", []) if dog.get("name", "") == "/dev/watchdog" ] if len(dogs) < 1: