summaryrefslogtreecommitdiff
path: root/tests/unittests/config/test_schema.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unittests/config/test_schema.py')
-rw-r--r--tests/unittests/config/test_schema.py201
1 files changed, 161 insertions, 40 deletions
diff --git a/tests/unittests/config/test_schema.py b/tests/unittests/config/test_schema.py
index d70c73fd..d43af5cc 100644
--- a/tests/unittests/config/test_schema.py
+++ b/tests/unittests/config/test_schema.py
@@ -9,6 +9,7 @@ import logging
import os
import re
import sys
+import unittest
from collections import namedtuple
from copy import deepcopy
from pathlib import Path
@@ -146,6 +147,54 @@ class TestVersionedSchemas:
)
+class TestCheckSchema(unittest.TestCase):
+ def test_schema_bools_have_dates(self):
+ """ensure that new/changed/deprecated keys have an associated
+ version key
+ """
+
+ def check_deprecation_keys(schema, search_key):
+ if search_key in schema:
+ assert f"{search_key}_version" in schema
+ for sub_item in schema.values():
+ if isinstance(sub_item, dict):
+ check_deprecation_keys(sub_item, search_key)
+ return True
+
+ # ensure that check_deprecation_keys works as expected
+ assert check_deprecation_keys(
+ {"changed": True, "changed_version": "22.3"}, "changed"
+ )
+ assert check_deprecation_keys(
+ {"properties": {"deprecated": True, "deprecated_version": "22.3"}},
+ "deprecated",
+ )
+ assert check_deprecation_keys(
+ {
+ "properties": {
+ "properties": {"new": True, "new_version": "22.3"}
+ }
+ },
+ "new",
+ )
+ with self.assertRaises(AssertionError):
+ check_deprecation_keys({"changed": True}, "changed")
+ with self.assertRaises(AssertionError):
+ check_deprecation_keys(
+ {"properties": {"deprecated": True}}, "deprecated"
+ )
+ with self.assertRaises(AssertionError):
+ check_deprecation_keys(
+ {"properties": {"properties": {"new": True}}}, "new"
+ )
+
+ # test the in-repo schema
+ schema = get_schema()
+ assert check_deprecation_keys(schema, "new")
+ assert check_deprecation_keys(schema, "changed")
+ assert check_deprecation_keys(schema, "deprecated")
+
+
class TestGetSchema:
def test_static_schema_file_is_valid(self, caplog):
with caplog.at_level(logging.WARNING):
@@ -402,13 +451,17 @@ class TestValidateCloudConfigSchema:
"a-b": {
"type": "string",
"deprecated": True,
+ "deprecated_version": "22.1",
+ "new": True,
+ "new_version": "22.1",
"description": "<desc>",
},
"a_b": {"type": "string", "description": "noop"},
},
},
{"a-b": "asdf"},
- "Deprecated cloud-config provided:\na-b: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\na-b: <desc> "
+ "Deprecated in version 22.1.",
),
(
{
@@ -420,6 +473,7 @@ class TestValidateCloudConfigSchema:
{
"type": "string",
"deprecated": True,
+ "deprecated_version": "22.1",
"description": "<desc>",
},
]
@@ -427,7 +481,8 @@ class TestValidateCloudConfigSchema:
},
},
{"x": "+5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\nx: <desc> "
+ "Deprecated in version 22.1.",
),
(
{
@@ -438,6 +493,8 @@ class TestValidateCloudConfigSchema:
{"type": "string", "description": "noop"},
{
"deprecated": True,
+ "deprecated_version": "22.1",
+ "deprecated_description": "<dep desc>",
"description": "<desc>",
},
]
@@ -445,7 +502,8 @@ class TestValidateCloudConfigSchema:
},
},
{"x": "5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\nx: <desc> "
+ "Deprecated in version 22.1. <dep desc>",
),
(
{
@@ -457,6 +515,7 @@ class TestValidateCloudConfigSchema:
{
"type": "string",
"deprecated": True,
+ "deprecated_version": "22.1",
"description": "<desc>",
},
]
@@ -464,7 +523,8 @@ class TestValidateCloudConfigSchema:
},
},
{"x": "5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\nx: <desc> "
+ "Deprecated in version 22.1.",
),
(
{
@@ -473,12 +533,14 @@ class TestValidateCloudConfigSchema:
"x": {
"type": "string",
"deprecated": True,
+ "deprecated_version": "22.1",
"description": "<desc>",
},
},
},
{"x": "+5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\nx: <desc> "
+ "Deprecated in version 22.1.",
),
(
{
@@ -500,6 +562,7 @@ class TestValidateCloudConfigSchema:
"$defs": {
"my_ref": {
"deprecated": True,
+ "deprecated_version": "32.3",
"description": "<desc>",
}
},
@@ -513,7 +576,8 @@ class TestValidateCloudConfigSchema:
},
},
{"x": "+5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\nx: <desc> "
+ "Deprecated in version 32.3.",
),
(
{
@@ -521,6 +585,7 @@ class TestValidateCloudConfigSchema:
"$defs": {
"my_ref": {
"deprecated": True,
+ "deprecated_version": "27.2",
}
},
"properties": {
@@ -536,7 +601,8 @@ class TestValidateCloudConfigSchema:
},
},
{"x": "+5"},
- "Deprecated cloud-config provided:\nx: DEPRECATED.",
+ "Deprecated cloud-config provided:\nx: Deprecated in "
+ "version 27.2.",
),
(
{
@@ -545,12 +611,14 @@ class TestValidateCloudConfigSchema:
"^.+$": {
"minItems": 1,
"deprecated": True,
+ "deprecated_version": "27.2",
"description": "<desc>",
}
},
},
{"a-b": "asdf"},
- "Deprecated cloud-config provided:\na-b: DEPRECATED: <desc>",
+ "Deprecated cloud-config provided:\na-b: <desc> "
+ "Deprecated in version 27.2.",
),
pytest.param(
{
@@ -559,11 +627,17 @@ class TestValidateCloudConfigSchema:
"^.+$": {
"minItems": 1,
"deprecated": True,
+ "deprecated_version": "27.2",
+ "changed": True,
+ "changed_version": "22.2",
+ "changed_description": "Drop ballast.",
}
},
},
{"a-b": "asdf"},
- "Deprecated cloud-config provided:\na-b: DEPRECATED.",
+ "Deprecated cloud-config provided:\na-b: Deprecated "
+ "in version 27.2.\na-b: Changed in version 22.2. "
+ "Drop ballast.",
id="deprecated_pattern_property_without_description",
),
],
@@ -792,7 +866,7 @@ class TestSchemaDocMarkdown:
**Supported distros:** debian, rhel
**Config schema**:
- **prop1:** (array of integer) prop-description.
+ **prop1:** (array of integer) prop-description
**Examples**::
@@ -812,12 +886,12 @@ class TestSchemaDocMarkdown:
"properties": {
"prop1": {
"type": "array",
- "description": "prop-description",
+ "description": "prop-description.",
"items": {"type": "string"},
},
"prop2": {
"type": "boolean",
- "description": "prop2-description",
+ "description": "prop2-description.",
},
},
}
@@ -892,7 +966,7 @@ class TestSchemaDocMarkdown:
"patternProperties": {
"^.+$": {
"label": "<opaque_label>",
- "description": "List of cool strings",
+ "description": "List of cool strings.",
"type": "array",
"items": {"type": "string"},
"minItems": 1,
@@ -1046,7 +1120,7 @@ class TestSchemaDocMarkdown:
"properties": {
"prop1": {
"type": "array",
- "description": "prop-description",
+ "description": "prop-description.",
"items": {"type": "integer"},
}
},
@@ -1102,7 +1176,7 @@ class TestSchemaDocMarkdown:
- option2
- option3
- The default value is option1.
+ The default value is option1
"""
)
@@ -1213,7 +1287,9 @@ class TestSchemaDocMarkdown:
}
}
},
- "**prop1:** (string/integer) DEPRECATED: <description>",
+ "**prop1:** (string/integer) <description>\n\n "
+ "*Deprecated in version <missing deprecated_version "
+ "key, please file a bug report>.*",
),
(
{
@@ -1223,10 +1299,40 @@ class TestSchemaDocMarkdown:
"type": ["string", "integer"],
"description": "<description>",
"deprecated": True,
+ "deprecated_version": "2",
+ "changed": True,
+ "changed_version": "1",
+ "new": True,
+ "new_version": "1",
},
},
},
- "**prop1:** (string/integer) DEPRECATED: <description>",
+ "**prop1:** (string/integer) <description>\n\n "
+ "*Deprecated in version 2.*\n\n *Changed in version"
+ " 1.*\n\n *New in version 1.*",
+ ),
+ (
+ {
+ "$schema": "http://json-schema.org/draft-04/schema#",
+ "properties": {
+ "prop1": {
+ "type": ["string", "integer"],
+ "description": "<description>",
+ "deprecated": True,
+ "deprecated_version": "2",
+ "deprecated_description": "dep",
+ "changed": True,
+ "changed_version": "1",
+ "changed_description": "chg",
+ "new": True,
+ "new_version": "1",
+ "new_description": "new",
+ },
+ },
+ },
+ "**prop1:** (string/integer) <description>\n\n "
+ "*Deprecated in version 2. dep*\n\n *Changed in "
+ "version 1. chg*\n\n *New in version 1. new*",
),
(
{
@@ -1244,7 +1350,9 @@ class TestSchemaDocMarkdown:
}
},
},
- "**prop1:** (string/integer) DEPRECATED: <description>",
+ "**prop1:** (string/integer) <description>\n\n "
+ "*Deprecated in version <missing deprecated_version "
+ "key, please file a bug report>.*",
),
(
{
@@ -1264,7 +1372,9 @@ class TestSchemaDocMarkdown:
}
},
},
- "**prop1:** (string/integer) DEPRECATED: <description>",
+ "**prop1:** (string/integer) <description>\n\n "
+ "*Deprecated in version <missing deprecated_version "
+ "key, please file a bug report>.*",
),
(
{
@@ -1275,14 +1385,17 @@ class TestSchemaDocMarkdown:
"anyOf": [
{
"type": ["string", "integer"],
- "description": "<deprecated_description>",
+ "description": "<deprecated_description>.",
"deprecated": True,
},
],
},
},
},
- "**prop1:** (UNDEFINED) <description>. DEPRECATED: <deprecat",
+ "**prop1:** (UNDEFINED) <description>. "
+ "<deprecated_description>.\n\n *Deprecated in "
+ "version <missing deprecated_version key, please "
+ "file a bug report>.*",
),
(
{
@@ -1292,7 +1405,7 @@ class TestSchemaDocMarkdown:
"anyOf": [
{
"type": ["string", "integer"],
- "description": "<deprecated_description>",
+ "description": "<deprecated_description>.",
"deprecated": True,
},
{
@@ -1303,8 +1416,9 @@ class TestSchemaDocMarkdown:
},
},
},
- "**prop1:** (number) <description>. DEPRECATED:"
- " <deprecated_description>",
+ "**prop1:** (number) <deprecated_description>.\n\n"
+ " *Deprecated in version <missing "
+ "deprecated_version key, please file a bug report>.*",
),
(
{
@@ -1316,6 +1430,7 @@ class TestSchemaDocMarkdown:
"type": ["string", "integer"],
"description": "<deprecated_description>",
"deprecated": True,
+ "deprecated_version": "22.1",
},
{
"type": "string",
@@ -1326,8 +1441,9 @@ class TestSchemaDocMarkdown:
},
},
},
- "**prop1:** (``none``/``unchanged``/``os``) <description>."
- " DEPRECATED: <deprecated_description>.",
+ "**prop1:** (``none``/``unchanged``/``os``) "
+ "<description>. <deprecated_description>\n\n "
+ "*Deprecated in version 22.1.*",
),
(
{
@@ -1348,8 +1464,9 @@ class TestSchemaDocMarkdown:
},
},
},
- "**prop1:** (string/integer/``none``/``unchanged``/``os``)"
- " <description_1>. <description>_2.\n",
+ "**prop1:** (string/integer/``none``/"
+ "``unchanged``/``os``) <description_1>. "
+ "<description>_2\n",
),
(
{
@@ -1370,7 +1487,7 @@ class TestSchemaDocMarkdown:
},
},
},
- "**prop1:** (array of object) <desc_1>.\n",
+ "**prop1:** (array of object) <desc_1>\n",
),
],
)
@@ -1753,15 +1870,14 @@ class TestHandleSchemaArgs:
#cloud-config
packages:
- htop
- apt_update: true # D1
- apt_upgrade: true # D2
- apt_reboot_if_required: true # D3
+ apt_update: true # D1
+ apt_upgrade: true # D2
+ apt_reboot_if_required: true # D3
# Deprecations: -------------
- # D1: DEPRECATED: Dropped after April 2027. Use ``package_update``. Default: ``false``
- # D2: DEPRECATED: Dropped after April 2027. Use ``package_upgrade``. Default: ``false``
- # D3: DEPRECATED: Dropped after April 2027. Use ``package_reboot_if_required``. Default: ``false``
-
+ # D1: Default: ``false``. Deprecated in version 22.2. Use ``package_update`` instead.
+ # D2: Default: ``false``. Deprecated in version 22.2. Use ``package_upgrade`` instead.
+ # D3: Default: ``false``. Deprecated in version 22.2. Use ``package_reboot_if_required`` instead.
Valid cloud-config: {cfg_file}
""" # noqa: E501
@@ -1772,9 +1888,11 @@ class TestHandleSchemaArgs:
dedent(
"""\
Cloud config schema deprecations: \
-apt_reboot_if_required: DEPRECATED: Dropped after April 2027. Use ``package_reboot_if_required``. Default: ``false``, \
-apt_update: DEPRECATED: Dropped after April 2027. Use ``package_update``. Default: ``false``, \
-apt_upgrade: DEPRECATED: Dropped after April 2027. Use ``package_upgrade``. Default: ``false``
+apt_reboot_if_required: Default: ``false``. Deprecated in version 22.2.\
+ Use ``package_reboot_if_required`` instead., apt_update: Default: \
+``false``. Deprecated in version 22.2. Use ``package_update`` instead.,\
+ apt_upgrade: Default: ``false``. Deprecated in version 22.2. Use \
+``package_upgrade`` instead.\
Valid cloud-config: {cfg_file}
""" # noqa: E501
),
@@ -1806,6 +1924,9 @@ apt_upgrade: DEPRECATED: Dropped after April 2027. Use ``package_upgrade``. Defa
)
handle_schema_args("unused", args)
out, err = capsys.readouterr()
- assert expected_output.format(cfg_file=user_data_fn) == out
+ assert (
+ expected_output.format(cfg_file=user_data_fn).split()
+ == out.split()
+ )
assert not err
assert "deprec" not in caplog.text