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.py70
1 files changed, 39 insertions, 31 deletions
diff --git a/tests/unittests/sources/test_azure.py b/tests/unittests/sources/test_azure.py
index 1c43aa66..b3f7b1bc 100644
--- a/tests/unittests/sources/test_azure.py
+++ b/tests/unittests/sources/test_azure.py
@@ -2805,8 +2805,10 @@ class TestPreprovisioningHotAttachNics(CiTestCase):
@mock.patch("cloudinit.url_helper.time.sleep", autospec=True)
@mock.patch("requests.Session.request", autospec=True)
@mock.patch(MOCKPATH + "EphemeralDHCPv4", autospec=True)
+ @mock.patch(MOCKPATH + "time", autospec=True)
+ @mock.patch("cloudinit.sources.azure.imds.time", autospec=True)
def test_check_if_nic_is_primary_retries_on_failures(
- self, m_dhcpv4, m_request, m_sleep
+ self, m_imds_time, m_time, m_dhcpv4, m_request, m_sleep
):
"""Retry polling for network metadata on all failures except timeout
and network unreachable errors"""
@@ -2822,27 +2824,45 @@ class TestPreprovisioningHotAttachNics(CiTestCase):
}
m_req = mock.Mock(content=json.dumps({"not": "empty"}))
- m_request.side_effect = (
+ errors = (
[requests.Timeout("Fake connection timeout")] * 5
+ [requests.ConnectionError("Fake Network Unreachable")] * 5
- + 290 * [fake_http_error_for_code(410)]
+ + [fake_http_error_for_code(410)] * 5
+ [m_req]
)
+ m_request.side_effect = errors
m_dhcpv4.return_value.lease = lease
+ fake_time = 0.0
+ fake_time_increment = 5.0
+
+ def fake_timer():
+ nonlocal fake_time, fake_time_increment
+ fake_time += fake_time_increment
+ return fake_time
+
+ m_time.side_effect = fake_timer
+ m_imds_time.side_effect = fake_timer
is_primary = dsa._check_if_nic_is_primary("eth0")
self.assertEqual(True, is_primary)
- assert len(m_request.mock_calls) == 301
+ assert len(m_request.mock_calls) == len(errors)
# Re-run tests to verify max http failures.
+ attempts = 3
+ fake_time = 0.0
+ fake_time_increment = 300 / attempts
+
+ m_time.side_effect = fake_timer
+ m_imds_time.side_effect = fake_timer
m_request.reset_mock()
- m_request.side_effect = 305 * [fake_http_error_for_code(410)]
+ errors = 100 * [fake_http_error_for_code(410)]
+ m_request.side_effect = errors
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
+ assert len(m_request.mock_calls) == attempts
# Re-run tests to verify max connection error retries.
m_request.reset_mock()
@@ -2854,7 +2874,7 @@ class TestPreprovisioningHotAttachNics(CiTestCase):
is_primary = dsa._check_if_nic_is_primary("eth1")
self.assertEqual(False, is_primary)
- assert len(m_request.mock_calls) == 11
+ assert len(m_request.mock_calls) == attempts
@mock.patch("cloudinit.distros.networking.LinuxNetworking.try_set_link_up")
def test_wait_for_link_up_returns_if_already_up(self, m_is_link_up):
@@ -3531,9 +3551,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
timeout=2,
headers={"Metadata": "true"},
- retries=10,
exception_cb=mock.ANY,
- infinite=False,
+ infinite=True,
log_req_resp=True,
),
]
@@ -3601,9 +3620,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
mock.call(
@@ -3620,9 +3638,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
]
@@ -3712,9 +3729,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
mock.call(
@@ -3722,9 +3738,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=300,
timeout=2,
),
mock.call(
@@ -3741,9 +3756,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
]
@@ -3871,9 +3885,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
mock.call(
@@ -3881,9 +3894,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=300,
timeout=2,
),
mock.call(
@@ -3900,9 +3912,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
]
@@ -3988,9 +3999,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
mock.call(
@@ -4007,9 +4017,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
]
@@ -4108,9 +4117,8 @@ class TestProvisioning:
"api-version=2021-08-01&extended=true",
exception_cb=mock.ANY,
headers={"Metadata": "true"},
- infinite=False,
+ infinite=True,
log_req_resp=True,
- retries=10,
timeout=2,
),
]