summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJames Falcon <james.falcon@canonical.com>2021-11-02 11:11:26 -0500
committerGitHub <noreply@github.com>2021-11-02 11:11:26 -0500
commitd54e23bf61bb61af9aef3b30f41084d93961b7e3 (patch)
tree0f2a77f068da7f3cb6db2b0096b1074675dcc5ed /tests
parent773765346ba543987aa64a1119fa760f0b1cbb6f (diff)
downloadvyos-cloud-init-d54e23bf61bb61af9aef3b30f41084d93961b7e3.tar.gz
vyos-cloud-init-d54e23bf61bb61af9aef3b30f41084d93961b7e3.zip
testing: Remove calls to 'install_new_cloud_init' (#1092)
In our integration tests, a few tests were modifying the environment and then calling 'install_new_cloud_init'. This is problematic because it updates the environment for all future tests. Other instances of 'install_new_cloud_init' aren't problematic because they aren't modifying the underlying environment.
Diffstat (limited to 'tests')
-rw-r--r--tests/integration_tests/datasources/test_lxd_discovery.py100
-rw-r--r--tests/integration_tests/datasources/test_network_dependency.py33
2 files changed, 52 insertions, 81 deletions
diff --git a/tests/integration_tests/datasources/test_lxd_discovery.py b/tests/integration_tests/datasources/test_lxd_discovery.py
index f7d8bfc3..be76e179 100644
--- a/tests/integration_tests/datasources/test_lxd_discovery.py
+++ b/tests/integration_tests/datasources/test_lxd_discovery.py
@@ -2,30 +2,17 @@ import json
import pytest
import yaml
-from tests.integration_tests.clouds import IntegrationCloud
-from tests.integration_tests.conftest import get_validated_source
+from tests.integration_tests.instances import IntegrationInstance
from tests.integration_tests.util import verify_clean_log
-def _setup_custom_image(session_cloud: IntegrationCloud):
- """Like `setup_image` in conftest.py, but with customized content."""
- source = get_validated_source(session_cloud)
- if not source.installs_new_version():
- return
- client = session_cloud.launch()
-
- # Insert our "detect_lxd_ds" file here
+def _customize_envionment(client: IntegrationInstance):
client.write_to_file(
'/etc/cloud/cloud.cfg.d/99-detect-lxd.cfg',
'datasource_list: [LXD]\n',
)
-
- client.execute('rm -f /etc/netplan/50-cloud-init.yaml')
-
- client.install_new_cloud_init(source)
- # Even if we're keeping instances, we don't want to keep this
- # one around as it was just for image creation
- client.destroy()
+ client.execute('cloud-init clean --logs')
+ client.restart()
# This test should be able to work on any cloud whose datasource specifies
@@ -33,48 +20,43 @@ def _setup_custom_image(session_cloud: IntegrationCloud):
@pytest.mark.lxd_container
@pytest.mark.lxd_vm
@pytest.mark.ubuntu # Because netplan
-def test_lxd_datasource_discovery(session_cloud: IntegrationCloud):
+def test_lxd_datasource_discovery(client: IntegrationInstance):
"""Test that DataSourceLXD is detected instead of NoCloud."""
- _setup_custom_image(session_cloud)
- nic_dev = "eth0"
- if session_cloud.settings.PLATFORM == "lxd_vm":
- nic_dev = "enp5s0"
-
- with session_cloud.launch() as client:
- result = client.execute('cloud-init status --long')
- if not result.ok:
- raise AssertionError('cloud-init failed:\n%s',
- result.stderr)
- if "DataSourceLXD" not in result.stdout:
- raise AssertionError(
- 'cloud-init did not discover DataSourceLXD', result.stdout
- )
- netplan_yaml = client.execute('cat /etc/netplan/50-cloud-init.yaml')
- netplan_cfg = yaml.safe_load(netplan_yaml)
- assert {
- 'network': {'ethernets': {nic_dev: {'dhcp4': True}}, 'version': 2}
- } == netplan_cfg
- log = client.read_from_file('/var/log/cloud-init.log')
- verify_clean_log(log)
- result = client.execute('cloud-id')
- if "lxd" != result.stdout:
- raise AssertionError(
- "cloud-id didn't report lxd. Result: %s", result.stdout
- )
- # Validate config instance data represented
- data = json.loads(client.read_from_file(
- '/run/cloud-init/instance-data.json')
+ _customize_envionment(client)
+ nic_dev = "enp5s0" if client.settings.PLATFORM == "lxd_vm" else "eth0"
+ result = client.execute('cloud-init status --long')
+ if not result.ok:
+ raise AssertionError('cloud-init failed:\n%s', result.stderr)
+ if "DataSourceLXD" not in result.stdout:
+ raise AssertionError(
+ 'cloud-init did not discover DataSourceLXD', result.stdout
)
- v1 = data["v1"]
- ds_cfg = data["ds"]
- assert "lxd" == v1["platform"]
- assert "LXD socket API v. 1.0 (/dev/lxd/sock)" == v1["subplatform"]
- ds_cfg = json.loads(client.execute('cloud-init query ds').stdout)
- assert ["config", "meta_data"] == sorted(list(ds_cfg["1.0"].keys()))
- assert ["user.meta_data"] == list(ds_cfg["1.0"]["config"].keys())
- assert {"public-keys": v1["public_ssh_keys"][0]} == (
- yaml.safe_load(ds_cfg["1.0"]["config"]["user.meta_data"])
- )
- assert (
- "#cloud-config\ninstance-id" in ds_cfg["1.0"]["meta_data"]
+ netplan_yaml = client.execute('cat /etc/netplan/50-cloud-init.yaml')
+ netplan_cfg = yaml.safe_load(netplan_yaml)
+ assert {
+ 'network': {'ethernets': {nic_dev: {'dhcp4': True}}, 'version': 2}
+ } == netplan_cfg
+ log = client.read_from_file('/var/log/cloud-init.log')
+ verify_clean_log(log)
+ result = client.execute('cloud-id')
+ if result.stdout != "lxd":
+ raise AssertionError(
+ "cloud-id didn't report lxd. Result: %s", result.stdout
)
+ # Validate config instance data represented
+ data = json.loads(client.read_from_file(
+ '/run/cloud-init/instance-data.json')
+ )
+ v1 = data["v1"]
+ ds_cfg = data["ds"]
+ assert "lxd" == v1["platform"]
+ assert "LXD socket API v. 1.0 (/dev/lxd/sock)" == v1["subplatform"]
+ ds_cfg = json.loads(client.execute('cloud-init query ds').stdout)
+ assert ["config", "meta_data"] == sorted(list(ds_cfg["1.0"].keys()))
+ assert ["user.meta_data"] == list(ds_cfg["1.0"]["config"].keys())
+ assert {"public-keys": v1["public_ssh_keys"][0]} == (
+ yaml.safe_load(ds_cfg["1.0"]["config"]["user.meta_data"])
+ )
+ assert (
+ "#cloud-config\ninstance-id" in ds_cfg["1.0"]["meta_data"]
+ )
diff --git a/tests/integration_tests/datasources/test_network_dependency.py b/tests/integration_tests/datasources/test_network_dependency.py
index 2e5e3121..24e71f9d 100644
--- a/tests/integration_tests/datasources/test_network_dependency.py
+++ b/tests/integration_tests/datasources/test_network_dependency.py
@@ -1,41 +1,30 @@
import pytest
-from tests.integration_tests.clouds import IntegrationCloud
-from tests.integration_tests.conftest import get_validated_source
+from tests.integration_tests.instances import IntegrationInstance
-def _setup_custom_image(session_cloud: IntegrationCloud):
- """Like `setup_image` in conftest.py, but with customized content."""
- source = get_validated_source(session_cloud)
- if not source.installs_new_version():
- return
- client = session_cloud.launch()
-
+def _customize_envionment(client: IntegrationInstance):
# Insert our "disable_network_activation" file here
client.write_to_file(
'/etc/cloud/cloud.cfg.d/99-disable-network-activation.cfg',
'disable_network_activation: true\n',
)
-
- client.install_new_cloud_init(source)
- # Even if we're keeping instances, we don't want to keep this
- # one around as it was just for image creation
- client.destroy()
+ client.execute('cloud-init clean --logs')
+ client.restart()
# This test should be able to work on any cloud whose datasource specifies
# a NETWORK dependency
@pytest.mark.gce
@pytest.mark.ubuntu # Because netplan
-def test_network_activation_disabled(session_cloud: IntegrationCloud):
+def test_network_activation_disabled(client: IntegrationInstance):
"""Test that the network is not activated during init mode."""
- _setup_custom_image(session_cloud)
- with session_cloud.launch() as client:
- result = client.execute('systemctl status google-guest-agent.service')
- if not result.ok:
- raise AssertionError('google-guest-agent is not active:\n%s',
- result.stdout)
- log = client.read_from_file('/var/log/cloud-init.log')
+ _customize_envionment(client)
+ result = client.execute('systemctl status google-guest-agent.service')
+ if not result.ok:
+ raise AssertionError(
+ 'google-guest-agent is not active:\n%s', result.stdout)
+ log = client.read_from_file('/var/log/cloud-init.log')
assert "Running command ['netplan', 'apply']" not in log