~cloud-init-dev/cloud-init/trunk

« back to all changes in this revision

Viewing changes to tests/unittests/test_distros/test_user_data_normalize.py

  • Committer: Scott Moser
  • Date: 2016-08-10 15:06:15 UTC
  • Revision ID: smoser@ubuntu.com-20160810150615-ma2fv107w3suy1ma
README: Mention move of revision control to git.

cloud-init development has moved its revision control to git.
It is available at 
  https://code.launchpad.net/cloud-init

Clone with 
  git clone https://git.launchpad.net/cloud-init
or
  git clone git+ssh://git.launchpad.net/cloud-init

For more information see
  https://git.launchpad.net/cloud-init/tree/HACKING.rst

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from cloudinit import distros
2
 
from cloudinit import helpers
3
 
from cloudinit import settings
4
 
 
5
 
from ..helpers import TestCase
6
 
 
7
 
 
8
 
bcfg = {
9
 
    'name': 'bob',
10
 
    'plain_text_passwd': 'ubuntu',
11
 
    'home': "/home/ubuntu",
12
 
    'shell': "/bin/bash",
13
 
    'lock_passwd': True,
14
 
    'gecos': "Ubuntu",
15
 
    'groups': ["foo"]
16
 
}
17
 
 
18
 
 
19
 
class TestUGNormalize(TestCase):
20
 
 
21
 
    def _make_distro(self, dtype, def_user=None):
22
 
        cfg = dict(settings.CFG_BUILTIN)
23
 
        cfg['system_info']['distro'] = dtype
24
 
        paths = helpers.Paths(cfg['system_info']['paths'])
25
 
        distro_cls = distros.fetch(dtype)
26
 
        if def_user:
27
 
            cfg['system_info']['default_user'] = def_user.copy()
28
 
        distro = distro_cls(dtype, cfg['system_info'], paths)
29
 
        return distro
30
 
 
31
 
    def _norm(self, cfg, distro):
32
 
        return distros.normalize_users_groups(cfg, distro)
33
 
 
34
 
    def test_group_dict(self):
35
 
        distro = self._make_distro('ubuntu')
36
 
        g = {'groups':
37
 
             [{'ubuntu': ['foo', 'bar'],
38
 
               'bob': 'users'},
39
 
              'cloud-users',
40
 
              {'bob': 'users2'}]}
41
 
        (_users, groups) = self._norm(g, distro)
42
 
        self.assertIn('ubuntu', groups)
43
 
        ub_members = groups['ubuntu']
44
 
        self.assertEqual(sorted(['foo', 'bar']), sorted(ub_members))
45
 
        self.assertIn('bob', groups)
46
 
        b_members = groups['bob']
47
 
        self.assertEqual(sorted(['users', 'users2']),
48
 
                         sorted(b_members))
49
 
 
50
 
    def test_basic_groups(self):
51
 
        distro = self._make_distro('ubuntu')
52
 
        ug_cfg = {
53
 
            'groups': ['bob'],
54
 
        }
55
 
        (users, groups) = self._norm(ug_cfg, distro)
56
 
        self.assertIn('bob', groups)
57
 
        self.assertEqual({}, users)
58
 
 
59
 
    def test_csv_groups(self):
60
 
        distro = self._make_distro('ubuntu')
61
 
        ug_cfg = {
62
 
            'groups': 'bob,joe,steve',
63
 
        }
64
 
        (users, groups) = self._norm(ug_cfg, distro)
65
 
        self.assertIn('bob', groups)
66
 
        self.assertIn('joe', groups)
67
 
        self.assertIn('steve', groups)
68
 
        self.assertEqual({}, users)
69
 
 
70
 
    def test_more_groups(self):
71
 
        distro = self._make_distro('ubuntu')
72
 
        ug_cfg = {
73
 
            'groups': ['bob', 'joe', 'steve']
74
 
        }
75
 
        (users, groups) = self._norm(ug_cfg, distro)
76
 
        self.assertIn('bob', groups)
77
 
        self.assertIn('joe', groups)
78
 
        self.assertIn('steve', groups)
79
 
        self.assertEqual({}, users)
80
 
 
81
 
    def test_member_groups(self):
82
 
        distro = self._make_distro('ubuntu')
83
 
        ug_cfg = {
84
 
            'groups': {
85
 
                'bob': ['s'],
86
 
                'joe': [],
87
 
                'steve': [],
88
 
            }
89
 
        }
