diff -r 57875cf423c9 -r 2372284d9457 tests/test-trusted.py --- a/tests/test-trusted.py Sat Oct 05 10:29:34 2019 -0400 +++ b/tests/test-trusted.py Sun Oct 06 09:45:02 2019 -0400 @@ -20,20 +20,33 @@ basehgrc = f.read() f.close() + def _maybesysstr(v): if isinstance(v, bytes): return pycompat.sysstr(v) return pycompat.sysstr(stringutil.pprint(v)) + def bprint(*args, **kwargs): - print(*[_maybesysstr(a) for a in args], - **{k: _maybesysstr(v) for k, v in kwargs.items()}) + print( + *[_maybesysstr(a) for a in args], + **{k: _maybesysstr(v) for k, v in kwargs.items()} + ) # avoid awkward interleaving with ui object's output sys.stdout.flush() -def testui(user=b'foo', group=b'bar', tusers=(), tgroups=(), - cuser=b'foo', cgroup=b'bar', debug=False, silent=False, - report=True): + +def testui( + user=b'foo', + group=b'bar', + tusers=(), + tgroups=(), + cuser=b'foo', + cgroup=b'bar', + debug=False, + silent=False, + report=True, +): # user, group => owners of the file # tusers, tgroups => trusted users/groups # cuser, cgroup => user/group of the current process @@ -58,29 +71,33 @@ if uid is None: return cuser return user + util.username = username def groupname(gid=None): if gid is None: return b'bar' return group + util.groupname = groupname def isowner(st): return user == cuser + util.isowner = isowner # try to read everything - #print '# File belongs to user %s, group %s' % (user, group) - #print '# trusted users = %s; trusted groups = %s' % (tusers, tgroups) + # print '# File belongs to user %s, group %s' % (user, group) + # print '# trusted users = %s; trusted groups = %s' % (tusers, tgroups) kind = (b'different', b'same') who = (b'', b'user', b'group', b'user and the group') - trusted = who[(user in tusers) + 2*(group in tgroups)] + trusted = who[(user in tusers) + 2 * (group in tgroups)] if trusted: trusted = b', but we trust the ' + trusted - bprint(b'# %s user, %s group%s' % (kind[user == cuser], - kind[group == cgroup], - trusted)) + bprint( + b'# %s user, %s group%s' + % (kind[user == cuser], kind[group == cgroup], trusted) + ) u = uimod.ui.load() # disable the configuration registration warning @@ -101,14 +118,15 @@ bprint(b'untrusted') for name, path in u.configitems(b'paths', untrusted=True): bprint(b'.', end=b' ') - u.config(b'paths', name) # warning with debug=True + u.config(b'paths', name) # warning with debug=True bprint(b'.', end=b' ') - u.config(b'paths', name, untrusted=True) # no warnings + u.config(b'paths', name, untrusted=True) # no warnings bprint(name, b'=', util.pconvert(path)) print() return u + os.mkdir(b'repo') os.chdir(b'repo') os.mkdir(b'.hg') @@ -117,7 +135,7 @@ f.write(b'local = /another/path\n\n') f.close() -#print '# Everything is run by user foo, group bar\n' +# print '# Everything is run by user foo, group bar\n' # same user, same group testui() @@ -149,12 +167,20 @@ testui(user=b'abc', group=b'def', tusers=[b'def'], tgroups=[b'abc']) # ... lists of user names work bprint(b"# list of user names") -testui(user=b'abc', group=b'def', tusers=[b'foo', b'xyz', b'abc', b'bleh'], - tgroups=[b'bar', b'baz', b'qux']) +testui( + user=b'abc', + group=b'def', + tusers=[b'foo', b'xyz', b'abc', b'bleh'], + tgroups=[b'bar', b'baz', b'qux'], +) # ... lists of group names work bprint(b"# list of group names") -testui(user=b'abc', group=b'def', tusers=[b'foo', b'xyz', b'bleh'], - tgroups=[b'bar', b'def', b'baz', b'qux']) +testui( + user=b'abc', + group=b'def', + tusers=[b'foo', b'xyz', b'bleh'], + tgroups=[b'bar', b'def', b'baz', b'qux'], +) bprint(b"# Can't figure out the name of the user running this process") testui(user=b'abc', group=b'def', cuser=None) @@ -190,8 +216,12 @@ u.setconfig(b'ui', b'debug', b'on') u.readconfig(filename) u2 = u.copy() + + def username(uid=None): return b'foo' + + util.username = username u2.readconfig(b'.hg/hgrc') bprint(b'trusted:') @@ -202,6 +232,7 @@ print() bprint(b"# error handling") + def assertraises(f, exc=error.Abort): try: f() @@ -210,6 +241,7 @@ else: bprint(b'no exception?!') + bprint(b"# file doesn't exist") os.unlink(b'.hg/hgrc') assert not os.path.exists(b'.hg/hgrc') @@ -232,6 +264,7 @@ return error.ParseError(*args) + try: testui(user=b'abc', group=b'def', silent=True) except error.ParseError as inst: @@ -245,7 +278,8 @@ print() bprint(b'# access typed information') with open(b'.hg/hgrc', 'wb') as f: - f.write(b'''\ + f.write( + b'''\ [foo] sub=main sub:one=one @@ -255,34 +289,43 @@ int=42 bytes=81mb list=spam,ham,eggs -''') +''' + ) u = testui(user=b'abc', group=b'def', cuser=b'foo', silent=True) + + def configpath(section, name, default=None, untrusted=False): path = u.configpath(section, name, default, untrusted) if path is None: return None return util.pconvert(path) + bprint(b'# suboptions, trusted and untrusted') trusted = u.configsuboptions(b'foo', b'sub') untrusted = u.configsuboptions(b'foo', b'sub', untrusted=True) bprint( (trusted[0], sorted(trusted[1].items())), - (untrusted[0], sorted(untrusted[1].items()))) + (untrusted[0], sorted(untrusted[1].items())), +) bprint(b'# path, trusted and untrusted') bprint(configpath(b'foo', b'path'), configpath(b'foo', b'path', untrusted=True)) bprint(b'# bool, trusted and untrusted') -bprint(u.configbool(b'foo', b'bool'), - u.configbool(b'foo', b'bool', untrusted=True)) +bprint( + u.configbool(b'foo', b'bool'), u.configbool(b'foo', b'bool', untrusted=True) +) bprint(b'# int, trusted and untrusted') bprint( u.configint(b'foo', b'int', 0), - u.configint(b'foo', b'int', 0, untrusted=True)) + u.configint(b'foo', b'int', 0, untrusted=True), +) bprint(b'# bytes, trusted and untrusted') bprint( u.configbytes(b'foo', b'bytes', 0), - u.configbytes(b'foo', b'bytes', 0, untrusted=True)) + u.configbytes(b'foo', b'bytes', 0, untrusted=True), +) bprint(b'# list, trusted and untrusted') bprint( u.configlist(b'foo', b'list', []), - u.configlist(b'foo', b'list', [], untrusted=True)) + u.configlist(b'foo', b'list', [], untrusted=True), +)