From 14dc033574a0105396dd7b3a4e0da89a7eabce55 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 15:29:55 +0100 Subject: [PATCH 1/8] test-network: fix typo in class name --- test/test-network/systemd-networkd-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index e709ef0dd1..dbe47814db 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -704,7 +704,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertEqual(self.read_ipv4_sysctl_attr('dummy98', 'forwarding'),'1') self.assertEqual(self.read_ipv4_sysctl_attr('dummy98', 'proxy_arp'), '1') -class NetworkdNetWorkBrideTests(unittest.TestCase, Utilities): +class NetworkdNetWorkBridgeTests(unittest.TestCase, Utilities): links = ['dummy98', 'test1', 'bridge99'] units = ['11-dummy.netdev', '12-dummy.netdev', '26-bridge.netdev', '26-bridge-slave-interface-1.network', From 09ea6724e7cd13bb89da919aac0be127f61e7fb8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 14:57:20 +0100 Subject: [PATCH 2/8] test-network: sort links and units --- test/test-network/systemd-networkd-tests.py | 190 ++++++++++++++++---- 1 file changed, 151 insertions(+), 39 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index dbe47814db..256528af10 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -171,22 +171,82 @@ class DHCPServer(threading.Thread): class NetworkdNetDevTests(unittest.TestCase, Utilities): - links =['bridge99', 'bond99', 'bond99', 'vlan99', 'test1', 'macvtap99', - 'macvlan99', 'ipvlan99', 'vxlan99', 'veth99', 'vrf99', 'tun99', - 'tap99', 'vcan99', 'geneve99', 'dummy98', 'ipiptun99', 'sittun99', '6rdtun99', - 'gretap99', 'vtitun99', 'vti6tun99','ip6tnl99', 'gretun99', 'ip6gretap99', - 'wg99', 'dropin-test', 'erspan-test', 'isataptun99'] + links =[ + '6rdtun99', + 'bond99', + 'bridge99', + 'dropin-test', + 'dummy98', + 'erspan-test', + 'geneve99', + 'gretap99', + 'gretun99', + 'ip6gretap99', + 'ip6tnl99', + 'ipiptun99', + 'ipvlan99', + 'isataptun99', + 'macvlan99', + 'macvtap99', + 'sittun99', + 'tap99', + 'test1', + 'tun99', + 'vcan99', + 'veth99', + 'vlan99', + 'vrf99', + 'vti6tun99', + 'vtitun99', + 'vxlan99', + 'wg99'] - units = ['25-bridge.netdev', '25-bond.netdev', '21-vlan.netdev', '11-dummy.netdev', '21-vlan.network', - '21-macvtap.netdev', 'macvtap.network', '21-macvlan.netdev', 'macvlan.network', 'vxlan.network', - '25-vxlan.netdev', '25-ipvlan.netdev', 'ipvlan.network', '25-veth.netdev', '25-vrf.netdev', - '25-tun.netdev', '25-tun.netdev', '25-vcan.netdev', '25-geneve.netdev', '25-ipip-tunnel.netdev', - '25-ip6tnl-tunnel.netdev', '25-ip6gre-tunnel.netdev', '25-sit-tunnel.netdev', '25-6rd-tunnel.netdev', - '25-erspan-tunnel.netdev', '25-gre-tunnel.netdev', '25-gretap-tunnel.netdev', '25-vti-tunnel.netdev', - '25-vti6-tunnel.netdev', '12-dummy.netdev', 'gre.network', 'ipip.network', 'ip6gretap.network', - 'gretun.network', 'ip6tnl.network', '25-tap.netdev', 'vti6.network', 'vti.network', 'gretap.network', - 'sit.network', '25-ipip-tunnel-independent.netdev', '25-wireguard.netdev', '6rd.network', '10-dropin-test.netdev', - '25-isatap-tunnel.netdev', 'isatap.network'] + units = [ + '10-dropin-test.netdev', + '11-dummy.netdev', + '12-dummy.netdev', + '21-macvlan.netdev', + '21-macvtap.netdev', + '21-vlan.netdev', + '21-vlan.network', + '25-6rd-tunnel.netdev', + '25-bond.netdev', + '25-bridge.netdev', + '25-erspan-tunnel.netdev', + '25-geneve.netdev', + '25-gretap-tunnel.netdev', + '25-gre-tunnel.netdev', + '25-ip6gre-tunnel.netdev', + '25-ip6tnl-tunnel.netdev', + '25-ipip-tunnel-independent.netdev', + '25-ipip-tunnel.netdev', + '25-ipvlan.netdev', + '25-isatap-tunnel.netdev', + '25-sit-tunnel.netdev', + '25-tap.netdev', + '25-tun.netdev', + '25-vcan.netdev', + '25-veth.netdev', + '25-vrf.netdev', + '25-vti6-tunnel.netdev', + '25-vti-tunnel.netdev', + '25-vxlan.netdev', + '25-wireguard.netdev', + '6rd.network', + 'gre.network', + 'gretap.network', + 'gretun.network', + 'ip6gretap.network', + 'ip6tnl.network', + 'ipip.network', + 'ipvlan.network', + 'isatap.network', + 'macvlan.network', + 'macvtap.network', + 'sit.network', + 'vti6.network', + 'vti.network', + 'vxlan.network'] def setUp(self): self.link_remove(self.links) @@ -453,16 +513,36 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertRegex(output, 'gbp') class NetworkdNetWorkTests(unittest.TestCase, Utilities): - links = ['dummy98', 'test1', 'bond199'] + links = [ + 'bond199', + 'dummy98', + 'test1'] - units = ['12-dummy.netdev', 'test-static.network', 'configure-without-carrier.network', '11-dummy.netdev', - '23-primary-slave.network', '23-test1-bond199.network', '11-dummy.netdev', '23-bond199.network', - '25-bond-active-backup-slave.netdev', '12-dummy.netdev', '23-active-slave.network', - 'routing-policy-rule.network', '25-fibrule-port-range.network', '25-fibrule-invert.network', '25-address-section.network', - '25-address-section-miscellaneous.network', '25-route-section.network', '25-route-type.network', - '25-route-tcp-window-settings.network', '25-route-gateway.network', '25-route-gateway-on-link.network', - '25-address-link-section.network', '25-ipv6-address-label-section.network', '25-link-section-unmanaged.network', - '25-sysctl.network', '25-route-reverse-order.network'] + units = [ + '11-dummy.netdev', + '12-dummy.netdev', + '23-active-slave.network', + '23-bond199.network', + '23-primary-slave.network', + '23-test1-bond199.network', + '25-address-link-section.network', + '25-address-section-miscellaneous.network', + '25-address-section.network', + '25-bond-active-backup-slave.netdev', + '25-fibrule-invert.network', + '25-fibrule-port-range.network', + '25-ipv6-address-label-section.network', + '25-link-section-unmanaged.network', + '25-route-gateway.network', + '25-route-gateway-on-link.network', + '25-route-reverse-order.network', + '25-route-section.network', + '25-route-tcp-window-settings.network', + '25-route-type.network', + '25-sysctl.network', + 'configure-without-carrier.network', + 'routing-policy-rule.network', + 'test-static.network'] def setUp(self): self.link_remove(self.links) @@ -705,10 +785,18 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertEqual(self.read_ipv4_sysctl_attr('dummy98', 'proxy_arp'), '1') class NetworkdNetWorkBridgeTests(unittest.TestCase, Utilities): - links = ['dummy98', 'test1', 'bridge99'] + links = [ + 'bridge99', + 'dummy98', + 'test1'] - units = ['11-dummy.netdev', '12-dummy.netdev', '26-bridge.netdev', '26-bridge-slave-interface-1.network', - '26-bridge-slave-interface-2.network', 'bridge99.network'] + units = [ + '11-dummy.netdev', + '12-dummy.netdev', + '26-bridge.netdev', + '26-bridge-slave-interface-1.network', + '26-bridge-slave-interface-2.network', + 'bridge99.network'] def setUp(self): self.link_remove(self.links) @@ -757,7 +845,10 @@ class NetworkdNetWorkBridgeTests(unittest.TestCase, Utilities): class NetworkdNetWorkLLDPTests(unittest.TestCase, Utilities): links = ['veth99'] - units = ['23-emit-lldp.network', '24-lldp.network', '25-veth.netdev'] + units = [ + '23-emit-lldp.network', + '24-lldp.network', + '25-veth.netdev'] def setUp(self): self.link_remove(self.links) @@ -780,7 +871,10 @@ class NetworkdNetWorkLLDPTests(unittest.TestCase, Utilities): class NetworkdNetworkRATests(unittest.TestCase, Utilities): links = ['veth99'] - units = ['25-veth.netdev', 'ipv6-prefix.network', 'ipv6-prefix-veth.network'] + units = [ + '25-veth.netdev', + 'ipv6-prefix.network', + 'ipv6-prefix-veth.network'] def setUp(self): self.link_remove(self.links) @@ -800,10 +894,18 @@ class NetworkdNetworkRATests(unittest.TestCase, Utilities): self.assertRegex(output, '2002:da8:1:0') class NetworkdNetworkDHCPServerTests(unittest.TestCase, Utilities): - links = ['veth99', 'dummy98'] + links = [ + 'dummy98', + 'veth99'] - units = ['25-veth.netdev', 'dhcp-client.network', 'dhcp-server.network', '12-dummy.netdev', '24-search-domain.network', - 'dhcp-client-timezone-router.network', 'dhcp-server-timezone-router.network'] + units = [ + '12-dummy.netdev', + '24-search-domain.network', + '25-veth.netdev', + 'dhcp-client.network', + 'dhcp-client-timezone-router.network', + 'dhcp-server.network', + 'dhcp-server-timezone-router.network'] def setUp(self): self.link_remove(self.links) @@ -852,14 +954,24 @@ class NetworkdNetworkDHCPServerTests(unittest.TestCase, Utilities): self.assertRegex(output, 'Europe/Berlin') class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): - links = ['veth99', 'dummy98'] + links = [ + 'dummy98', + 'veth99'] - units = ['25-veth.netdev', 'dhcp-server-veth-peer.network','dhcp-client-ipv6-only.network', - 'dhcp-client-ipv4-only-ipv6-disabled.network', 'dhcp-client-ipv4-only.network', - 'dhcp-client-ipv4-dhcp-settings.network', 'dhcp-client-anonymize.network', - 'dhcp-client-ipv6-rapid-commit.network', 'dhcp-client-route-table.network', - 'dhcp-v4-server-veth-peer.network', 'dhcp-client-listen-port.network', - 'dhcp-client-route-metric.network', 'dhcp-client-critical-connection.network'] + units = [ + '25-veth.netdev', + 'dhcp-client-anonymize.network', + 'dhcp-client-critical-connection.network', + 'dhcp-client-ipv4-dhcp-settings.network', + 'dhcp-client-ipv4-only-ipv6-disabled.network', + 'dhcp-client-ipv4-only.network', + 'dhcp-client-ipv6-only.network', + 'dhcp-client-ipv6-rapid-commit.network', + 'dhcp-client-listen-port.network', + 'dhcp-client-route-metric.network', + 'dhcp-client-route-table.network', + 'dhcp-server-veth-peer.network', + 'dhcp-v4-server-veth-peer.network'] def setUp(self): self.link_remove(self.links) From a9bc5e370ededc3f3b955829a8f04d69eee31512 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 14:59:49 +0100 Subject: [PATCH 3/8] test-network: sort imported modules --- test/test-network/systemd-networkd-tests.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 256528af10..338f7f516c 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3,15 +3,15 @@ # systemd-networkd tests import os -import sys -import unittest -import subprocess -import time import re import shutil import signal import socket +import subprocess +import sys import threading +import time +import unittest from shutil import copytree network_unit_file_path='/run/systemd/network' From 14ecd604a476f7c03dd4013877ceff4d4278dbf6 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 15:12:28 +0100 Subject: [PATCH 4/8] test-network: show command outputs --- test/test-network/systemd-networkd-tests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 338f7f516c..8e41ac5a45 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -307,6 +307,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('vlan99')) output = subprocess.check_output(['ip', '-d', 'link', 'show', 'vlan99']).rstrip().decode('utf-8') + print(output) self.assertTrue(output, 'REORDER_HDR') self.assertTrue(output, 'LOOSE_BINDING') self.assertTrue(output, 'GVRP') @@ -398,6 +399,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('geneve99')) output = subprocess.check_output(['ip', '-d', 'link', 'show', 'geneve99']).rstrip().decode('utf-8') + print(output) self.assertTrue(output, '192.168.22.1') self.assertTrue(output, '6082') self.assertTrue(output, 'udpcsum') @@ -466,6 +468,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('dummy98')) self.assertTrue(self.link_exits('isataptun99')) output = subprocess.check_output(['ip', '-d', 'link', 'show', 'isataptun99']).rstrip().decode('utf-8') + print(output) self.assertRegex(output, "isatap ") def test_6rd_tunnel(self): @@ -501,6 +504,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('vxlan99')) output = subprocess.check_output(['ip', '-d', 'link', 'show', 'vxlan99']).rstrip().decode('utf-8') + print(output) self.assertRegex(output, "999") self.assertRegex(output, '5555') self.assertRegex(output, 'l2miss') From e40a58b5bc5df32a75ceb7d0aff3e20b198cf84a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 15:14:57 +0100 Subject: [PATCH 5/8] test-network: check link before starting dnsmasq --- test/test-network/systemd-networkd-tests.py | 45 +++++++++------------ 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 8e41ac5a45..1c85a9d78c 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -257,7 +257,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_dropin(self): self.copy_unit_to_networkd_unit_path('10-dropin-test.netdev') - self.start_networkd() self.assertTrue(self.link_exits('dropin-test')) @@ -301,7 +300,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_vlan(self): self.copy_unit_to_networkd_unit_path('21-vlan.netdev', '11-dummy.netdev', '21-vlan.network') - self.start_networkd() self.assertTrue(self.link_exits('vlan99')) @@ -316,14 +314,12 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_macvtap(self): self.copy_unit_to_networkd_unit_path('21-macvtap.netdev', '11-dummy.netdev', 'macvtap.network') - self.start_networkd() self.assertTrue(self.link_exits('macvtap99')) def test_macvlan(self): self.copy_unit_to_networkd_unit_path('21-macvlan.netdev', '11-dummy.netdev', 'macvlan.network') - self.start_networkd() self.assertTrue(self.link_exits('macvlan99')) @@ -331,35 +327,30 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): @expectedFailureIfModuleIsNotAvailable('ipvlan') def test_ipvlan(self): self.copy_unit_to_networkd_unit_path('25-ipvlan.netdev', '11-dummy.netdev', 'ipvlan.network') - self.start_networkd() self.assertTrue(self.link_exits('ipvlan99')) def test_veth(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev') - self.start_networkd() self.assertTrue(self.link_exits('veth99')) def test_dummy(self): self.copy_unit_to_networkd_unit_path('11-dummy.netdev') - self.start_networkd() self.assertTrue(self.link_exits('test1')) def test_tun(self): self.copy_unit_to_networkd_unit_path('25-tun.netdev') - self.start_networkd() self.assertTrue(self.link_exits('tun99')) def test_tap(self): self.copy_unit_to_networkd_unit_path('25-tap.netdev') - self.start_networkd() self.assertTrue(self.link_exits('tap99')) @@ -367,7 +358,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): @expectedFailureIfModuleIsNotAvailable('vrf') def test_vrf(self): self.copy_unit_to_networkd_unit_path('25-vrf.netdev') - self.start_networkd() self.assertTrue(self.link_exits('vrf99')) @@ -375,7 +365,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): @expectedFailureIfModuleIsNotAvailable('vcan') def test_vcan(self): self.copy_unit_to_networkd_unit_path('25-vcan.netdev') - self.start_networkd() self.assertTrue(self.link_exits('vcan99')) @@ -383,7 +372,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): @expectedFailureIfModuleIsNotAvailable('wireguard') def test_wireguard(self): self.copy_unit_to_networkd_unit_path('25-wireguard.netdev') - self.start_networkd() if shutil.which('wg'): @@ -393,7 +381,6 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_geneve(self): self.copy_unit_to_networkd_unit_path('25-geneve.netdev') - self.start_networkd() self.assertTrue(self.link_exits('geneve99')) @@ -467,6 +454,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('dummy98')) self.assertTrue(self.link_exits('isataptun99')) + output = subprocess.check_output(['ip', '-d', 'link', 'show', 'isataptun99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, "isatap ") @@ -492,13 +480,12 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): def test_tunnel_independent(self): self.copy_unit_to_networkd_unit_path('25-ipip-tunnel-independent.netdev') - self.start_networkd() + self.assertTrue(self.link_exits('ipiptun99')) def test_vxlan(self): self.copy_unit_to_networkd_unit_path('25-vxlan.netdev', 'vxlan.network','11-dummy.netdev') - self.start_networkd() self.assertTrue(self.link_exits('vxlan99')) @@ -560,6 +547,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.start_networkd() self.assertTrue(self.link_exits('dummy98')) + output = subprocess.check_output(['networkctl', 'status', 'dummy98']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '192.168.0.15') @@ -571,6 +559,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.start_networkd() self.assertTrue(self.link_exits('test1')) + output = subprocess.check_output(['networkctl', 'status', 'test1']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '192.168.0.15') @@ -583,6 +572,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('dummy98')) self.assertTrue(self.link_exits('bond199')) + output = subprocess.check_output(['ip', '-d', 'link', 'show', 'bond199']).rstrip().decode('utf-8') print(output) self.assertRegex(output, 'active_slave dummy98') @@ -593,6 +583,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('test1')) self.assertTrue(self.link_exits('bond199')) + output = subprocess.check_output(['ip', '-d', 'link', 'show', 'bond199']).rstrip().decode('utf-8') print(output) self.assertRegex(output, 'primary test1') @@ -602,6 +593,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.start_networkd() self.assertTrue(self.link_exits('test1')) + output = subprocess.check_output(['ip', 'rule']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '111') @@ -616,6 +608,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.start_networkd() self.assertTrue(self.link_exits('test1')) + output = subprocess.check_output(['ip', 'rule']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '111') @@ -630,9 +623,9 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.start_networkd() self.assertTrue(self.link_exits('test1')) + output = subprocess.check_output(['ip', 'rule']).rstrip().decode('utf-8') print(output) - self.assertRegex(output, '111') self.assertRegex(output, 'not.*?from.*?192.168.100.18') self.assertRegex(output, 'tcp') @@ -836,7 +829,6 @@ class NetworkdNetWorkBridgeTests(unittest.TestCase, Utilities): output = subprocess.check_output(['bridge', '-d', 'link', 'show', 'dummy98']).rstrip().decode('utf-8') print(output) - self.assertEqual(self.read_bridge_port_attr('bridge99', 'dummy98', 'hairpin_mode'), '1') self.assertEqual(self.read_bridge_port_attr('bridge99', 'dummy98', 'path_cost'), '400') self.assertEqual(self.read_bridge_port_attr('bridge99', 'dummy98', 'unicast_flood'), '1') @@ -924,8 +916,6 @@ class NetworkdNetworkDHCPServerTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('veth99')) - time.sleep(5) - output = subprocess.check_output(['networkctl', 'status', 'veth99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '192.168.5.*') @@ -1062,7 +1052,6 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'veth99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '12:34:56:78:9a:bc') - self.assertTrue(self.search_words_in_file('14:rapid-commit')) def test_dhcp6_client_settings_rapidcommit_false(self): @@ -1076,7 +1065,6 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'veth99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '12:34:56:78:9a:bc') - self.assertFalse(self.search_words_in_file('14:rapid-commit')) def test_dhcp_client_settings_anonymize(self): @@ -1086,12 +1074,14 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): self.assertTrue(self.link_exits('veth99')) self.start_dnsmasq() + self.assertFalse(self.search_words_in_file('VendorClassIdentifier=SusantVendorTest')) self.assertFalse(self.search_words_in_file('test-hostname')) self.assertFalse(self.search_words_in_file('26:mtu')) def test_dhcp_client_listen_port(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-listen-port.network') + dh_server = DHCPServer("dhcp_server") dh_server.start() @@ -1110,39 +1100,40 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): def test_dhcp_route_table_id(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-route-table.network') self.start_networkd() - self.start_dnsmasq() self.assertTrue(self.link_exits('veth99')) + self.start_dnsmasq() + output = subprocess.check_output(['ip', 'route', 'show', 'table', '12']).rstrip().decode('utf-8') print(output) - self.assertRegex(output, 'veth99 proto dhcp') self.assertRegex(output, '192.168.5.1') def test_dhcp_route_metric(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-route-metric.network') self.start_networkd() - self.start_dnsmasq() self.assertTrue(self.link_exits('veth99')) + self.start_dnsmasq() + output = subprocess.check_output(['ip', 'route', 'show', 'dev', 'veth99']).rstrip().decode('utf-8') print(output) - self.assertRegex(output, 'metric 24') def test_dhcp_route_criticalconnection_true(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-critical-connection.network') self.start_networkd() - self.start_dnsmasq() self.assertTrue(self.link_exits('veth99')) + self.start_dnsmasq() + output = subprocess.check_output(['networkctl', 'status', 'veth99']).rstrip().decode('utf-8') print(output) - self.assertRegex(output, '192.168.5.*') + # Stoping dnsmasq as networkd won't be allowed to renew the DHCP lease. self.stop_dnsmasq(dnsmasq_pid_file) From fa7cd602814f06a76c56b54fbe7fe35d39f7b1e4 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 15:33:23 +0100 Subject: [PATCH 6/8] test-network: add a line break after starting networkd This may be ugly. But otherwise, outputs of several check commands are shown without new line... --- test/test-network/systemd-networkd-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 1c85a9d78c..893a27ac70 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -141,6 +141,7 @@ class Utilities(): else: subprocess.check_call('systemctl restart systemd-networkd', shell=True) time.sleep(5) + print() global ip global port From e4eacdb09f4f23fd1835c0d5f1eb2f79cb19cb77 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 16:02:55 +0100 Subject: [PATCH 7/8] test-network: delete rules before running next test --- test/test-network/systemd-networkd-tests.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 893a27ac70..b5cb09ee63 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -604,6 +604,8 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertRegex(output, 'oif test1') self.assertRegex(output, 'lookup 7') + subprocess.call(['ip', 'rule', 'del', 'table', '7']) + def test_routing_policy_rule_port_range(self): self.copy_unit_to_networkd_unit_path('25-fibrule-port-range.network', '11-dummy.netdev') self.start_networkd() @@ -619,6 +621,8 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertRegex(output, 'tcp') self.assertRegex(output, 'lookup 7') + subprocess.call(['ip', 'rule', 'del', 'table', '7']) + def test_routing_policy_rule_invert(self): self.copy_unit_to_networkd_unit_path('25-fibrule-invert.network', '11-dummy.netdev') self.start_networkd() @@ -632,6 +636,8 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities): self.assertRegex(output, 'tcp') self.assertRegex(output, 'lookup 7') + subprocess.call(['ip', 'rule', 'del', 'table', '7']) + def test_address_preferred_lifetime_zero_ipv6(self): self.copy_unit_to_networkd_unit_path('25-address-section-miscellaneous.network', '12-dummy.netdev') self.start_networkd() From 131717cbb4f1d7d6aa14a9b01ff4f52a4074a422 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 6 Dec 2018 16:46:16 +0100 Subject: [PATCH 8/8] test-network: make search_words_in_file() hit multi words --- test/test-network/systemd-networkd-tests.py | 29 +++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index b5cb09ee63..8fb1c7f38d 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -113,15 +113,16 @@ class Utilities(): os.remove(pid_file) - def search_words_in_file(self, word): + def search_words_in_dnsmasq_log(self, words, show_all=False): if os.path.exists(dnsmasq_log_file): with open (dnsmasq_log_file) as in_file: contents = in_file.read() - print(contents) - for part in contents.split(): - if word in part: + if show_all: + print(contents) + for line in contents.split('\n'): + if words in line: in_file.close() - print("%s, %s" % (word, part)) + print("%s, %s" % (words, line)) return True return False @@ -1043,10 +1044,10 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): print(output) self.assertRegex(output, 'default.*dev veth99 proto dhcp') - self.search_words_in_file('vendor class: SusantVendorTest') - self.search_words_in_file('client MAC address: 12:34:56:78:9a:bc') - self.search_words_in_file('client provides name: test-hostname') - self.search_words_in_file('26:mtu') + self.assertTrue(self.search_words_in_dnsmasq_log('vendor class: SusantVendorTest', True)) + self.assertTrue(self.search_words_in_dnsmasq_log('DHCPDISCOVER(veth-peer) 12:34:56:78:9a:bc')) + self.assertTrue(self.search_words_in_dnsmasq_log('client provides name: test-hostname')) + self.assertTrue(self.search_words_in_dnsmasq_log('26:mtu')) def test_dhcp6_client_settings_rapidcommit_true(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-only.network') @@ -1059,7 +1060,7 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'veth99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '12:34:56:78:9a:bc') - self.assertTrue(self.search_words_in_file('14:rapid-commit')) + self.assertTrue(self.search_words_in_dnsmasq_log('14:rapid-commit', True)) def test_dhcp6_client_settings_rapidcommit_false(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-rapid-commit.network') @@ -1072,7 +1073,7 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'veth99']).rstrip().decode('utf-8') print(output) self.assertRegex(output, '12:34:56:78:9a:bc') - self.assertFalse(self.search_words_in_file('14:rapid-commit')) + self.assertFalse(self.search_words_in_dnsmasq_log('14:rapid-commit', True)) def test_dhcp_client_settings_anonymize(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-anonymize.network') @@ -1082,9 +1083,9 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities): self.start_dnsmasq() - self.assertFalse(self.search_words_in_file('VendorClassIdentifier=SusantVendorTest')) - self.assertFalse(self.search_words_in_file('test-hostname')) - self.assertFalse(self.search_words_in_file('26:mtu')) + self.assertFalse(self.search_words_in_dnsmasq_log('VendorClassIdentifier=SusantVendorTest', True)) + self.assertFalse(self.search_words_in_dnsmasq_log('test-hostname')) + self.assertFalse(self.search_words_in_dnsmasq_log('26:mtu')) def test_dhcp_client_listen_port(self): self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-listen-port.network')