def test_expand_user(value, expect): struct = pwd.struct_passwd( ['tester', 'x', 1234, 1000, 'Test User', '/home/tester', '/bin/sh']) flexmock(os) \ .should_receive('geteuid') \ .and_return(1234) flexmock(pwd) \ .should_receive('getpwuid') \ .and_return(struct) flexmock(pwd) \ .should_receive('getpwnam') \ .and_return(struct) flexmock(grp) \ .should_receive('getgrnam') \ .and_return(grp.struct_group(['gx', 'x', 100, []])) flexmock(grp) \ .should_receive('getgrall') \ .and_return([ grp.struct_group(['g1', 'x', 101, []]), grp.struct_group(['g2', 'x', 102, ['tester']]), grp.struct_group(['.g-$ +3', 'x', 103, ['net+tester']]), grp.struct_group(['veryveryveryveryveryverylongname_thisnot', 'x', 104, ['tester']]), ]) result = expand_user({'global': {'user': value}}) assert result == expect
def test_expand_user_non_posix(): longname = '[email protected]' shortname = longname[:32] posixname = 'This_is-not_a-posix-username.It-' struct = pwd.struct_passwd( [longname, 'x', 1234, 1000, 'Test User', '/home/tester', '/bin/sh']) flexmock(pwd) \ .should_receive('getpwnam') \ .and_return(struct) flexmock(grp) \ .should_receive('getgrnam') \ .and_return(grp.struct_group(['gx', 'x', 100, []])) flexmock(grp) \ .should_receive('getgrall') \ .and_return([ grp.struct_group(['g1', 'x', 101, [longname]]), grp.struct_group(['g2', 'x', 102, [shortname]]), grp.struct_group(['g3', 'x', 103, [posixname]]), ]) result = expand_user({'global': {'user': '******' + longname}}) expect = dict( name=posixname, uid=1234, system=False, sudo=False, comment=longname, groups=[{'name': 'gx', 'gid': 100}, {'name': 'g1', 'gid': 101}]) assert result == expect
def test_expand_user_no_such_user(): # user does not exist on the system flexmock(pwd).should_receive('getpwnam').and_raise(KeyError) result = expand_user({'global': {'user': '******'}}) expect = dict(name='tester', uid=None, system=False, groups=[], sudo=False) assert result == expect
def test_expand_user_invalid(): with pytest.raises(ValueError): expand_user({'global': {'user': '******'}})