cloud-init/tests/unittests/test_distros/test_user_data_normalize.py
Joshua Harlow bd8c4d84c2 Rework the rest of the locations that used
the previous 'user' and make those locations
go through the new distros functions to select
the default user or the user list (depending on usage).

Adjust the tests to check the new 'default' field
that signifies the default user + test the new method
to extract just the default user from a normalized
user dictionary.
2012-09-28 13:53:56 -07:00

272 lines
8.4 KiB
Python

from mocker import MockerTestCase
from cloudinit import distros
from cloudinit import helpers
from cloudinit import settings
class TestUGNormalize(MockerTestCase):
def _make_distro(self, dtype, def_user=None, def_groups=None):
cfg = dict(settings.CFG_BUILTIN)
cfg['system_info']['distro'] = dtype
paths = helpers.Paths(cfg['system_info']['paths'])
distro_cls = distros.fetch(dtype)
distro = distro_cls(dtype, cfg['system_info'], paths)
if def_user:
distro.default_user = def_user
if def_groups:
distro.default_user_groups = def_groups
return distro
def _norm(self, cfg, distro):
return distros.normalize_users_groups(cfg, distro)
def test_basic_groups(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'groups': ['bob'],
}
(users, groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', groups)
self.assertEquals({}, users)
def test_csv_groups(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'groups': 'bob,joe,steve',
}
(users, groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', groups)
self.assertIn('joe', groups)
self.assertIn('steve', groups)
self.assertEquals({}, users)
def test_more_groups(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'groups': ['bob', 'joe', 'steve']
}
(users, groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', groups)
self.assertIn('joe', groups)
self.assertIn('steve', groups)
self.assertEquals({}, users)
def test_member_groups(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'groups': {
'bob': ['s'],
'joe': [],
'steve': [],
}
}
(users, groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', groups)
self.assertEquals(['s'], groups['bob'])
self.assertEquals([], groups['joe'])
self.assertIn('joe', groups)
self.assertIn('steve', groups)
self.assertEquals({}, users)
def test_users_simple_dict(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'users': {
'default': True,
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
ug_cfg = {
'users': {
'default': 'yes',
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
ug_cfg = {
'users': {
'default': '1',
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
def test_users_simple_dict_no(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'users': {
'default': False,
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertEquals({}, users)
ug_cfg = {
'users': {
'default': 'no',
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertEquals({}, users)
def test_users_simple_csv(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'users': 'joe,bob',
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('joe', users)
self.assertIn('bob', users)
self.assertEquals({'default': False}, users['joe'])
self.assertEquals({'default': False}, users['bob'])
def test_users_simple(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'users': [
'joe',
'bob'
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('joe', users)
self.assertIn('bob', users)
self.assertEquals({'default': False}, users['joe'])
self.assertEquals({'default': False}, users['bob'])
def test_users_old_user(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'user': 'zetta',
'users': 'default'
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
self.assertIn('zetta', users)
self.assertNotIn('default', users)
ug_cfg = {
'user': 'zetta',
'users': 'default, joe'
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
self.assertIn('joe', users)
self.assertIn('zetta', users)
self.assertNotIn('default', users)
ug_cfg = {
'user': 'zetta',
'users': ['bob', 'joe']
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertNotIn('bob', users)
self.assertIn('joe', users)
self.assertIn('zetta', users)
ug_cfg = {
'user': 'zetta',
'users': {
'bob': True,
'joe': True,
}
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
self.assertIn('joe', users)
self.assertIn('zetta', users)
ug_cfg = {
'user': 'zetta',
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('zetta', users)
ug_cfg = {}
(users, groups) = self._norm(ug_cfg, distro)
self.assertEquals({}, users)
self.assertEquals({}, groups)
def test_users_dict_default_additional(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'users': [
{'name': 'default', 'blah': True}
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
self.assertEquals(",".join(distro.get_default_user()['groups']),
users['bob']['groups'])
self.assertEquals(True,
users['bob']['blah'])
self.assertEquals(True,
users['bob']['default'])
def test_users_dict_extract(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'users': [
'default',
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
(name, config) = distros.extract_default(users)
self.assertEquals(name, 'bob')
expected_config = {}
def_config = None
try:
def_config = distro.get_default_user()
except NotImplementedError:
pass
if not def_config:
def_config = {}
expected_config.update(def_config)
# Ignore these for now
expected_config.pop('name', None)
expected_config.pop('groups', None)
config.pop('groups', None)
self.assertEquals(config, expected_config)
def test_users_dict_default(self):
distro = self._make_distro('ubuntu', 'bob')
ug_cfg = {
'users': [
'default',
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('bob', users)
self.assertEquals(",".join(distro.get_default_user()['groups']),
users['bob']['groups'])
self.assertEquals(True,
users['bob']['default'])
def test_users_dict_trans(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'users': [
{'name': 'joe',
'tr-me': True},
{'name': 'bob'},
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('joe', users)
self.assertIn('bob', users)
self.assertEquals({'tr_me': True, 'default': False}, users['joe'])
self.assertEquals({'default': False}, users['bob'])
def test_users_dict(self):
distro = self._make_distro('ubuntu')
ug_cfg = {
'users': [
{'name': 'joe'},
{'name': 'bob'},
],
}
(users, _groups) = self._norm(ug_cfg, distro)
self.assertIn('joe', users)
self.assertIn('bob', users)
self.assertEquals({'default': False}, users['joe'])
self.assertEquals({'default': False}, users['bob'])