1import json
2import pytest
3
4from ansible.module_utils import kubevirt as mymodule
5
6
7def test_simple_merge_dicts():
8    dict1 = {'labels': {'label1': 'value'}}
9    dict2 = {'labels': {'label2': 'value'}}
10    dict3 = json.dumps({'labels': {'label1': 'value', 'label2': 'value'}}, sort_keys=True)
11    assert dict3 == json.dumps(dict(mymodule.KubeVirtRawModule.merge_dicts(dict1, dict2)), sort_keys=True)
12
13
14def test_simple_multi_merge_dicts():
15    dict1 = {'labels': {'label1': 'value', 'label3': 'value'}}
16    dict2 = {'labels': {'label2': 'value'}}
17    dict3 = json.dumps({'labels': {'label1': 'value', 'label2': 'value', 'label3': 'value'}}, sort_keys=True)
18    assert dict3 == json.dumps(dict(mymodule.KubeVirtRawModule.merge_dicts(dict1, dict2)), sort_keys=True)
19
20
21def test_double_nested_merge_dicts():
22    dict1 = {'metadata': {'labels': {'label1': 'value', 'label3': 'value'}}}
23    dict2 = {'metadata': {'labels': {'label2': 'value'}}}
24    dict3 = json.dumps({'metadata': {'labels': {'label1': 'value', 'label2': 'value', 'label3': 'value'}}}, sort_keys=True)
25    assert dict3 == json.dumps(dict(mymodule.KubeVirtRawModule.merge_dicts(dict1, dict2)), sort_keys=True)
26
27
28@pytest.mark.parametrize("lval, operations, rval, result", [
29    ('v1', ['<', '<='], 'v2', True),
30    ('v1', ['>', '>=', '=='], 'v2', False),
31    ('v1', ['>'], 'v1alpha1', True),
32    ('v1', ['==', '<', '<='], 'v1alpha1', False),
33    ('v1beta5', ['==', '<=', '>='], 'v1beta5', True),
34    ('v1beta5', ['<', '>', '!='], 'v1beta5', False),
35
36])
37def test_kubeapiversion_comparisons(lval, operations, rval, result):
38    KubeAPIVersion = mymodule.KubeAPIVersion
39    for op in operations:
40        test = '(KubeAPIVersion("{0}") {1} KubeAPIVersion("{2}")) == {3}'.format(lval, op, rval, result)
41        assert eval(test)
42
43
44@pytest.mark.parametrize("ver", ('nope', 'v1delta7', '1.5', 'v1beta', 'v'))
45def test_kubeapiversion_unsupported_versions(ver):
46    threw = False
47    try:
48        mymodule.KubeAPIVersion(ver)
49    except ValueError:
50        threw = True
51    assert threw
52