diff options
Diffstat (limited to 'tests/unittests/sources/test_azure.py')
-rw-r--r-- | tests/unittests/sources/test_azure.py | 93 |
1 files changed, 46 insertions, 47 deletions
diff --git a/tests/unittests/sources/test_azure.py b/tests/unittests/sources/test_azure.py index b5fe2672..8371d4b8 100644 --- a/tests/unittests/sources/test_azure.py +++ b/tests/unittests/sources/test_azure.py @@ -16,7 +16,6 @@ from cloudinit.net import dhcp from cloudinit.sources import UNSET from cloudinit.sources import DataSourceAzure as dsaz from cloudinit.sources import InvalidMetaDataException -from cloudinit.sources.azure import imds from cloudinit.sources.helpers import netlink from cloudinit.util import ( MountFailedError, @@ -299,6 +298,15 @@ def patched_reported_ready_marker_path(azure_ds, patched_markers_dir_path): yield reported_ready_marker +def fake_http_error_for_code(status_code: int): + response_failure = requests.Response() + response_failure.status_code = status_code + return requests.exceptions.HTTPError( + "fake error", + response=response_failure, + ) + + def construct_ovf_env( *, custom_data=None, @@ -2887,36 +2895,38 @@ class TestPreprovisioningHotAttachNics(CiTestCase): "unknown-245": "624c3620", } - # Simulate two NICs by adding the same one twice. - md = { - "interface": [ - IMDS_NETWORK_METADATA["interface"][0], - IMDS_NETWORK_METADATA["interface"][0], - ] - } - - m_req = mock.Mock(content=json.dumps(md)) - m_request.side_effect = [ - requests.Timeout("Fake connection timeout"), - requests.ConnectionError("Fake Network Unreachable"), - m_req, - ] + m_req = mock.Mock(content=json.dumps({"not": "empty"})) + m_request.side_effect = ( + [requests.Timeout("Fake connection timeout")] * 5 + + [requests.ConnectionError("Fake Network Unreachable")] * 5 + + 290 * [fake_http_error_for_code(410)] + + [m_req] + ) m_dhcpv4.return_value.lease = lease - is_primary, expected_nic_count = dsa._check_if_nic_is_primary("eth0") + is_primary = dsa._check_if_nic_is_primary("eth0") self.assertEqual(True, is_primary) - self.assertEqual(2, expected_nic_count) - assert len(m_request.mock_calls) == 3 + assert len(m_request.mock_calls) == 301 - # Re-run tests to verify max retries. + # Re-run tests to verify max http failures. + m_request.reset_mock() + m_request.side_effect = 305 * [fake_http_error_for_code(410)] + + dsa = dsaz.DataSourceAzure({}, distro=distro, paths=self.paths) + + is_primary = dsa._check_if_nic_is_primary("eth1") + self.assertEqual(False, is_primary) + assert len(m_request.mock_calls) == 301 + + # Re-run tests to verify max connection error retries. m_request.reset_mock() m_request.side_effect = [ requests.Timeout("Fake connection timeout") - ] * 6 + [requests.ConnectionError("Fake Network Unreachable")] * 6 + ] * 9 + [requests.ConnectionError("Fake Network Unreachable")] * 9 dsa = dsaz.DataSourceAzure({}, distro=distro, paths=self.paths) - is_primary, expected_nic_count = dsa._check_if_nic_is_primary("eth1") + is_primary = dsa._check_if_nic_is_primary("eth1") self.assertEqual(False, is_primary) assert len(m_request.mock_calls) == 11 @@ -3596,15 +3606,6 @@ class TestEphemeralNetworking: assert azure_ds._ephemeral_dhcp_ctx is None -def fake_http_error_for_code(status_code: int): - response_failure = requests.Response() - response_failure.status_code = status_code - return requests.exceptions.HTTPError( - "fake error", - response=response_failure, - ) - - class TestInstanceId: def test_metadata(self, azure_ds, mock_dmi_read_dmi_data): azure_ds.metadata = {"instance-id": "test-id"} @@ -3709,7 +3710,7 @@ class TestProvisioning: timeout=2, headers={"Metadata": "true"}, retries=10, - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, infinite=False, log_req_resp=True, ), @@ -3769,7 +3770,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -3788,7 +3789,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -3860,9 +3861,7 @@ class TestProvisioning: ) self.mock_readurl.side_effect = [ mock.MagicMock(contents=json.dumps(self.imds_md).encode()), - mock.MagicMock( - contents=json.dumps(self.imds_md["network"]).encode() - ), + mock.MagicMock(contents=json.dumps(self.imds_md).encode()), mock.MagicMock(contents=construct_ovf_env().encode()), mock.MagicMock(contents=json.dumps(self.imds_md).encode()), ] @@ -3874,7 +3873,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -3884,11 +3883,11 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, - retries=10, + retries=300, timeout=2, ), mock.call( @@ -3903,7 +3902,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -4025,7 +4024,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -4035,11 +4034,11 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, - retries=10, + retries=300, timeout=2, ), mock.call( @@ -4054,7 +4053,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -4134,7 +4133,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -4153,7 +4152,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, @@ -4215,7 +4214,7 @@ class TestProvisioning: mock.call( "http://169.254.169.254/metadata/instance?" "api-version=2021-08-01&extended=true", - exception_cb=imds._readurl_exception_callback, + exception_cb=mock.ANY, headers={"Metadata": "true"}, infinite=False, log_req_resp=True, |