salt/tests/integration/modules/test_groupadd.py
rallytime 08c71f13e4
Merge branch '2017.7' into 'oxygen'
Conflicts:
  - doc/ref/configuration/minion.rst
  - doc/topics/thorium/index.rst
  - salt/beacons/__init__.py
  - salt/client/mixins.py
  - salt/client/ssh/wrapper/state.py
  - salt/daemons/masterapi.py
  - salt/grains/extra.py
  - salt/minion.py
  - salt/modules/cron.py
  - salt/modules/file.py
  - salt/modules/mac_user.py
  - salt/modules/napalm_network.py
  - salt/modules/state.py
  - salt/modules/win_file.py
  - salt/modules/win_pkg.py
  - salt/proxy/dummy.py
  - salt/state.py
  - salt/states/file.py
  - salt/states/lxc.py
  - salt/utils/__init__.py
  - salt/utils/schedule.py
  - tests/integration/modules/test_file.py
  - tests/integration/modules/test_groupadd.py
  - tests/integration/ssh/test_state.py
  - tests/integration/states/test_file.py
  - tests/unit/daemons/test_masterapi.py
  - tests/unit/grains/test_core.py
  - tests/unit/modules/test_disk.py
  - tests/unit/modules/test_napalm_network.py
  - tests/unit/modules/test_state.py
  - tests/unit/test_minion.py
  - tests/unit/utils/test_process.py
2017-12-11 18:24:41 -05:00

236 lines
8.3 KiB
Python

