From 1e498853a39b46155cb89b5c9e74ecb27aaba3ed Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 3 Jun 2019 13:21:13 +0900 Subject: [PATCH] test-network: add tests for KeepConfiguration= --- .../conf/24-keep-configuration-static.network | 5 + ...t-keep-configuration-dhcp-on-stop.network} | 4 +- ...hcp-client-keep-configuration-dhcp.network | 7 ++ test/test-network/systemd-networkd-tests.py | 94 +++++++++++++++++-- 4 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 test/test-network/conf/24-keep-configuration-static.network rename test/test-network/conf/{dhcp-client-critical-connection.network => dhcp-client-keep-configuration-dhcp-on-stop.network} (65%) create mode 100644 test/test-network/conf/dhcp-client-keep-configuration-dhcp.network diff --git a/test/test-network/conf/24-keep-configuration-static.network b/test/test-network/conf/24-keep-configuration-static.network new file mode 100644 index 00000000000..0c65a1d9e2e --- /dev/null +++ b/test/test-network/conf/24-keep-configuration-static.network @@ -0,0 +1,5 @@ +[Match] +Name=dummy98 + +[Network] +KeepConfiguration=static diff --git a/test/test-network/conf/dhcp-client-critical-connection.network b/test/test-network/conf/dhcp-client-keep-configuration-dhcp-on-stop.network similarity index 65% rename from test/test-network/conf/dhcp-client-critical-connection.network rename to test/test-network/conf/dhcp-client-keep-configuration-dhcp-on-stop.network index 0e65dec0ae9..e17c9854021 100644 --- a/test/test-network/conf/dhcp-client-critical-connection.network +++ b/test/test-network/conf/dhcp-client-keep-configuration-dhcp-on-stop.network @@ -4,6 +4,4 @@ Name=veth99 [Network] DHCP=ipv4 IPv6AcceptRA=false - -[DHCP] -CriticalConnection=true +KeepConfiguration=dhcp-on-stop diff --git a/test/test-network/conf/dhcp-client-keep-configuration-dhcp.network b/test/test-network/conf/dhcp-client-keep-configuration-dhcp.network new file mode 100644 index 00000000000..c43f78d1dea --- /dev/null +++ b/test/test-network/conf/dhcp-client-keep-configuration-dhcp.network @@ -0,0 +1,7 @@ +[Match] +Name=veth99 + +[Network] +DHCP=ipv4 +IPv6AcceptRA=false +KeepConfiguration=dhcp diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 5ba799036ab..ddb2465e1da 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -1235,6 +1235,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): '11-dummy.netdev', '12-dummy.netdev', '23-active-slave.network', + '24-keep-configuration-static.network', '24-search-domain.network', '25-address-link-section.network', '25-address-preferred-lifetime-zero-ipv6.network', @@ -1658,6 +1659,28 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): self.assertRegex(output, 'DNS: 192.168.42.1') self.assertRegex(output, 'Search Domains: one') + def test_keep_configuration_static(self): + check_output('systemctl stop systemd-networkd') + + check_output('ip link add name dummy98 type dummy') + check_output('ip address add 10.1.2.3/16 dev dummy98') + check_output('ip address add 10.2.3.4/16 dev dummy98 valid_lft 600 preferred_lft 500') + output = check_output('ip address show dummy98') + print(output) + self.assertRegex(output, 'inet 10.1.2.3/16 scope global dummy98') + self.assertRegex(output, 'inet 10.2.3.4/16 scope global dynamic dummy98') + output = check_output('ip route show dev dummy98') + print(output) + + copy_unit_to_networkd_unit_path('24-keep-configuration-static.network') + start_networkd(0) + wait_online(['dummy98:routable']) + + output = check_output('ip address show dummy98') + print(output) + self.assertRegex(output, 'inet 10.1.2.3/16 scope global dummy98') + self.assertNotRegex(output, 'inet 10.2.3.4/16 scope global dynamic dummy98') + class NetworkdBondTests(unittest.TestCase, Utilities): links = [ 'bond199', @@ -2026,13 +2049,14 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): '25-vrf.netdev', '25-vrf.network', 'dhcp-client-anonymize.network', - 'dhcp-client-critical-connection.network', 'dhcp-client-gateway-onlink-implicit.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-keep-configuration-dhcp-on-stop.network', + 'dhcp-client-keep-configuration-dhcp.network', 'dhcp-client-listen-port.network', 'dhcp-client-route-metric.network', 'dhcp-client-route-table.network', @@ -2210,26 +2234,84 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): print(output) self.assertRegex(output, 'metric 24') - def test_dhcp_route_criticalconnection_true(self): - copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-critical-connection.network') + def test_dhcp_keep_configuration_dhcp(self): + copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-keep-configuration-dhcp.network') start_networkd(0) wait_online(['veth-peer:carrier']) - start_dnsmasq() + start_dnsmasq(lease_time='2m') wait_online(['veth99:routable', 'veth-peer:routable']) + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + output = check_output(*networkctl_cmd, 'status', 'veth99', env=env) print(output) - self.assertRegex(output, '192.168.5.*') + self.assertRegex(output, r'192.168.5.*') # Stopping dnsmasq as networkd won't be allowed to renew the DHCP lease. stop_dnsmasq(dnsmasq_pid_file) # Sleep for 120 sec as the dnsmasq minimum lease time can only be set to 120 + print('Wait for the dynamic address to be expired') time.sleep(125) + print('The lease address should be kept after lease expired') + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + output = check_output(*networkctl_cmd, 'status', 'veth99', env=env) print(output) - self.assertRegex(output, '192.168.5.*') + self.assertRegex(output, r'192.168.5.*') + + check_output('systemctl stop systemd-networkd') + + print('The lease address should be kept after networkd stopped') + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + + output = check_output(*networkctl_cmd, 'status', 'veth99', env=env) + print(output) + self.assertRegex(output, r'192.168.5.*') + + check_output('systemctl start systemd-networkd') + wait_online(['veth-peer:routable']) + + print('Still the lease address should be kept after networkd restarted') + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + + output = check_output(*networkctl_cmd, 'status', 'veth99', env=env) + print(output) + self.assertRegex(output, r'192.168.5.*') + + def test_dhcp_keep_configuration_dhcp_on_stop(self): + copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-keep-configuration-dhcp-on-stop.network') + start_networkd(0) + wait_online(['veth-peer:carrier']) + start_dnsmasq(lease_time='2m') + wait_online(['veth99:routable', 'veth-peer:routable']) + + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + + stop_dnsmasq(dnsmasq_pid_file) + check_output('systemctl stop systemd-networkd') + + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertRegex(output, r'192.168.5.*') + + start_networkd(0) + wait_online(['veth-peer:routable']) + + output = check_output('ip address show dev veth99 scope global') + print(output) + self.assertNotRegex(output, r'192.168.5.*') def test_dhcp_client_reuse_address_as_static(self): copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client.network') -- 2.39.2