test(e2e): unmanage the TAP anchors in the remaining kernel scenarios

Same guard the ethernet-switch scenario already carries: NetworkManager
can release an NM-managed TAP from its bridge shortly after
(re-)enslavement (docs/bugs/networkmanager-tap-release.md). Applied to
the Dynamips, QEMU, IOU, IOL-runner and switch-cascade scenarios after
their nodes have booted (no-op where nmcli/NetworkManager is absent).
This keeps those tests deterministic on un-declared hosts.
This commit is contained in:
YueGuobin 2026-10-05 22:51:17 +08:00
parent 28e9b82a5f
commit 15fbef93fb
No known key found for this signature in database
5 changed files with 26 additions and 0 deletions

View File

@ -111,6 +111,11 @@ def test_dynamips_kernel_datapath():
c1 = _boot(server, pid, r1_id)
c2 = _boot(server, pid, r2_id)
# NetworkManager can release an NM-managed TAP from its bridge after
# (re-)enslavement (docs/bugs/networkmanager-tap-release.md); take the
# anchors out of its reach for the rest of the run.
harness.unmanage_from_networkmanager(t1, t2)
# Kernel objects: anchors exist and the per-link bridge has exactly
# the two of them enslaved.
assert harness.tap_exists(t1) and harness.tap_exists(t2), (t1, t2)

View File

@ -188,6 +188,11 @@ def test_ethernet_switch_cascade_kernel_datapath():
c1 = _boot(server, pid, r1_id)
c2 = _boot(server, pid, r2_id)
# NetworkManager can release an NM-managed TAP from its bridge after
# (re-)enslavement (docs/bugs/networkmanager-tap-release.md); take the
# anchors out of its reach for the rest of the run.
harness.unmanage_from_networkmanager(a1_10, a1_20, a2_10, a2_20)
# The deferred host joins completed via the node-start re-push: each
# switch bridges its two router anchors plus its cascade end.
assert harness.wait_until(lambda: harness.bridge_members(br1) == sorted([a1_10, a1_20, e0]), timeout=15), (

View File

@ -121,6 +121,11 @@ def test_iol_docker_kernel_datapath():
c1 = _boot(server, pid, n1_id)
c2 = _boot(server, pid, n2_id)
# NetworkManager can release an NM-managed TAP from its bridge after
# (re-)enslavement (docs/bugs/networkmanager-tap-release.md); take the
# anchors out of its reach for the rest of the run.
harness.unmanage_from_networkmanager(a1, a2)
# Kernel objects: anchors exist (born with the node, before the link
# was ever wired) and the per-link bridge has exactly the two of them.
assert harness.tap_exists(a1) and harness.tap_exists(a2), (a1, a2)

View File

@ -135,6 +135,11 @@ def test_iou_kernel_datapath():
c1 = _boot(server, pid, n1_id)
c2 = _boot(server, pid, n2_id)
# NetworkManager can release an NM-managed TAP from its bridge after
# (re-)enslavement (docs/bugs/networkmanager-tap-release.md); take the
# anchors out of its reach for the rest of the run.
harness.unmanage_from_networkmanager(a1, a2)
# Kernel objects: the anchors are one persistent TAP per Ethernet
# bay/unit, born with the node (all eight — the IOU port model),
# and the per-link bridge has exactly the two addressed ports.

View File

@ -127,6 +127,12 @@ def test_qemu_kernel_datapath():
c1 = _boot(server, pid, n1_id)
c2 = _boot(server, pid, n2_id)
# NetworkManager can release an NM-managed TAP from its bridge after
# (re-)enslavement (docs/bugs/networkmanager-tap-release.md); take the
# anchors out of its reach for the rest of the run (the restart below
# re-attaches them under fresh devices).
harness.unmanage_from_networkmanager(a1, a2, harness.qemu_anchor_name(n1_id, 1))
# Kernel objects: one persistent TAP per adapter (both adapters of
# router 1, the addressed one of router 2), and the per-link bridge
# has exactly the two addressed ports.