From 818dd9f8271dc5fa43aa842166877787bc7149de Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Sun, 22 Sep 2024 15:02:26 -0700 Subject: [PATCH 1/2] Fix yamldumper test --- tests/pytests/unit/utils/test_yamldumper.py | 119 ++++++++++++++++++++ tests/unit/utils/test_yamldumper.py | 118 ------------------- 2 files changed, 119 insertions(+), 118 deletions(-) create mode 100644 tests/pytests/unit/utils/test_yamldumper.py delete mode 100644 tests/unit/utils/test_yamldumper.py diff --git a/tests/pytests/unit/utils/test_yamldumper.py b/tests/pytests/unit/utils/test_yamldumper.py new file mode 100644 index 00000000000..7f73c5d1e7e --- /dev/null +++ b/tests/pytests/unit/utils/test_yamldumper.py @@ -0,0 +1,119 @@ +""" + Unit tests for salt.utils.yamldumper +""" + +from collections import OrderedDict, defaultdict + +import salt.utils.yamldumper +from salt.utils.context import NamespacedDictWrapper +from salt.utils.odict import HashableOrderedDict + + +def test_yaml_dump(): + """ + Test yaml.dump a dict + """ + data = {"foo": "bar"} + exp_yaml = "{foo: bar}\n" + + assert salt.utils.yamldumper.dump(data) == exp_yaml + + assert salt.utils.yamldumper.dump( + data, default_flow_style=False + ) == exp_yaml.replace("{", "").replace("}", "") + + +def test_yaml_safe_dump(): + """ + Test yaml.safe_dump a dict + """ + data = {"foo": "bar"} + assert salt.utils.yamldumper.safe_dump(data) == "{foo: bar}\n" + + assert ( + salt.utils.yamldumper.safe_dump(data, default_flow_style=False) == "foo: bar\n" + ) + + +def test_yaml_ordered_dump(): + """ + Test yaml.dump with OrderedDict + """ + data = OrderedDict([("foo", "bar"), ("baz", "qux")]) + exp_yaml = "{foo: bar, baz: qux}\n" + assert ( + salt.utils.yamldumper.dump(data, Dumper=salt.utils.yamldumper.OrderedDumper) + == exp_yaml + ) + + +def test_yaml_safe_ordered_dump(): + """ + Test yaml.safe_dump with OrderedDict + """ + data = OrderedDict([("foo", "bar"), ("baz", "qux")]) + exp_yaml = "{foo: bar, baz: qux}\n" + assert salt.utils.yamldumper.safe_dump(data) == exp_yaml + + +def test_yaml_indent_safe_ordered_dump(): + """ + Test yaml.dump with IndentedSafeOrderedDumper + """ + data = OrderedDict([("foo", ["bar", "baz"]), ("qux", "quux")]) + exp_yaml = "foo:\n- bar\n- baz\nqux: quux\n" + assert ( + salt.utils.yamldumper.dump( + data, + Dumper=salt.utils.yamldumper.IndentedSafeOrderedDumper, + default_flow_style=False, + ) + == exp_yaml + ) + + +def test_yaml_defaultdict_dump(): + """ + Test yaml.dump with defaultdict + """ + data = defaultdict(list) + data["foo"].append("bar") + exp_yaml = "foo: [bar]\n" + assert salt.utils.yamldumper.safe_dump(data) == exp_yaml + + +def test_yaml_namespaced_dict_wrapper_dump(): + """ + Test yaml.dump with NamespacedDictWrapper + """ + data = NamespacedDictWrapper({"test": {"foo": "bar"}}, "test") + exp_yaml = ( + "!!python/object/new:salt.utils.context.NamespacedDictWrapper\n" + "dictitems: {foo: bar}\n" + "state:\n" + " _NamespacedDictWrapper__dict:\n" + " test: {foo: bar}\n" + " pre_keys: !!python/tuple [test]\n" + ) + assert salt.utils.yamldumper.dump(data) == exp_yaml + + +def test_yaml_undefined_dump(): + """ + Test yaml.safe_dump with None + """ + data = {"foo": None} + exp_yaml = "{foo: null}\n" + assert salt.utils.yamldumper.safe_dump(data) == exp_yaml + + +def test_yaml_hashable_ordered_dict_dump(): + """ + Test yaml.dump with HashableOrderedDict + """ + data = HashableOrderedDict([("foo", "bar"), ("baz", "qux")]) + exp_yaml = "{foo: bar, baz: qux}\n" + assert ( + salt.utils.yamldumper.dump(data, Dumper=salt.utils.yamldumper.OrderedDumper) + == exp_yaml + ) diff --git a/tests/unit/utils/test_yamldumper.py b/tests/unit/utils/test_yamldumper.py deleted file mode 100644 index 65c900ebb25..00000000000 --- a/tests/unit/utils/test_yamldumper.py +++ /dev/null @@ -1,118 +0,0 @@ -""" - Unit tests for salt.utils.yamldumper -""" - -from collections import OrderedDict, defaultdict - -import salt.utils.yamldumper -from salt.utils.context import NamespacedDictWrapper -from salt.utils.odict import HashableOrderedDict -from tests.support.unit import TestCase - - -class YamlDumperTestCase(TestCase): - """ - TestCase for salt.utils.yamldumper module - """ - - def test_yaml_dump(self): - """ - Test yaml.dump a dict - """ - data = {"foo": "bar"} - exp_yaml = "{foo: bar}\n" - - assert salt.utils.yamldumper.dump(data) == exp_yaml - - assert salt.utils.yamldumper.dump( - data, default_flow_style=False - ) == exp_yaml.replace("{", "").replace("}", "") - - def test_yaml_safe_dump(self): - """ - Test yaml.safe_dump a dict - """ - data = {"foo": "bar"} - assert salt.utils.yamldumper.safe_dump(data) == "{foo: bar}\n" - - assert ( - salt.utils.yamldumper.safe_dump(data, default_flow_style=False) - == "foo: bar\n" - ) - - def test_yaml_ordered_dump(self): - """ - Test yaml.dump with OrderedDict - """ - data = OrderedDict([("foo", "bar"), ("baz", "qux")]) - exp_yaml = "{foo: bar, baz: qux}\n" - assert ( - salt.utils.yamldumper.dump(data, Dumper=salt.utils.yamldumper.OrderedDumper) - == exp_yaml - ) - - def test_yaml_safe_ordered_dump(self): - """ - Test yaml.safe_dump with OrderedDict - """ - data = OrderedDict([("foo", "bar"), ("baz", "qux")]) - exp_yaml = "{foo: bar, baz: qux}\n" - assert salt.utils.yamldumper.safe_dump(data) == exp_yaml - - def test_yaml_indent_safe_ordered_dump(self): - """ - Test yaml.dump with IndentedSafeOrderedDumper - """ - data = OrderedDict([("foo", ["bar", "baz"]), ("qux", "quux")]) - exp_yaml = "foo:\n- bar\n- baz\nqux: quux\n" - assert ( - salt.utils.yamldumper.dump( - data, - Dumper=salt.utils.yamldumper.IndentedSafeOrderedDumper, - default_flow_style=False, - ) - == exp_yaml - ) - - def test_yaml_defaultdict_dump(self): - """ - Test yaml.dump with defaultdict - """ - data = defaultdict(list) - data["foo"].append("bar") - exp_yaml = "foo: [bar]\n" - assert salt.utils.yamldumper.safe_dump(data) == exp_yaml - - def test_yaml_namespaced_dict_wrapper_dump(self): - """ - Test yaml.dump with NamespacedDictWrapper - """ - data = NamespacedDictWrapper({"test": {"foo": "bar"}}, "test") - exp_yaml = ( - "!!python/object/new:salt.utils.context.NamespacedDictWrapper\n" - "dictitems: {foo: bar}\n" - "state:\n" - " _NamespacedDictWrapper__dict:\n" - " test: {foo: bar}\n" - " pre_keys: !!python/tuple [test]\n" - ) - assert salt.utils.yamldumper.dump(data) == exp_yaml - - def test_yaml_undefined_dump(self): - """ - Test yaml.safe_dump with None - """ - data = {"foo": None} - exp_yaml = "{foo: null}\n" - assert salt.utils.yamldumper.safe_dump(data) == exp_yaml - - def test_yaml_hashable_ordered_dict_dump(self): - """ - Test yaml.dump with HashableOrderedDict - """ - data = HashableOrderedDict([("foo", "bar"), ("baz", "qux")]) - exp_yaml = "{foo: bar, baz: qux}\n" - assert ( - salt.utils.yamldumper.dump(data, Dumper=salt.utils.yamldumper.OrderedDumper) - == exp_yaml - ) From b6e3f9b2c672fb89ab1efc6835e5a788526c7c8a Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Sun, 22 Sep 2024 23:28:58 -0700 Subject: [PATCH 2/2] Fix test on platforms that do not have cdumper --- tests/pytests/unit/utils/test_yamldumper.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/pytests/unit/utils/test_yamldumper.py b/tests/pytests/unit/utils/test_yamldumper.py index 7f73c5d1e7e..09a1106f545 100644 --- a/tests/pytests/unit/utils/test_yamldumper.py +++ b/tests/pytests/unit/utils/test_yamldumper.py @@ -61,7 +61,11 @@ def test_yaml_indent_safe_ordered_dump(): Test yaml.dump with IndentedSafeOrderedDumper """ data = OrderedDict([("foo", ["bar", "baz"]), ("qux", "quux")]) - exp_yaml = "foo:\n- bar\n- baz\nqux: quux\n" + # Account for difference in SafeDumper vs CSafeDumper + if salt.utils.yamldumper.SafeDumper.__name__ == "SafeDumper": + exp_yaml = "foo:\n - bar\n - baz\nqux: quux\n" + else: + exp_yaml = "foo:\n- bar\n- baz\nqux: quux\n" assert ( salt.utils.yamldumper.dump( data,