Merge pull request #26300 from jfindlay/pw_test

mock pwd function calls in pw_user exec module
This commit is contained in:
Thomas S Hatch 2015-08-17 12:56:41 -06:00
commit 0046c6cfed
3 changed files with 35 additions and 13 deletions

View file

@ -6,8 +6,9 @@ Manage users with the useradd command
# Import python libs
try:
import pwd
HAS_PWD = True
except ImportError:
pass
HAS_PWD = False
import logging
import copy
@ -26,7 +27,9 @@ def __virtual__():
'''
Set the user module if the kernel is FreeBSD
'''
return __virtualname__ if __grains__['kernel'] == 'FreeBSD' else False
if HAS_PWD and __grains__['kernel'] == 'FreeBSD':
return __virtualname__
return False
def _get_gecos(name):

View file

@ -9,8 +9,9 @@ import re
try:
import pwd
HAS_PWD = True
except ImportError:
pass
HAS_PWD = False
import logging
import copy
@ -32,10 +33,9 @@ __virtualname__ = 'user'
def __virtual__():
'''
Set the user module if the kernel is Linux, OpenBSD or NetBSD
and remove some of the functionality on OS X
'''
if __grains__['kernel'] in ('Linux', 'OpenBSD', 'NetBSD'):
if HAS_PWD and __grains__['kernel'] in ('Linux', 'OpenBSD', 'NetBSD'):
return __virtualname__
return False

View file

@ -15,7 +15,11 @@ from salttesting.mock import (
# Import Salt Libs
from salt.modules import pw_user
from salt.exceptions import CommandExecutionError
import pwd
try:
import pwd
HAS_PWD = True
except ImportError:
HAS_PWD = False
# Globals
@ -24,6 +28,7 @@ pw_user.__salt__ = {}
pw_user.__context__ = {}
@skipIf(not HAS_PWD, 'These tests can only run on systems with the python pwd module')
@skipIf(NO_MOCK, NO_MOCK_REASON)
class PwUserTestCase(TestCase):
'''
@ -46,16 +51,21 @@ class PwUserTestCase(TestCase):
with patch.dict(pw_user.__salt__, {'cmd.run_all': mock}):
self.assertTrue(pw_user.delete('A'), 1)
@patch('salt.modules.pw_user.__context__', MagicMock(return_value='A'))
def test_getent(self):
'''
Test if user.getent already have a value
'''
self.assertTrue(pw_user.getent())
mock_user = 'saltdude'
mock = MagicMock(return_value='A')
with patch.object(pw_user, 'info', mock):
self.assertEqual(pw_user.getent(True)[0], 'A')
class MockData(object):
pw_name = mock_user
with patch('pwd.getpwall', MagicMock(return_value=[MockData()])):
with patch.dict(pw_user.__context__, {'user.getent': mock_user}):
self.assertEqual(pw_user.getent(), mock_user)
with patch.object(pw_user, 'info', MagicMock(return_value=mock_user)):
self.assertEqual(pw_user.getent(True)[0], mock_user)
def test_chuid(self):
'''
@ -288,13 +298,22 @@ class PwUserTestCase(TestCase):
'''
Return a list of groups the named user belongs to
'''
self.assertEqual(pw_user.list_groups('name'), 'A')
mock_group = 'saltgroup'
with patch('salt.utils.get_group_list', MagicMock(return_value=[mock_group])):
self.assertEqual(pw_user.list_groups('name'), [mock_group])
def test_list_users(self):
'''
Return a list of all users
'''
self.assertTrue(pw_user.list_users())
mock_user = 'saltdude'
class MockData(object):
pw_name = mock_user
with patch('pwd.getpwall', MagicMock(return_value=[MockData()])):
self.assertEqual(pw_user.list_users(), [mock_user])
def test_rename(self):
'''