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

256.1.2 by Scott Moser
add a test, fix a bug
1
import copy
2
import json
104 by Scott Moser
config-archive support
3
import textwrap
16 by Scott Moser
add curtin.config
4
5
from curtin import config
522 by Chad Smith
s/CiTestCase/CurtinTestCase/
6
from .helpers import CurtinTestCase
7
8
9
class TestMerge(CurtinTestCase):
16 by Scott Moser
add curtin.config
10
    def test_merge_cfg_string(self):
11
        d1 = {'str1': 'str_one'}
12
        d2 = {'dict1': {'d1.e1': 'd1-e1'}}
13
14
        expected = {'str1': 'str_one', 'dict1': {'d1.e1': 'd1-e1'}}
15
        config.merge_config(d1, d2)
16
        self.assertEqual(d1, expected)
17
18
522 by Chad Smith
s/CiTestCase/CurtinTestCase/
19
class TestCmdArg2Cfg(CurtinTestCase):
16 by Scott Moser
add curtin.config
20
    def test_cmdarg_flat(self):
21
        self.assertEqual(config.cmdarg2cfg("foo=bar"), {'foo': 'bar'})
22
23
    def test_dict_dict(self):
24
        self.assertEqual(config.cmdarg2cfg("foo/v1/v2=bar"),
25
                         {'foo': {'v1': {'v2': 'bar'}}})
26
27
    def test_no_equal_raises_value_error(self):
28
        self.assertRaises(ValueError, config.cmdarg2cfg, "foo/v1/v2"),
29
256.1.2 by Scott Moser
add a test, fix a bug
30
    def test_json(self):
31
        self.assertEqual(
32
            config.cmdarg2cfg('json:foo/bar=["a", "b", "c"]', delim="/"),
33
            {'foo': {'bar': ['a', 'b', 'c']}})
34
260 by Scott Moser
fix bug with "--set k=v" if v contained an equal
35
    def test_cmdarg_multiple_equal(self):
36
        self.assertEqual(
37
            config.cmdarg2cfg("key=mykey=value"),
38
            {"key": "mykey=value"})
39
256.1.2 by Scott Moser
add a test, fix a bug
40
    def test_with_merge_cmdarg(self):
41
        cfg1 = {'foo': {'key1': 'val1', 'mylist': [1, 2]}, 'f': 'fval'}
42
        cfg2 = {'foo': {'key2': 'val2', 'mylist2': ['a', 'b']}, 'g': 'gval'}
43
44
        via_merge = copy.deepcopy(cfg1)
45
        config.merge_config(via_merge, cfg2)
46
47
        via_merge_cmdarg = copy.deepcopy(cfg1)
48
        config.merge_cmdarg(via_merge_cmdarg, 'json:=' + json.dumps(cfg2))
49
50
        self.assertEqual(via_merge, via_merge_cmdarg)
51
104 by Scott Moser
config-archive support
52
522 by Chad Smith
s/CiTestCase/CurtinTestCase/
53
class TestConfigArchive(CurtinTestCase):
104 by Scott Moser
config-archive support
54
    def test_archive_dict(self):
55
        myarchive = _replace_consts(textwrap.dedent("""
56
            _ARCH_HEAD_
57
            - type: _CONF_TYPE_
58
              content: |
59
                key1: val1
60
                key2: val2
61
            - content: |
62
               _CONF_HEAD_
63
               key1: override_val1
64
        """))
65
        ret = config.load_config_archive(myarchive)
66
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})
67
68
    def test_archive_string(self):
69
        myarchive = _replace_consts(textwrap.dedent("""
70
            _ARCH_HEAD_
71
            - |
72
              _CONF_HEAD_
73
              key1: val1
74
              key2: val2
75
            - |
76
              _CONF_HEAD_
77
              key1: override_val1
78
        """))
79
        ret = config.load_config_archive(myarchive)
80
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})
81
82
    def test_archive_mixed_dict_string(self):
83
        myarchive = _replace_consts(textwrap.dedent("""
84
            _ARCH_HEAD_
85
            - type: _CONF_TYPE_
86
              content: |
87
                key1: val1
88
                key2: val2
89
            - |
90
              _CONF_HEAD_
91
              key1: override_val1
92
        """))
93
        ret = config.load_config_archive(myarchive)
94
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})
95
96
    def test_recursive_string(self):
97
        myarchive = _replace_consts(textwrap.dedent("""
98
            _ARCH_HEAD_
99
            - |
100
              _ARCH_HEAD_
101
              - |
102
                _CONF_HEAD_
103
                key1: val1
104
                key2: val2
105
            - |
106
              _ARCH_HEAD_
107
               - |
108
                 _CONF_HEAD_
109
                 key1: override_val1
110
        """))
111
        ret = config.load_config_archive(myarchive)
112
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})
113
114
    def test_recursive_dict(self):
115
        myarchive = _replace_consts(textwrap.dedent("""
116
            _ARCH_HEAD_
117
            - type: _CONF_TYPE_
118
              content: |
119
                key1: val1
120
                key2: val2
121
            - content: |
122
                _ARCH_HEAD_
123
                 - |
124
                   _CONF_HEAD_
125
                   key1: override_val1
126
        """))
127
        ret = config.load_config_archive(myarchive)
128
        self.assertEqual(ret, {'key1': 'override_val1', 'key2': 'val2'})
129
130
131
def _replace_consts(cfgstr):
132
    repls = {'_ARCH_HEAD_': config.ARCHIVE_HEADER,
133
             '_ARCH_TYPE_': config.ARCHIVE_TYPE,
134
             '_CONF_HEAD_': config.CONFIG_HEADER,
135
             '_CONF_TYPE_': config.CONFIG_TYPE}
136
    for k, v in repls.items():
137
        cfgstr = cfgstr.replace(k, v)
138
    return cfgstr
139
16 by Scott Moser
add curtin.config
140
# vi: ts=4 expandtab syntax=python