~chad.smith/curtin/common-ci-test-case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import copy
import json
import textwrap

from curtin import config
from .helpers import CurtinTestCase


class TestMerge(CurtinTestCase):
    def test_merge_cfg_string(self):
        d1 = {'str1': 'str_one'}
        d2 = {'dict1': {'d1.e1': 'd1-e1'}}

        expected = {'str1': 'str_one', 'dict1': {'d1.e1': 'd1-e1'}}
        config.merge_config(d1, d2)
        self.assertEqual(d1, expected)


class TestCmdArg2Cfg(CurtinTestCase):
    def test_cmdarg_flat(self):
        self.assertEqual(config.cmdarg2cfg("foo=bar"), {'foo': 'bar'})

    def test_dict_dict(self):
        self.assertEqual(config.cmdarg2cfg("foo/v1/v2=bar"),
                         {'foo': {'v1': {'v2': 'bar'}}})

    def test_no_equal_raises_value_error(self):
        self.assertRaises(ValueError, config.cmdarg2cfg, "foo/v1/v2"),

    def test_json(self):
        self.assertEqual(
            config.cmdarg2cfg('json:foo/bar=["a", "b", "c"]', delim="/"),
            {'foo': {'bar': ['a', 'b', 'c']}})

    def test_cmdarg_multiple_equal(self):
        self.assertEqual(
            config.cmdarg2cfg("key=mykey=value"),
            {"key": "mykey=value"})

    def test_with_merge_cmdarg(self):
        cfg1 = {'foo': {'key1': 'val1', 'mylist': [1, 2]}, 'f': 'fval'}
        cfg2 = {'foo': {'key2': 'val2', 'mylist2': ['a', 'b']}, 'g': 'gval'}

        via_merge = copy.deepcopy(cfg1)
        config.merge_config(via_merge, cfg2)

        via_merge_cmdarg = copy.deepcopy(cfg1)
        config.merge_cmdarg(via_merge_cmdarg, 'json:=' + json.dumps(cfg2))

        self.assertEqual(via_merge, via_merge_cmdarg)


class TestConfigArchive(CurtinTestCase):
    def test_archive_dict(self):
        myarchive = _replace_consts(textwrap.dedent("""
            _ARCH_HEAD_
            - type: _CONF_TYPE_
              content: |
                key1: val1
                key2: val2
            - content: |
               _CONF_HEAD_
               key1: override_val1
        """))
        ret = config.load_config_archive(myarchive)
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})

    def test_archive_string(self):
        myarchive = _replace_consts(textwrap.dedent("""
            _ARCH_HEAD_
            - |
              _CONF_HEAD_
              key1: val1
              key2: val2
            - |
              _CONF_HEAD_
              key1: override_val1
        """))
        ret = config.load_config_archive(myarchive)
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})

    def test_archive_mixed_dict_string(self):
        myarchive = _replace_consts(textwrap.dedent("""
            _ARCH_HEAD_
            - type: _CONF_TYPE_
              content: |
                key1: val1
                key2: val2
            - |
              _CONF_HEAD_
              key1: override_val1
        """))
        ret = config.load_config_archive(myarchive)
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})

    def test_recursive_string(self):
        myarchive = _replace_consts(textwrap.dedent("""
            _ARCH_HEAD_
            - |
              _ARCH_HEAD_
              - |
                _CONF_HEAD_
                key1: val1
                key2: val2
            - |
              _ARCH_HEAD_
               - |
                 _CONF_HEAD_
                 key1: override_val1
        """))
        ret = config.load_config_archive(myarchive)
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})

    def test_recursive_dict(self):
        myarchive = _replace_consts(textwrap.dedent("""
            _ARCH_HEAD_
            - type: _CONF_TYPE_
              content: |
                key1: val1
                key2: val2
            - content: |
                _ARCH_HEAD_
                 - |
                   _CONF_HEAD_
                   key1: override_val1
        """))
        ret = config.load_config_archive(myarchive)
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})


def _replace_consts(cfgstr):
    repls = {'_ARCH_HEAD_': config.ARCHIVE_HEADER,
             '_ARCH_TYPE_': config.ARCHIVE_TYPE,
             '_CONF_HEAD_': config.CONFIG_HEADER,
             '_CONF_TYPE_': config.CONFIG_TYPE}
    for k, v in repls.items():
        cfgstr = cfgstr.replace(k, v)
    return cfgstr

# vi: ts=4 expandtab syntax=python