]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - test/test-network/systemd-networkd-tests.py
test-network: add tests for --any option of wait-online
[thirdparty/systemd.git] / test / test-network / systemd-networkd-tests.py
index 9ff7e37a3e8fe92fcc8586d06e638b7baa190016..bd79ff737ed9d54b7950efc971134561bf5ad0f0 100755 (executable)
@@ -71,7 +71,6 @@ def expectedFailureIfRoutingPolicyIPProtoIsNotAvailable():
     return f
 
 def setUpModule():
-
     os.makedirs(network_unit_file_path, exist_ok=True)
     os.makedirs(networkd_ci_path, exist_ok=True)
 
@@ -186,8 +185,10 @@ class Utilities():
         if sleep_sec > 0:
             time.sleep(sleep_sec)
 
-    def wait_online(self, links_with_operstate, timeout='20s'):
-        args = [wait_online_bin, f' --timeout={timeout}'] + [f'--interface={link}' for link in links_with_operstate]
+    def wait_online(self, links_with_operstate, timeout='20s', bool_any=False):
+        args = [wait_online_bin, f'--timeout={timeout}'] + [f'--interface={link}' for link in links_with_operstate]
+        if bool_any:
+            args += ['--any']
         subprocess.check_call(args)
 
 class NetworkdNetDevTests(unittest.TestCase, Utilities):
@@ -244,6 +245,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
     units = [
         '10-dropin-test.netdev',
         '11-dummy.netdev',
+        '11-dummy.network',
         '12-dummy.netdev',
         '21-macvlan.netdev',
         '21-macvtap.netdev',
@@ -254,6 +256,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         '25-bond.netdev',
         '25-bond-balanced-tlb.netdev',
         '25-bridge.netdev',
+        '25-bridge.network',
         '25-erspan-tunnel-local-any.netdev',
         '25-erspan-tunnel.netdev',
         '25-geneve.netdev',
@@ -296,6 +299,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         '25-wireguard-private-key.txt',
         '25-wireguard.netdev',
         '6rd.network',
+        'erspan.network',
         'gre.network',
         'gretap.network',
         'gretun.network',
@@ -352,6 +356,22 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
         else:
             print('ethtool does not support driver field at least for dummy interfaces, skipping test for Driver field of networkctl.')
 
+    def test_wait_online_any(self):
+        self.copy_unit_to_networkd_unit_path('25-bridge.netdev', '25-bridge.network', '11-dummy.netdev', '11-dummy.network')
+        self.start_networkd(0)
+
+        self.wait_online(['bridge99', 'test1:degraded'], bool_any=True)
+        self.assertTrue(self.link_exits('bridge99'))
+        self.assertTrue(self.link_exits('test1'))
+
+        output = subprocess.check_output(['networkctl', 'status', 'bridge99']).rstrip().decode('utf-8')
+        print(output)
+        self.assertRegex(output, 'State: (?:off|no-carrier) \(configuring\)')
+
+        output = subprocess.check_output(['networkctl', 'status', 'test1']).rstrip().decode('utf-8')
+        print(output)
+        self.assertRegex(output, 'State: degraded \(configured\)')
+
     def test_bridge(self):
         self.copy_unit_to_networkd_unit_path('25-bridge.netdev')
         self.start_networkd()
@@ -735,9 +755,11 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
 
     @expectedFailureIfERSPANModuleIsNotAvailable()
     def test_erspan_tunnel(self):
-        self.copy_unit_to_networkd_unit_path('25-erspan-tunnel.netdev', '25-erspan-tunnel-local-any.netdev')
+        self.copy_unit_to_networkd_unit_path('12-dummy.netdev', 'erspan.network',
+                                             '25-erspan-tunnel.netdev', '25-erspan-tunnel-local-any.netdev')
         self.start_networkd()
 
+        self.assertTrue(self.link_exits('dummy98'))
         self.assertTrue(self.link_exits('erspan99'))
         self.assertTrue(self.link_exits('erspan98'))