90
 
        (users, groups) = self._norm(ug_cfg, distro)
91
 
        self.assertIn('bob', groups)
92
 
        self.assertEqual(['s'], groups['bob'])
93
 
        self.assertEqual([], groups['joe'])
94
 
        self.assertIn('joe', groups)
95
 
        self.assertIn('steve', groups)
96
 
        self.assertEqual({}, users)
97
 
 
98
 
    def test_users_simple_dict(self):
99
 
        distro = self._make_distro('ubuntu', bcfg)
100
 
        ug_cfg = {
101
 
            'users': {
102
 
                'default': True,
103
 
            }
104
 
        }
105
 
        (users, _groups) = self._norm(ug_cfg, distro)
106
 
        self.assertIn('bob', users)
107
 
        ug_cfg = {
108
 
            'users': {
109
 
                'default': 'yes',
110
 
            }
111
 
        }
112
 
        (users, _groups) = self._norm(ug_cfg, distro)
113
 
        self.assertIn('bob', users)
114
 
        ug_cfg = {
115
 
            'users': {
116
 
                'default': '1',
117
 
            }
118
 
        }
119
 
        (users, _groups) = self._norm(ug_cfg, distro)
120
 
        self.assertIn('bob', users)
121
 
 
122
 
    def test_users_simple_dict_no(self):
123
 
        distro = self._make_distro('ubuntu', bcfg)
124
 
        ug_cfg = {
125
 
            'users': {
126
 
                'default': False,
127
 
            }
128
 
        }
129
 
        (users, _groups) = self._norm(ug_cfg, distro)
130
 
        self.assertEqual({}, users)
131
 
        ug_cfg = {
132
 
            'users': {
133
 
                'default': 'no',
134
 
            }
135
 
        }
136
 
        (users, _groups) = self._norm(ug_cfg, distro)
137
 
        self.assertEqual({}, users)
138
 
 
139
 
    def test_users_simple_csv(self):
140
 
        distro = self._make_distro('ubuntu')
141
 
        ug_cfg = {
142
 
            'users': 'joe,bob',
143
 
        }
144
 
        (users, _groups) = self._norm(ug_cfg, distro)
145
 
        self.assertIn('joe', users)
146
 
        self.assertIn('bob', users)
147
 
        self.assertEqual({'default': False}, users['joe'])
148
 
        self.assertEqual({'default': False}, users['bob'])
149
 
 
150
 
    def test_users_simple(self):
151
 
        distro = self._make_distro('ubuntu')
152
 
        ug_cfg = {
153
 
            'users': [
154
 
                'joe',
155
 
                'bob'
156
 
            ],
157
 
        }
158
 
        (users, _groups) = self._norm(ug_cfg, distro)
159
 
        self.assertIn('joe', users)
160
 
        self.assertIn('bob', users)
161
 
        self.assertEqual({'default': False}, users['joe'])
162
 
        self.assertEqual({'default': False}, users['bob'])
163
 
 
164
 
    def test_users_old_user(self):
165
 
        distro = self._make_distro('ubuntu', bcfg)
166
 
        ug_cfg = {
167
 
            'user': 'zetta',
168
 
            'users': 'default'
169
 
        }
170
 
        (users, _groups) = self._norm(ug_cfg, distro)
171
 
        self.assertNotIn('bob', users)  # Bob is not the default now, zetta is
172
 
        self.assertIn('zetta', users)
173
 
        self.assertTrue(users['zetta']['default'])
174
 
        self.assertNotIn('default', users)
175
 
        ug_cfg = {
176
 
            'user': 'zetta',
177
 
            'users': 'default, joe'
178
 
        }
179
 
        (users, _groups) = self._norm(ug_cfg, distro)
180
 
        self.assertNotIn('bob', users)  # Bob is not the default now, zetta is
181
 
        self.assertIn('joe', users)
182
 
        self.assertIn('zetta', users)
183
 
        self.assertTrue(users['zetta']['default'])
184
 
        self.assertNotIn('default', users)
185
 
        ug_cfg = {
186
 
            'user': 'zetta',
187
 
            'users': ['bob', 'joe']
188
 
        }
189
 
        (users, _groups) = self._norm(ug_cfg, distro)
190
 
        self.assertIn('bob', users)
191
 
        self.assertIn('joe', users)
192
 
        self.assertIn('zetta', users)
