diff options
author | Brett Holman <brett.holman@canonical.com> | 2023-03-19 19:24:49 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-19 20:24:49 -0500 |
commit | a60c0845806baff72c74603286d048efbafab664 (patch) | |
tree | 4ae8acc8555cc90948e8895ca72f599c4ec96d3a /tests/unittests/sources/test_oracle.py | |
parent | 3634678465e7b8f8608bcb9a1f5773ae7837cbe9 (diff) | |
download | cloud-init-git-a60c0845806baff72c74603286d048efbafab664.tar.gz |
datasource: Optimize datasource detection, fix bugs (#2060)
Commit d1ffbea556a06105 enabled skipping python datasource detection on
OpenStack when no other datasources (besides DataSourceNone) can be discovered.
This allowed one to override detection, which is a requirement for OpenStack
Ironic which does not advertise itself to cloud-init.
Since no further datasources can be detected at this stage in the code, this
pattern can be generalized to other datasources to facilitate troubleshooting
or providing a general workaround to runtime detection bugs.
Additionally, this pattern can be extended to kernel commandline datasource
definition. Since kernel commandline is highest priority of the
configurations, it makes sense to override python code datasource
detection as well.
Include an integration test on LXD for this behavior that configures kernel
commandline and reboots to verify that the specified datasource is forced.
Diffstat (limited to 'tests/unittests/sources/test_oracle.py')
-rw-r--r-- | tests/unittests/sources/test_oracle.py | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/tests/unittests/sources/test_oracle.py b/tests/unittests/sources/test_oracle.py index 156bf9f5..c67cacef 100644 --- a/tests/unittests/sources/test_oracle.py +++ b/tests/unittests/sources/test_oracle.py @@ -121,7 +121,7 @@ def oracle_ds(request, fixture_utils, paths, metadata_version, mocker): This also performs the mocking required: * ``_read_system_uuid`` returns something, - * ``_is_platform_viable`` returns True, + * ``ds_detect`` returns True, * ``DataSourceOracle._is_iscsi_root`` returns True by default or what pytest.mark.is_iscsi gives as first param, * ``DataSourceOracle._get_iscsi_config`` returns a network cfg if @@ -144,7 +144,7 @@ def oracle_ds(request, fixture_utils, paths, metadata_version, mocker): mocker.patch(DS_PATH + ".net.find_fallback_nic") mocker.patch(DS_PATH + ".ephemeral.EphemeralDHCPv4") mocker.patch(DS_PATH + "._read_system_uuid", return_value="someuuid") - mocker.patch(DS_PATH + "._is_platform_viable", return_value=True) + mocker.patch(DS_PATH + ".DataSourceOracle.ds_detect", return_value=True) mocker.patch(DS_PATH + ".read_opc_metadata", return_value=metadata) mocker.patch(DS_PATH + ".KlibcOracleNetworkConfigSource") ds = oracle.DataSourceOracle( @@ -170,7 +170,7 @@ class TestDataSourceOracle: assert "unknown" == oracle_ds.subplatform def test_platform_info_after_fetch(self, oracle_ds): - oracle_ds._get_data() + oracle_ds._check_and_get_data() assert ( "metadata (http://169.254.169.254/opc/v2/)" == oracle_ds.subplatform @@ -178,7 +178,7 @@ class TestDataSourceOracle: @pytest.mark.parametrize("metadata_version", [1]) def test_v1_platform_info_after_fetch(self, oracle_ds): - oracle_ds._get_data() + oracle_ds._check_and_get_data() assert ( "metadata (http://169.254.169.254/opc/v1/)" == oracle_ds.subplatform @@ -206,11 +206,11 @@ class TestIsPlatformViable: ("LetsGoCubs", False), ], ) - def test_is_platform_viable(self, dmi_data, platform_viable): + def test_ds_detect(self, dmi_data, platform_viable): with mock.patch( DS_PATH + ".dmi.read_dmi_data", return_value=dmi_data ) as m_read_dmi_data: - assert platform_viable == oracle._is_platform_viable() + assert platform_viable == oracle.DataSourceOracle.ds_detect() m_read_dmi_data.assert_has_calls([mock.call("chassis-asset-tag")]) @@ -830,13 +830,13 @@ class TestCommon_GetDataBehaviour: """ @mock.patch( - DS_PATH + "._is_platform_viable", mock.Mock(return_value=False) + DS_PATH + ".DataSourceOracle.ds_detect", mock.Mock(return_value=False) ) def test_false_if_platform_not_viable( self, oracle_ds, ): - assert not oracle_ds._get_data() + assert not oracle_ds._check_and_get_data() @pytest.mark.parametrize( "keyname,expected_value", @@ -862,7 +862,7 @@ class TestCommon_GetDataBehaviour: expected_value, oracle_ds, ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert expected_value == oracle_ds.metadata[keyname] @pytest.mark.parametrize( @@ -885,7 +885,7 @@ class TestCommon_GetDataBehaviour: expected_value, oracle_ds, ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert expected_value == getattr(oracle_ds, attribute_name) @pytest.mark.parametrize( @@ -917,7 +917,7 @@ class TestCommon_GetDataBehaviour: DS_PATH + ".read_opc_metadata", mock.Mock(return_value=metadata), ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert expected_value == oracle_ds.get_public_ssh_keys() def test_missing_user_data_handled_gracefully(self, oracle_ds): @@ -928,7 +928,7 @@ class TestCommon_GetDataBehaviour: DS_PATH + ".read_opc_metadata", mock.Mock(return_value=metadata), ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert oracle_ds.userdata_raw is None @@ -940,7 +940,7 @@ class TestCommon_GetDataBehaviour: DS_PATH + ".read_opc_metadata", mock.Mock(return_value=metadata), ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert oracle_ds.userdata_raw is None assert [] == oracle_ds.get_public_ssh_keys() @@ -978,7 +978,7 @@ class TestNonIscsiRoot_GetDataBehaviour: DS_PATH + ".read_opc_metadata", mock.Mock(side_effect=assert_in_context_manager), ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert [ mock.call( @@ -1020,7 +1020,7 @@ class TestNonIscsiRoot_GetDataBehaviour: DS_PATH + ".read_opc_metadata", mock.Mock(side_effect=assert_in_context_manager), ): - assert oracle_ds._get_data() + assert oracle_ds._check_and_get_data() assert [ mock.call( |