summaryrefslogtreecommitdiff
path: root/tests/unittests/sources/test_azure.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/sources/test_azure.py')
-rw-r--r--tests/unittests/sources/test_azure.py93
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,