# -*- coding: utf-8 -*-
# Import python libs
from __future__ import absolute_import
import grp
import os
import random
import string
# Import Salt Testing libs
from tests.support.case import ModuleCase
from tests.support.helpers import destructiveTest, skip_if_not_root
# Import Salt libs
from salt.ext.six.moves import range
import salt.utils.files
@skip_if_not_root
@destructiveTest
class GroupModuleTest(ModuleCase):
'''
Validate the linux group system module
'''
def setUp(self):
'''
Get current settings
'''
super(GroupModuleTest, self).setUp()
self._user = self.__random_string()
self._user1 = self.__random_string()
self._no_user = self.__random_string()
self._group = self.__random_string()
self._no_group = self.__random_string()
self._gid = 64989
self._new_gid = 64998
os_grain = self.run_function('grains.item', ['kernel'])
if os_grain['kernel'] not in 'Linux':
self.skipTest(
'Test not applicable to \'{kernel}\' kernel'.format(
**os_grain
)
)
def tearDown(self):
'''
Reset to original settings
'''
self.run_function('user.delete', [self._user])
self.run_function('user.delete', [self._user1])
self.run_function('group.delete', [self._group])
def __random_string(self, size=6):
'''
Generates a random names
'''
return 'tg-' + ''.join(
random.choice(string.ascii_lowercase + string.digits)
for x in range(size)
)
def __get_system_group_gid_range(self):
'''
Returns (SYS_GID_MIN, SYS_GID_MAX)
'''
defs_file = '/etc/login.defs'
if os.path.exists(defs_file):
with salt.utils.files.fopen(defs_file) as defs_fd:
login_defs = dict([x.split()
for x in defs_fd.readlines()
if x.strip()
and not x.strip().startswith('#')])
else:
login_defs = {'SYS_GID_MIN': 101,
'SYS_GID_MAX': 999}
gid_min = login_defs.get('SYS_GID_MIN', 101)
gid_max = login_defs.get('SYS_GID_MAX',
int(login_defs.get('GID_MIN', 1000)) - 1)
return int(gid_min), int(gid_max)
def __get_free_system_gid(self):
'''
Find a free system gid
'''
gid_min, gid_max = self.__get_system_group_gid_range()
busy_gids = [x.gr_gid
for x in grp.getgrall()
if gid_min <= x.gr_gid <= gid_max]
# find free system gid
for gid in range(gid_min, gid_max + 1):
if gid not in busy_gids:
return gid
@destructiveTest
def test_add(self):
'''
Test the add group function
'''
# add a new group
self.assertTrue(self.run_function('group.add', [self._group, self._gid]))
group_info = self.run_function('group.info', [self._group])
self.assertEqual(group_info['name'], self._group)
self.assertEqual(group_info['gid'], self._gid)
# try adding the group again
self.assertFalse(self.run_function('group.add', [self._group, self._gid]))
@destructiveTest
def test_add_system_group(self):
'''
Test the add group function with system=True
'''
gid_min, gid_max = self.__get_system_group_gid_range()
# add a new system group
self.assertTrue(self.run_function('group.add',
[self._group, None, True]))
group_info = self.run_function('group.info', [self._group])
self.assertEqual(group_info['name'], self._group)
self.assertTrue(gid_min <= group_info['gid'] <= gid_max)
# try adding the group again
self.assertFalse(self.run_function('group.add',
[self._group]))
@destructiveTest
def test_add_system_group_gid(self):
'''
Test the add group function with system=True and a specific gid
'''
gid = self.__get_free_system_gid()
# add a new system group
self.assertTrue(self.run_function('group.add',
[self._group, gid, True]))
group_info = self.run_function('group.info', [self._group])
self.assertEqual(group_info['name'], self._group)
self.assertEqual(group_info['gid'], gid)
# try adding the group again
self.assertFalse(self.run_function('group.add',
[self._group, gid]))
@destructiveTest
def test_delete(self):
'''
Test the delete group function
'''
self.assertTrue(self.run_function('group.add', [self._group]))
# correct functionality
self.assertTrue(self.run_function('group.delete', [self._group]))
# group does not exist
self.assertFalse(self.run_function('group.delete', [self._no_group]))
def test_info(self):
'''
Test the info group function
'''
self.run_function('group.add', [self._group, self._gid])
self.run_function('user.add', [self._user])
self.run_function('group.adduser', [self._group, self._user])
group_info = self.run_function('group.info', [self._group])
self.assertEqual(group_info['name'], self._group)
self.assertEqual(group_info['gid'], self._gid)
self.assertIn(self._user, group_info['members'])
def test_chgid(self):
'''
Test the change gid function
'''
self.run_function('group.add', [self._group, self._gid])
self.assertTrue(self.run_function('group.chgid', [self._group, self._new_gid]))
group_info = self.run_function('group.info', [self._group])
self.assertEqual(group_info['gid'], self._new_gid)
def test_adduser(self):
'''
Test the add user to group function
'''
self.run_function('group.add', [self._group, self._gid])
self.run_function('user.add', [self._user])
self.assertTrue(self.run_function('group.adduser', [self._group, self._user]))
group_info = self.run_function('group.info', [self._group])
self.assertIn(self._user, group_info['members'])
# try to add a non existing user
self.assertFalse(self.run_function('group.adduser', [self._group, self._no_user]))
# try to add a user to non existing group
self.assertFalse(self.run_function('group.adduser', [self._no_group, self._user]))
# try to add a non existing user to a non existing group
self.assertFalse(self.run_function('group.adduser', [self._no_group, self._no_user]))
def test_deluser(self):
'''
Test the delete user from group function
'''
self.run_function('group.add', [self._group, self._gid])
self.run_function('user.add', [self._user])
self.run_function('group.adduser', [self._group, self._user])
self.assertTrue(self.run_function('group.deluser', [self._group, self._user]))
group_info = self.run_function('group.info', [self._group])
self.assertNotIn(self._user, group_info['members'])
def test_members(self):
'''
Test the members function
'''
self.run_function('group.add', [self._group, self._gid])
self.run_function('user.add', [self._user])
self.run_function('user.add', [self._user1])
m = '{0},{1}'.format(self._user, self._user1)
self.assertTrue(self.run_function('group.members', [self._group, m]))
group_info = self.run_function('group.info', [self._group])
self.assertIn(self._user, group_info['members'])
self.assertIn(self._user1, group_info['members'])
def test_getent(self):
'''
Test the getent function
'''
self.run_function('group.add', [self._group, self._gid])
self.run_function('user.add', [self._user])
self.run_function('group.adduser', [self._group, self._user])
ginfo = self.run_function('user.getent')
self.assertIn(self._group, str(ginfo))
self.assertIn(self._user, str(ginfo))
self.assertNotIn(self._no_group, str(ginfo))
self.assertNotIn(self._no_user, str(ginfo))