summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2023-02-07 11:26:58 +0100
committerThomas Haller <thaller@redhat.com>2023-02-08 10:11:20 +0100
commit8548ab29ee1eaad43bbfe099181dab905e229446 (patch)
tree86406e32dc1feab2e9f8aa18d7b4c6fc0b8022a9
parentfc282d5e05f5850d7819bb0bf3b9685db9ae89ee (diff)
downloadNetworkManager-8548ab29ee1eaad43bbfe099181dab905e229446.tar.gz
test-client: fix race in test_monitor() test
During srv_shutdown() we do p.stdin.close() p.kill() Usually, the kill wins and the service just drops off the bus: libnm-dbus[3201919]: <debug> [438617.45324] nmclient[40f7938626f3f5f0]: name owner changed: ":1.1" -> (null) libnm-dbus[3201919]: <debug> [438617.45332] nmclient[40f7938626f3f5f0]: release all at which point all objects in NMClient get destroyed and the signals get emitted in the order: libnm-dbus[3201919]: <trace> [438617.45574] nmclient[40f7938626f3f5f0]: [nmclient] emit "device-removed" signal for /org/freedesktop/NetworkManager/Devices/1 nmcli[out]: eth0: device removed libnm-dbus[3201919]: <trace> [438617.45590] nmclient[40f7938626f3f5f0]: [nmclient] emit "any-device-removed" signal for /org/freedesktop/NetworkManager/Devices/1 libnm-dbus[3201919]: <trace> [438617.45593] nmclient[40f7938626f3f5f0]: [nmclient] emit "connection-removed" signal for /org/freedesktop/NetworkManager/Settings/Connectio> nmcli[out]: con-1: connection profile removed However, sometimes the stub service notices that stdin was closed and it sends signals about shutting down: libnm-dbus[3201061]: <trace> [438226.44965] nmclient[401639659459c316]: interfaces-removed: [/org/freedesktop/NetworkManager/Settings] receive interface remove event for > libnm-dbus[3201061]: <trace> [438226.44966] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: changed-type 0x01 linked libnm-dbus[3201061]: <trace> [438226.44967] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: changed-type 0x01 consumed libnm-dbus[3201061]: <trace> [438226.44968] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: changed-type 0x02 linked libnm-dbus[3201061]: <trace> [438226.44969] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: unregister NMClient from D-Bus object libnm-dbus[3201061]: <trace> [438226.44971] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: drop D-Bus instance libnm-dbus[3201061]: <trace> [438226.44971] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager/Settings]: set D-Bus object state unlinked libnm-dbus[3201061]: <trace> [438226.44972] nmclient[401639659459c316]: [nmclient] emit "connection-removed" signal for /org/freedesktop/NetworkManager/Settings/Connectio> nmcli[out]: con-1: connection profile removed libnm-dbus[3201061]: <trace> [438226.44992] nmclient[401639659459c316]: interfaces-removed: [/org/freedesktop/NetworkManager] receive interface remove event for interface> libnm-dbus[3201061]: <trace> [438226.44994] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: changed-type 0x01 linked libnm-dbus[3201061]: <trace> [438226.44995] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: changed-type 0x01 consumed libnm-dbus[3201061]: <trace> [438226.44996] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: changed-type 0x02 linked libnm-dbus[3201061]: <trace> [438226.44998] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: unregister NMClient from D-Bus object libnm-dbus[3201061]: <trace> [438226.44999] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: drop D-Bus instance libnm-dbus[3201061]: <trace> [438226.45000] nmclient[401639659459c316]: [/org/freedesktop/NetworkManager]: set D-Bus object state unlinked libnm-dbus[3201061]: <trace> [438226.45001] nmclient[401639659459c316]: [nmclient] emit "device-removed" signal for /org/freedesktop/NetworkManager/Devices/1 nmcli[out]: eth0: device removed libnm-dbus[3201061]: <trace> [438226.45005] nmclient[401639659459c316]: [nmclient] emit "any-device-removed" signal for /org/freedesktop/NetworkManager/Devices/1 nmcli[out]: NetworkManager is stopped libnm-dbus[3201061]: <debug> [438226.45545] nmclient[401639659459c316]: name owner changed: ":1.1" -> (null) libnm-dbus[3201061]: <debug> [438226.45550] nmclient[401639659459c316]: release all The fix is to accept the events in any order.
-rwxr-xr-xsrc/tests/client/test-client.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/tests/client/test-client.py b/src/tests/client/test-client.py
index db4320ba7b..266de1155c 100755
--- a/src/tests/client/test-client.py
+++ b/src/tests/client/test-client.py
@@ -512,6 +512,16 @@ class Util:
os.remove(name)
+ @staticmethod
+ def pexpect_expect_all(pexp, *pattern_list):
+ # This will call "pexpect.expect()" on pattern_list,
+ # expecting all entries to match exactly once, in any
+ # order.
+ pattern_list = list(pattern_list)
+ while pattern_list:
+ idx = pexp.expect(pattern_list)
+ del pattern_list[idx]
+
###############################################################################
@@ -2071,8 +2081,11 @@ class TestNmcli(unittest.TestCase):
nmc = start_mon(self)
self.srv_shutdown()
- nmc.pexp.expect("eth0: device removed")
- nmc.pexp.expect("con-1: connection profile removed")
+ Util.pexpect_expect_all(
+ nmc.pexp,
+ "con-1: connection profile removed",
+ "eth0: device removed",
+ )
nmc.pexp.expect("NetworkManager is stopped")
end_mon(self, nmc)