diff options
Diffstat (limited to 'tests/integration_tests/test_networking.py')
-rw-r--r-- | tests/integration_tests/test_networking.py | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/integration_tests/test_networking.py b/tests/integration_tests/test_networking.py new file mode 100644 index 00000000..cde69afc --- /dev/null +++ b/tests/integration_tests/test_networking.py @@ -0,0 +1,93 @@ +"""Networking-related tests.""" +import pytest +import yaml + +from tests.integration_tests.instances import IntegrationInstance +from tests.integration_tests.integration_settings import PLATFORM + + +def _add_dummy_bridge_to_netplan(client: IntegrationInstance): + # Update netplan configuration to ensure it doesn't change on reboot + netplan = yaml.safe_load( + client.execute("cat /etc/netplan/50-cloud-init.yaml") + ) + # Just a dummy bridge to do nothing + try: + netplan["network"]["bridges"]["dummy0"] = {"dhcp4": False} + except KeyError: + netplan["network"]["bridges"] = {"dummy0": {"dhcp4": False}} + + dumped_netplan = yaml.dump(netplan) + client.write_to_file("/etc/netplan/50-cloud-init.yaml", dumped_netplan) + + +USER_DATA = """\ +#cloud-config +updates: + network: + when: [boot] +""" + + +@pytest.mark.skipif( + PLATFORM not in ("lxd_container", "lxd_vm"), + reason=( + f"{PLATFORM} could make nic changes in a reboot event invalidating" + f" these tests." + ), +) +@pytest.mark.user_data(USER_DATA) +class TestNetplanGenerateBehaviorOnReboot: + def test_skip(self, client: IntegrationInstance): + log = client.read_from_file("/var/log/cloud-init.log") + assert "Applying network configuration" in log + assert "Selected renderer 'netplan'" in log + client.execute( + "mv /var/log/cloud-init.log /var/log/cloud-init.log.bak" + ) + netplan = yaml.safe_load( + client.execute("cat /etc/netplan/50-cloud-init.yaml") + ) + + client.restart() + + log = client.read_from_file("/var/log/cloud-init.log") + assert "Event Allowed: scope=network EventType=boot" in log + assert "Applying network configuration" in log + assert "Running command ['netplan', 'generate']" not in log + assert ( + "skipping call to `netplan generate`." + " reason: identical netplan config" + ) in log + netplan_new = yaml.safe_load( + client.execute("cat /etc/netplan/50-cloud-init.yaml") + ) + assert netplan == netplan_new, "no changes expected in netplan config" + + def test_applied(self, client: IntegrationInstance): + log = client.read_from_file("/var/log/cloud-init.log") + assert "Applying network configuration" in log + assert "Selected renderer 'netplan'" in log + client.execute( + "mv /var/log/cloud-init.log /var/log/cloud-init.log.bak" + ) + # fake a change in the rendered network config file + _add_dummy_bridge_to_netplan(client) + netplan = yaml.safe_load( + client.execute("cat /etc/netplan/50-cloud-init.yaml") + ) + + client.restart() + + log = client.read_from_file("/var/log/cloud-init.log") + assert "Event Allowed: scope=network EventType=boot" in log + assert "Applying network configuration" in log + assert ( + "skipping call to `netplan generate`." + " reason: identical netplan config" + ) not in log + assert "Running command ['netplan', 'generate']" in log + netplan_new = yaml.safe_load( + client.execute("cat /etc/netplan/50-cloud-init.yaml") + ) + assert netplan != netplan_new, "changes expected in netplan config" |