diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index 7a962ba708..911f79f404 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -215,7 +215,7 @@ def expectedFailureIfNetdevsimWithSRIOVIsNotAvailable(): return unittest.expectedFailure(func) try: - with open('/sys/bus/netdevsim/new_device', mode='w') as f: + with open('/sys/bus/netdevsim/new_device', mode='w', encoding='utf-8') as f: f.write('99 1') except OSError: return unittest.expectedFailure(func) @@ -223,7 +223,7 @@ def expectedFailureIfNetdevsimWithSRIOVIsNotAvailable(): call('udevadm settle') call('udevadm info -w10s /sys/devices/netdevsim99/net/eni99np1', stderr=subprocess.DEVNULL) try: - with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w') as f: + with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w', encoding='utf-8') as f: f.write('3') except OSError: call('rmmod netdevsim', stderr=subprocess.DEVNULL) @@ -295,9 +295,6 @@ def expectedFailureIfFQPIEIsNotAvailable(): return f def setUpModule(): - # pylint: disable=global-statement - global running_units - os.makedirs(network_unit_file_path, exist_ok=True) os.makedirs(networkd_conf_dropin_path, exist_ok=True) os.makedirs(networkd_ci_path, exist_ok=True) @@ -321,14 +318,19 @@ def setUpModule(): '[Service]', 'Restart=no', 'ExecStart=', + 'ExecReload=', ] if use_valgrind: drop_in += [ 'ExecStart=!!valgrind --track-origins=yes --leak-check=full --show-leak-kinds=all ' + networkd_bin, + f'ExecReload=valgrind {networkctl_bin} reload', 'PrivateTmp=yes' ] else: - drop_in += ['ExecStart=!!' + networkd_bin] + drop_in += [ + 'ExecStart=!!' + networkd_bin, + f'ExecReload={networkctl_bin} reload', + ] if enable_debug: drop_in += ['Environment=SYSTEMD_LOG_LEVEL=debug'] if asan_options: @@ -348,7 +350,7 @@ def setUpModule(): ] os.makedirs('/run/systemd/system/systemd-networkd.service.d', exist_ok=True) - with open('/run/systemd/system/systemd-networkd.service.d/00-override.conf', mode='w') as f: + with open('/run/systemd/system/systemd-networkd.service.d/00-override.conf', mode='w', encoding='utf-8') as f: f.write('\n'.join(drop_in)) drop_in = [ @@ -379,7 +381,7 @@ def setUpModule(): ] os.makedirs('/run/systemd/system/systemd-resolved.service.d', exist_ok=True) - with open('/run/systemd/system/systemd-resolved.service.d/00-override.conf', mode='w') as f: + with open('/run/systemd/system/systemd-resolved.service.d/00-override.conf', mode='w', encoding='utf-8') as f: f.write('\n'.join(drop_in)) drop_in = [ @@ -389,7 +391,7 @@ def setUpModule(): ] os.makedirs('/run/systemd/system/systemd-udevd.service.d', exist_ok=True) - with open('/run/systemd/system/systemd-udevd.service.d/00-override.conf', mode='w') as f: + with open('/run/systemd/system/systemd-udevd.service.d/00-override.conf', mode='w', encoding='utf-8') as f: f.write('\n'.join(drop_in)) check_output('systemctl daemon-reload') @@ -400,9 +402,6 @@ def setUpModule(): check_output('systemctl restart systemd-udevd') def tearDownModule(): - # pylint: disable=global-statement - global running_units - shutil.rmtree(networkd_ci_path) os.remove(os.path.join(udev_rules_dir, '00-debug-net.rules')) @@ -419,7 +418,7 @@ def tearDownModule(): check_output(f'systemctl start {u}') def read_link_attr(*args): - with open(os.path.join('/sys/class/net/', *args)) as f: + with open(os.path.join('/sys/class/net/', *args), encoding='utf-8') as f: return f.readline().strip() def read_bridge_port_attr(bridge, link, attribute): @@ -427,7 +426,7 @@ def read_bridge_port_attr(bridge, link, attribute): path_port = 'lower_' + link + '/brport' path = os.path.join(path_bridge, path_port) - with open(os.path.join(path, attribute)) as f: + with open(os.path.join(path, attribute), encoding='utf-8') as f: return f.readline().strip() def link_exists(link): @@ -472,11 +471,11 @@ def remove_l2tp_tunnels(tunnel_ids): time.sleep(1) def read_ipv6_sysctl_attr(link, attribute): - with open(os.path.join(os.path.join(network_sysctl_ipv6_path, link), attribute)) as f: + with open(os.path.join(os.path.join(network_sysctl_ipv6_path, link), attribute), encoding='utf-8') as f: return f.readline().strip() def read_ipv4_sysctl_attr(link, attribute): - with open(os.path.join(os.path.join(network_sysctl_ipv4_path, link), attribute)) as f: + with open(os.path.join(os.path.join(network_sysctl_ipv4_path, link), attribute), encoding='utf-8') as f: return f.readline().strip() def copy_unit_to_networkd_unit_path(*units, dropins=True): @@ -529,7 +528,7 @@ def start_dnsmasq(additional_options='', interface='veth-peer', ipv4_range='192. def stop_by_pid_file(pid_file): if os.path.exists(pid_file): - with open(pid_file, 'r') as f: + with open(pid_file, 'r', encoding='utf-8') as f: pid = f.read().rstrip(' \t\r\n\0') os.kill(int(pid), signal.SIGTERM) for _ in range(25): @@ -549,19 +548,19 @@ def stop_dnsmasq(): def dump_dnsmasq_log_file(): if os.path.exists(dnsmasq_log_file): - with open (dnsmasq_log_file) as in_file: + with open (dnsmasq_log_file, encoding='utf-8') as in_file: print(in_file.read()) def search_words_in_dnsmasq_log(words, show_all=False): if os.path.exists(dnsmasq_log_file): - with open (dnsmasq_log_file) as in_file: + with open (dnsmasq_log_file, encoding='utf-8') as in_file: contents = in_file.read() if show_all: print(contents) for line in contents.splitlines(): if words in line: in_file.close() - print("%s, %s" % (words, line)) + print(f"{words}, {line}") return True return False @@ -1284,7 +1283,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.tearDown() copy_unit_to_networkd_unit_path('21-macvtap.netdev', '26-netdev-link-local-addressing-yes.network', '11-dummy.netdev', '25-macvtap.network') - with open(os.path.join(network_unit_file_path, '21-macvtap.netdev'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '21-macvtap.netdev'), mode='a', encoding='utf-8') as f: f.write('[MACVTAP]\nMode=' + mode) start_networkd() @@ -1302,7 +1301,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.tearDown() copy_unit_to_networkd_unit_path('21-macvlan.netdev', '26-netdev-link-local-addressing-yes.network', '11-dummy.netdev', '25-macvlan.network') - with open(os.path.join(network_unit_file_path, '21-macvlan.netdev'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '21-macvlan.netdev'), mode='a', encoding='utf-8') as f: f.write('[MACVLAN]\nMode=' + mode) start_networkd() @@ -1346,7 +1345,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.tearDown() copy_unit_to_networkd_unit_path('25-ipvlan.netdev', '26-netdev-link-local-addressing-yes.network', '11-dummy.netdev', '25-ipvlan.network') - with open(os.path.join(network_unit_file_path, '25-ipvlan.netdev'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-ipvlan.netdev'), mode='a', encoding='utf-8') as f: f.write('[IPVLAN]\nMode=' + mode + '\nFlags=' + flag) start_networkd() @@ -1364,7 +1363,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities): self.tearDown() copy_unit_to_networkd_unit_path('25-ipvtap.netdev', '26-netdev-link-local-addressing-yes.network', '11-dummy.netdev', '25-ipvtap.network') - with open(os.path.join(network_unit_file_path, '25-ipvtap.netdev'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-ipvtap.netdev'), mode='a', encoding='utf-8') as f: f.write('[IPVTAP]\nMode=' + mode + '\nFlags=' + flag) start_networkd() @@ -3672,7 +3671,7 @@ class NetworkdStateFileTests(unittest.TestCase, Utilities): # TODO: check json string check_output(*networkctl_cmd, '--json=short', 'status', env=env) - with open(path) as f: + with open(path, encoding='utf-8') as f: data = f.read() self.assertRegex(data, r'IPV4_ADDRESS_STATE=routable') self.assertRegex(data, r'IPV6_ADDRESS_STATE=routable') @@ -3701,7 +3700,7 @@ class NetworkdStateFileTests(unittest.TestCase, Utilities): # TODO: check json string check_output(*networkctl_cmd, '--json=short', 'status', env=env) - with open(path) as f: + with open(path, encoding='utf-8') as f: data = f.read() self.assertRegex(data, r'DNS=10.10.10.12#ccc.com 10.10.10.13 1111:2222::3333') self.assertRegex(data, r'NTP=2.fedora.pool.ntp.org 3.fedora.pool.ntp.org') @@ -3716,7 +3715,7 @@ class NetworkdStateFileTests(unittest.TestCase, Utilities): # TODO: check json string check_output(*networkctl_cmd, '--json=short', 'status', env=env) - with open(path) as f: + with open(path, encoding='utf-8') as f: data = f.read() self.assertRegex(data, r'DNS=10.10.10.12#ccc.com 10.10.10.13 1111:2222::3333') self.assertRegex(data, r'NTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org') @@ -3731,7 +3730,7 @@ class NetworkdStateFileTests(unittest.TestCase, Utilities): # TODO: check json string check_output(*networkctl_cmd, '--json=short', 'status', env=env) - with open(path) as f: + with open(path, encoding='utf-8') as f: data = f.read() self.assertRegex(data, r'DNS=10.10.10.10#aaa.com 10.10.10.11:1111#bbb.com \[1111:2222::3333\]:1234#ccc.com') self.assertRegex(data, r'NTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org') @@ -4163,12 +4162,12 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): def test_sriov(self): call('modprobe netdevsim', stderr=subprocess.DEVNULL) - with open('/sys/bus/netdevsim/new_device', mode='w') as f: + with open('/sys/bus/netdevsim/new_device', mode='w', encoding='utf-8') as f: f.write('99 1') call('udevadm settle') call('udevadm info -w10s /sys/devices/netdevsim99/net/eni99np1', stderr=subprocess.DEVNULL) - with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w') as f: + with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w', encoding='utf-8') as f: f.write('3') copy_unit_to_networkd_unit_path('25-sriov.network') @@ -4190,7 +4189,7 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): copy_unit_to_networkd_unit_path('25-sriov.link', '25-sriov-udev.network') call('udevadm control --reload') - with open('/sys/bus/netdevsim/new_device', mode='w') as f: + with open('/sys/bus/netdevsim/new_device', mode='w', encoding='utf-8') as f: f.write('99 1') start_networkd() @@ -4206,7 +4205,7 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): self.assertNotIn('vf 3', output) self.assertNotIn('vf 4', output) - with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a', encoding='utf-8') as f: f.write('[Link]\nSR-IOVVirtualFunctions=4\n') call('udevadm control --reload') @@ -4222,7 +4221,7 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): ) self.assertNotIn('vf 4', output) - with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a', encoding='utf-8') as f: f.write('[Link]\nSR-IOVVirtualFunctions=\n') call('udevadm control --reload') @@ -4238,7 +4237,7 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): ) self.assertNotIn('vf 4', output) - with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a', encoding='utf-8') as f: f.write('[Link]\nSR-IOVVirtualFunctions=2\n') call('udevadm control --reload') @@ -4254,7 +4253,7 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities): self.assertNotIn('vf 3', output) self.assertNotIn('vf 4', output) - with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-sriov.link'), mode='a', encoding='utf-8') as f: f.write('[Link]\nSR-IOVVirtualFunctions=\n') call('udevadm control --reload') @@ -4907,7 +4906,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): print(output) self.assertRegex(output, r'192.168.5.*') - with open(os.path.join(network_unit_file_path, '25-dhcp-client-keep-configuration-dhcp.network'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-dhcp-client-keep-configuration-dhcp.network'), mode='a', encoding='utf-8') as f: f.write('[Network]\nDHCP=no\n') start_networkd() @@ -4971,7 +4970,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): remove_unit_from_networkd_path(['25-dhcp-client.network']) - with open(os.path.join(network_unit_file_path, '25-static.network'), mode='w') as f: + with open(os.path.join(network_unit_file_path, '25-static.network'), mode='w', encoding='utf-8') as f: f.write(static_network) # When networkd started, the links are already configured, so let's wait for 5 seconds @@ -5046,7 +5045,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities): self.assertRegex(output, 'default via 192.168.5.1 proto dhcp src 192.168.5.[0-9]*') self.assertIn('10.0.0.0/8 via 192.168.5.1 proto dhcp', output) - with open(os.path.join(network_unit_file_path, '25-dhcp-client-gateway-ipv4.network'), mode='a') as f: + with open(os.path.join(network_unit_file_path, '25-dhcp-client-gateway-ipv4.network'), mode='a', encoding='utf-8') as f: f.write('[DHCPv4]\nUseGateway=no\n') rc = call(*networkctl_cmd, 'reload', env=env) @@ -5704,8 +5703,8 @@ class NetworkdDHCPPDTests(unittest.TestCase, Utilities): print(output) self.assertRegex(output, '2001:db8:6464:[0-9a-f]+01::/64 proto kernel metric [0-9]* expires') - print('### ip -d link show dev {}'.format(tunnel_name)) - output = check_output('ip -d link show dev {}'.format(tunnel_name)) + print(f'### ip -d link show dev {tunnel_name}') + output = check_output(f'ip -d link show dev {tunnel_name}') print(output) self.assertIn('link/sit 10.100.100.', output) self.assertIn('local 10.100.100.', output) @@ -5713,14 +5712,14 @@ class NetworkdDHCPPDTests(unittest.TestCase, Utilities): self.assertIn('6rd-prefix 2001:db8::/32', output) self.assertIn('6rd-relay_prefix 10.0.0.0/8', output) - print('### ip -6 address show dev {}'.format(tunnel_name)) - output = check_output('ip -6 address show dev {}'.format(tunnel_name)) + print(f'### ip -6 address show dev {tunnel_name}') + output = check_output(f'ip -6 address show dev {tunnel_name}') print(output) self.assertRegex(output, 'inet6 2001:db8:6464:[0-9a-f]+0[23]:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*:[0-9a-f]*/64 (metric 256 |)scope global dynamic') self.assertRegex(output, 'inet6 ::10.100.100.[0-9]+/96 scope global') - print('### ip -6 route show dev {}'.format(tunnel_name)) - output = check_output('ip -6 route show dev {}'.format(tunnel_name)) + print(f'### ip -6 route show dev {tunnel_name}') + output = check_output(f'ip -6 route show dev {tunnel_name}') print(output) self.assertRegex(output, '2001:db8:6464:[0-9a-f]+0[23]::/64 proto kernel metric [0-9]* expires') self.assertRegex(output, '::/96 proto kernel metric [0-9]*') @@ -5729,7 +5728,7 @@ class NetworkdDHCPPDTests(unittest.TestCase, Utilities): output = check_output('ip -6 route show default') print(output) self.assertIn('default', output) - self.assertIn('via ::10.0.0.1 dev {}'.format(tunnel_name), output) + self.assertIn(f'via ::10.0.0.1 dev {tunnel_name}', output) def test_dhcp4_6rd(self): copy_unit_to_networkd_unit_path('25-veth.netdev', '25-dhcp4-6rd-server.network', '25-dhcp4-6rd-upstream.network', @@ -5763,7 +5762,7 @@ class NetworkdDHCPPDTests(unittest.TestCase, Utilities): tunnel_name = name break - self.wait_online(['{}:routable'.format(tunnel_name)]) + self.wait_online([f'{tunnel_name}:routable']) self.verify_dhcp4_6rd(tunnel_name)