diff --git a/tests/e2e/test_dynamips_kernel_datapath.py b/tests/e2e/test_dynamips_kernel_datapath.py index 64e61e331..c4fc774c6 100644 --- a/tests/e2e/test_dynamips_kernel_datapath.py +++ b/tests/e2e/test_dynamips_kernel_datapath.py @@ -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) diff --git a/tests/e2e/test_ethernet_switch_cascade.py b/tests/e2e/test_ethernet_switch_cascade.py index 6e082d175..1bc02c5b8 100644 --- a/tests/e2e/test_ethernet_switch_cascade.py +++ b/tests/e2e/test_ethernet_switch_cascade.py @@ -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), ( diff --git a/tests/e2e/test_iol_docker_kernel_datapath.py b/tests/e2e/test_iol_docker_kernel_datapath.py index addc125e6..a8fa56a63 100644 --- a/tests/e2e/test_iol_docker_kernel_datapath.py +++ b/tests/e2e/test_iol_docker_kernel_datapath.py @@ -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) diff --git a/tests/e2e/test_iou_kernel_datapath.py b/tests/e2e/test_iou_kernel_datapath.py index 23f2f1c18..a857bcd40 100644 --- a/tests/e2e/test_iou_kernel_datapath.py +++ b/tests/e2e/test_iou_kernel_datapath.py @@ -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. diff --git a/tests/e2e/test_qemu_kernel_datapath.py b/tests/e2e/test_qemu_kernel_datapath.py index 721895c53..419d2c4ac 100644 --- a/tests/e2e/test_qemu_kernel_datapath.py +++ b/tests/e2e/test_qemu_kernel_datapath.py @@ -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.