193
 
        self.assertTrue(users['zetta']['default'])
194
 
        ug_cfg = {
195
 
            'user': 'zetta',
196
 
            'users': {
197
 
                'bob': True,
198
 
                'joe': True,
199
 
            }
200
 
        }
201
 
        (users, _groups) = self._norm(ug_cfg, distro)
202
 
        self.assertIn('bob', users)
203
 
        self.assertIn('joe', users)
204
 
        self.assertIn('zetta', users)
205
 
        self.assertTrue(users['zetta']['default'])
206
 
        ug_cfg = {
207
 
            'user': 'zetta',
208
 
        }
209
 
        (users, _groups) = self._norm(ug_cfg, distro)
210
 
        self.assertIn('zetta', users)
211
 
        ug_cfg = {}
212
 
        (users, groups) = self._norm(ug_cfg, distro)
213
 
        self.assertEqual({}, users)
214
 
        self.assertEqual({}, groups)
215
 
 
216
 
    def test_users_dict_default_additional(self):
217
 
        distro = self._make_distro('ubuntu', bcfg)
218
 
        ug_cfg = {
219
 
            'users': [
220
 
                {'name': 'default', 'blah': True}
221
 
            ],
222
 
        }
223
 
        (users, _groups) = self._norm(ug_cfg, distro)
224
 
        self.assertIn('bob', users)
225
 
        self.assertEqual(",".join(distro.get_default_user()['groups']),
226
 
                         users['bob']['groups'])
227
 
        self.assertEqual(True, users['bob']['blah'])
228
 
        self.assertEqual(True, users['bob']['default'])
229
 
 
230
 
    def test_users_dict_extract(self):
231
 
        distro = self._make_distro('ubuntu', bcfg)
232
 
        ug_cfg = {
233
 
            'users': [
234
 
                'default',
235
 
            ],
236
 
        }
237
 
        (users, _groups) = self._norm(ug_cfg, distro)
238
 
        self.assertIn('bob', users)
239
 
        (name, config) = distros.extract_default(users)
240
 
        self.assertEqual(name, 'bob')
241
 
        expected_config = {}
242
 
        def_config = None
243
 
        try:
244
 
            def_config = distro.get_default_user()
245
 
        except NotImplementedError:
246
 
            pass
247
 
        if not def_config:
248
 
            def_config = {}
249
 
        expected_config.update(def_config)
250
 
 
251
 
        # Ignore these for now
252
 
        expected_config.pop('name', None)
253
 
        expected_config.pop('groups', None)
254
 
        config.pop('groups', None)
255
 
        self.assertEqual(config, expected_config)
256
 
 
257
 
    def test_users_dict_default(self):
258
 
        distro = self._make_distro('ubuntu', bcfg)
259
 
        ug_cfg = {
260
 
            'users': [
261
 
                'default',
262
 
            ],
263
 
        }
264
 
        (users, _groups) = self._norm(ug_cfg, distro)
265
 
        self.assertIn('bob', users)
266
 
        self.assertEqual(",".join(distro.get_default_user()['groups']),
267
 
                         users['bob']['groups'])
268
 
        self.assertEqual(True, users['bob']['default'])
269
 
 
270
 
    def test_users_dict_trans(self):
271
 
        distro = self._make_distro('ubuntu')
272
 
        ug_cfg = {
273
 
            'users': [
274
 
                {'name': 'joe',
275
 
                 'tr-me': True},
276
 
                {'name': 'bob'},
277
 
            ],
278
 
        }
279
 
        (users, _groups) = self._norm(ug_cfg, distro)
280
 
        self.assertIn('joe', users)
281
 
        self.assertIn('bob', users)
282
 
        self.assertEqual({'tr_me': True, 'default': False}, users['joe'])
283
 
        self.assertEqual({'default': False}, users['bob'])
284
 
 
285
 
    def test_users_dict(self):
286
 
        distro = self._make_distro('ubuntu')
287
 
        ug_cfg = {
288
 
            'users': [
289
 
                {'name': 'joe'},
290
 
                {'name': 'bob'},
291
 
            ],
292
 
        }
293
 
        (users, _groups) = self._norm(ug_cfg, distro)
294
 
        self.assertIn('joe', users)
295
 
        self.assertIn('bob', users)
296
 
        self.assertEqual({'default': False}, users['joe'])
297
 
        self.assertEqual({'default': False}, users['bob'])