summaryrefslogtreecommitdiff
path: root/tests/unittests/sources/azure/test_kvp.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/sources/azure/test_kvp.py')
-rw-r--r--tests/unittests/sources/azure/test_kvp.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/unittests/sources/azure/test_kvp.py b/tests/unittests/sources/azure/test_kvp.py
new file mode 100644
index 00000000..f0f4a999
--- /dev/null
+++ b/tests/unittests/sources/azure/test_kvp.py
@@ -0,0 +1,88 @@
+# This file is part of cloud-init. See LICENSE file for license information.
+
+from datetime import datetime
+from unittest import mock
+
+import pytest
+
+from cloudinit import version
+from cloudinit.sources.azure import errors, kvp
+
+
+@pytest.fixture()
+def fake_utcnow():
+ timestamp = datetime.utcnow()
+ with mock.patch.object(kvp, "datetime", autospec=True) as m:
+ m.utcnow.return_value = timestamp
+ yield timestamp
+
+
+@pytest.fixture()
+def fake_vm_id():
+ vm_id = "fake-vm-id"
+ with mock.patch.object(kvp.identity, "query_vm_id", autospec=True) as m:
+ m.return_value = vm_id
+ yield vm_id
+
+
+@pytest.fixture
+def telemetry_reporter(tmp_path):
+ kvp_file_path = tmp_path / "kvp_pool_file"
+ kvp_file_path.write_bytes(b"")
+ reporter = kvp.handlers.HyperVKvpReportingHandler(
+ kvp_file_path=str(kvp_file_path)
+ )
+
+ kvp.instantiated_handler_registry.register_item("telemetry", reporter)
+ yield reporter
+ kvp.instantiated_handler_registry.unregister_item("telemetry")
+
+
+class TestReportFailureToHost:
+ def test_report_failure_to_host(self, caplog, telemetry_reporter):
+ error = errors.ReportableError(reason="test")
+ assert kvp.report_failure_to_host(error) is True
+ assert (
+ "KVP handler not enabled, skipping host report." not in caplog.text
+ )
+
+ report = {
+ "key": "PROVISIONING_REPORT",
+ "value": error.as_encoded_report(),
+ }
+ assert report in list(telemetry_reporter._iterate_kvps(0))
+
+ def test_report_skipped_without_telemetry(self, caplog):
+ error = errors.ReportableError(reason="test")
+
+ assert kvp.report_failure_to_host(error) is False
+ assert "KVP handler not enabled, skipping host report." in caplog.text
+
+
+class TestReportSuccessToHost:
+ def test_report_success_to_host(
+ self, caplog, fake_utcnow, fake_vm_id, telemetry_reporter
+ ):
+ assert kvp.report_success_to_host() is True
+ assert (
+ "KVP handler not enabled, skipping host report." not in caplog.text
+ )
+
+ report_value = errors.encode_report(
+ [
+ "result=success",
+ f"agent=Cloud-Init/{version.version_string()}",
+ f"timestamp={fake_utcnow.isoformat()}",
+ f"vm_id={fake_vm_id}",
+ ]
+ )
+
+ report = {
+ "key": "PROVISIONING_REPORT",
+ "value": report_value,
+ }
+ assert report in list(telemetry_reporter._iterate_kvps(0))
+
+ def test_report_skipped_without_telemetry(self, caplog):
+ assert kvp.report_success_to_host() is False
+ assert "KVP handler not enabled, skipping host report." in caplog.text