diff options
Diffstat (limited to 'tests/unittests/sources/test_azure.py')
-rw-r--r-- | tests/unittests/sources/test_azure.py | 72 |
1 files changed, 61 insertions, 11 deletions
diff --git a/tests/unittests/sources/test_azure.py b/tests/unittests/sources/test_azure.py index 677c250d..59ac6459 100644 --- a/tests/unittests/sources/test_azure.py +++ b/tests/unittests/sources/test_azure.py @@ -3337,6 +3337,7 @@ class TestEphemeralNetworking: self, azure_ds, mock_ephemeral_dhcp_v4, + mock_kvp_report_failure_to_host, mock_sleep, ): lease = { @@ -3362,6 +3363,12 @@ class TestEphemeralNetworking: assert azure_ds._wireserver_endpoint == "168.63.129.16" assert azure_ds._ephemeral_dhcp_ctx.iface == "fakeEth0" + error_reasons = [ + c[0][0].reason + for c in mock_kvp_report_failure_to_host.call_args_list + ] + assert error_reasons == ["failure to find DHCP interface"] + def test_retry_process_error( self, azure_ds, @@ -3403,14 +3410,20 @@ class TestEphemeralNetworking: ] @pytest.mark.parametrize( - "error_class", [dhcp.NoDHCPLeaseInterfaceError, dhcp.NoDHCPLeaseError] + "error_class,error_reason", + [ + (dhcp.NoDHCPLeaseInterfaceError, "failure to find DHCP interface"), + (dhcp.NoDHCPLeaseError, "failure to obtain DHCP lease"), + ], ) def test_retry_sleeps( self, azure_ds, mock_ephemeral_dhcp_v4, + mock_kvp_report_failure_to_host, mock_sleep, error_class, + error_reason, ): lease = { "interface": "fakeEth0", @@ -3436,30 +3449,41 @@ class TestEphemeralNetworking: assert azure_ds._wireserver_endpoint == "168.63.129.16" assert azure_ds._ephemeral_dhcp_ctx.iface == "fakeEth0" + error_reasons = [ + c[0][0].reason + for c in mock_kvp_report_failure_to_host.call_args_list + ] + assert error_reasons == [error_reason] * 10 + @pytest.mark.parametrize( - "error_class", [dhcp.NoDHCPLeaseInterfaceError, dhcp.NoDHCPLeaseError] + "error_class,error_reason", + [ + (dhcp.NoDHCPLeaseInterfaceError, "failure to find DHCP interface"), + (dhcp.NoDHCPLeaseError, "failure to obtain DHCP lease"), + ], ) def test_retry_times_out( self, azure_ds, mock_ephemeral_dhcp_v4, + mock_kvp_report_failure_to_host, mock_sleep, mock_time, error_class, + error_reason, ): mock_time.side_effect = [ 0.0, # start - 60.1, # first - 120.1, # third - 180.1, # timeout + 60.1, # duration check for host error report + 60.11, # loop check + 120.1, # duration check for host error report + 120.11, # loop check + 180.1, # duration check for host error report + 180.11, # loop check timeout ] mock_ephemeral_dhcp_v4.return_value.obtain_lease.side_effect = [ error_class() - ] * 10 + [ - { - "interface": "fakeEth0", - } - ] + ] * 3 with pytest.raises(dhcp.NoDHCPLeaseError): azure_ds._setup_ephemeral_networking(timeout_minutes=3) @@ -3472,6 +3496,12 @@ class TestEphemeralNetworking: assert azure_ds._wireserver_endpoint == "168.63.129.16" assert azure_ds._ephemeral_dhcp_ctx is None + error_reasons = [ + c[0][0].reason + for c in mock_kvp_report_failure_to_host.call_args_list + ] + assert error_reasons == [error_reason] * 3 + class TestInstanceId: def test_metadata(self, azure_ds, mock_dmi_read_dmi_data): @@ -4138,7 +4168,7 @@ class TestProvisioning: assert self.mock_netlink.mock_calls == [] # Verify reports via KVP. - assert len(self.mock_kvp_report_failure_to_host.mock_calls) == 1 + assert len(self.mock_kvp_report_failure_to_host.mock_calls) == 2 assert len(self.mock_kvp_report_success_to_host.mock_calls) == 0 @pytest.mark.parametrize( @@ -4214,6 +4244,26 @@ class TestProvisioning: assert len(self.mock_kvp_report_success_to_host.mock_calls) == 1 +class TestReportFailure: + @pytest.mark.parametrize("kvp_enabled", [False, True]) + def report_host_only_kvp_enabled( + self, + azure_ds, + kvp_enabled, + mock_azure_report_failure_to_fabric, + mock_kvp_report_failure_to_host, + mock_kvp_report_success_to_host, + ): + mock_kvp_report_failure_to_host.return_value = kvp_enabled + error = errors.ReportableError(reason="foo") + + assert azure_ds._report_failure(error, host_only=True) == kvp_enabled + + assert mock_kvp_report_failure_to_host.mock_calls == [mock.call(error)] + assert mock_kvp_report_success_to_host.mock_calls == [] + assert mock_azure_report_failure_to_fabric.mock_calls == [] + + class TestValidateIMDSMetadata: @pytest.mark.parametrize( "mac,expected", |