summaryrefslogtreecommitdiff
path: root/tests/unittests/test_features.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/test_features.py')
-rw-r--r--tests/unittests/test_features.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/unittests/test_features.py b/tests/unittests/test_features.py
new file mode 100644
index 00000000..794a9654
--- /dev/null
+++ b/tests/unittests/test_features.py
@@ -0,0 +1,68 @@
+# This file is part of cloud-init. See LICENSE file for license information.
+# pylint: disable=no-member,no-name-in-module
+"""
+This file is for testing the feature flag functionality itself,
+NOT for testing any individual feature flag
+"""
+import sys
+from pathlib import Path
+
+import pytest
+
+import cloudinit
+
+
+@pytest.fixture()
+def create_override(request):
+ """
+ Create a feature overrides file and do some module wizardry to make
+ it seem like we're importing the features file for the first time.
+
+ After creating the override file with the values passed by the test,
+ we need to reload cloudinit.features
+ to get all of the current features (including the overridden ones).
+ Once the test is complete, we remove the file we created and set
+ features and feature_overrides modules to how they were before
+ the test started
+ """
+ override_path = Path(cloudinit.__file__).parent / "feature_overrides.py"
+ if override_path.exists():
+ raise Exception(
+ "feature_overrides.py unexpectedly exists! "
+ "Remove it to run this test."
+ )
+ with override_path.open("w") as f:
+ for key, value in request.param.items():
+ f.write("{} = {}\n".format(key, value))
+
+ sys.modules.pop("cloudinit.features", None)
+
+ yield
+
+ override_path.unlink()
+ sys.modules.pop("cloudinit.feature_overrides", None)
+
+
+class TestFeatures:
+ def test_feature_without_override(self):
+ from cloudinit.features import ERROR_ON_USER_DATA_FAILURE
+
+ assert ERROR_ON_USER_DATA_FAILURE is True
+
+ @pytest.mark.parametrize(
+ "create_override",
+ [{"ERROR_ON_USER_DATA_FAILURE": False}],
+ indirect=True,
+ )
+ def test_feature_with_override(self, create_override):
+ from cloudinit.features import ERROR_ON_USER_DATA_FAILURE
+
+ assert ERROR_ON_USER_DATA_FAILURE is False
+
+ @pytest.mark.parametrize(
+ "create_override", [{"SPAM": True}], indirect=True
+ )
+ def test_feature_only_in_override(self, create_override):
+ from cloudinit.features import SPAM
+
+ assert SPAM is True