test-network: add test for sysctl watch

Add a NetworkdSysctlTest class which ensures that networkd correctly
complains when a sysctl file it's handling has been changed externally.
This commit is contained in:
Matteo Croce
2024-07-01 21:58:30 +02:00
parent 6d9ef22acd
commit c78bcda461

View File

@@ -8034,6 +8034,38 @@ class NetworkdMTUTests(unittest.TestCase, Utilities):
copy_network_unit('12-dummy.netdev', '12-dummy-mtu.link', '12-dummy.network.d/ipv6-mtu-1550.conf')
self.check_mtu('1600', '1550', reset=False)
class NetworkdSysctlTest(unittest.TestCase, Utilities):
def setUp(self):
setup_common()
def tearDown(self):
tear_down_common()
@unittest.skipUnless(compare_kernel_version("6.12"), reason="On kernels <= 6.12, bpf_current_task_under_cgroup() isn't available for program types BPF_PROG_TYPE_CGROUP_SYSCTL")
def check_sysctl_watch(self):
copy_network_unit('12-dummy.network', '12-dummy.netdev', '12-dummy.link')
start_networkd()
self.wait_online('dummy98:routable')
# Change managed sysctls
call('sysctl -w net.ipv6.conf.dummy98.accept_ra=1')
call('sysctl -w net.ipv6.conf.dummy98.mtu=1360')
call('sysctl -w net.ipv4.conf.dummy98.promote_secondaries=0')
call('sysctl -w net.ipv6.conf.dummy98.proxy_ndp=1')
# And unmanaged ones
call('sysctl -w net.ipv6.conf.dummy98.hop_limit=4')
call('sysctl -w net.ipv6.conf.dummy98.max_addresses=10')
log=read_networkd_log()
self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/accept_ra' from '0' to '1', conflicting with our setting to '0'")
self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/mtu' from '1550' to '1360', conflicting with our setting to '1550'")
self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv4/conf/dummy98/promote_secondaries' from '1' to '0', conflicting with our setting to '1'")
self.assertRegex(log, r"Foreign process 'sysctl\[\d+\]' changed sysctl '/proc/sys/net/ipv6/conf/dummy98/proxy_ndp' from '0' to '1', conflicting with our setting to '0'")
self.assertNotIn("changed sysctl '/proc/sys/net/ipv6/conf/dummy98/hop_limit'", log)
self.assertNotIn("changed sysctl '/proc/sys/net/ipv6/conf/dummy98/max_addresses'", log)
if __name__ == '__main__':
parser = argparse.ArgumentParser()