1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
import os
import pytest
if os.name != 'posix':
pytest.skip('pwd module only available on unix')
class AppTestPwd:
spaceconfig = dict(usemodules=['pwd'])
def test_getpwuid(self):
import pwd, sys, re
raises(KeyError, pwd.getpwuid, -1)
pw = pwd.getpwuid(0)
assert pw.pw_name == 'root'
assert isinstance(pw.pw_passwd, str)
assert pw.pw_uid == 0
assert pw.pw_gid == 0
if sys.platform.startswith('linux'):
assert pw.pw_dir == '/root'
else:
assert pw.pw_dir.startswith('/')
assert pw.pw_shell.startswith('/')
assert type(pw.pw_uid) is int
assert type(pw.pw_gid) is int
raises(TypeError, pwd.getpwuid)
raises(TypeError, pwd.getpwuid, 3.14)
raises(KeyError, pwd.getpwuid, sys.maxsize)
# -1 is allowed, cast to uid_t
exc = raises(KeyError, pwd.getpwuid, -1)
m = re.match('getpwuid\(\): uid not found: ([0-9]+)', exc.value.args[0])
assert m, exc.value.args[0]
maxval = int(m.group(1))
assert maxval >= 2**32 - 1
# shouldn't overflow
exc = raises(KeyError, pwd.getpwuid, maxval)
m = re.match('getpwuid\(\): uid not found: ([0-9]+)', exc.value.args[0])
assert m, exc.value.args[0]
# should be out of uid_t range
for v in [-2, maxval+1, 2**128, -2**128]:
exc = raises(KeyError, pwd.getpwuid, v)
assert exc.value.args[0] == 'getpwuid(): uid not found'
def test_getpwnam(self):
import pwd
raises(TypeError, pwd.getpwnam)
raises(TypeError, pwd.getpwnam, 42)
raises(KeyError, pwd.getpwnam, '~invalid~')
assert pwd.getpwnam('root').pw_name == 'root'
def test_getpwall(self):
import pwd
raises(TypeError, pwd.getpwall, 42)
assert pwd.getpwnam('root') in pwd.getpwall()
|