test-trusted.py
189 lines
| 5.4 KiB
| text/x-python
|
PythonLexer
/ tests / test-trusted.py
Alexis S. L. Carvalho
|
r3551 | # Since it's not easy to write a test that portably deals | ||
# with files from different users/groups, we cheat a bit by | ||||
# monkey-patching some functions in the util module | ||||
import os | ||||
Matt Mackall
|
r8144 | from mercurial import ui, util, error | ||
Alexis S. L. Carvalho
|
r3551 | |||
hgrc = os.environ['HGRCPATH'] | ||||
Alexis S. L. Carvalho
|
r5523 | f = open(hgrc) | ||
basehgrc = f.read() | ||||
f.close() | ||||
Alexis S. L. Carvalho
|
r3551 | |||
def testui(user='foo', group='bar', tusers=(), tgroups=(), | ||||
Alexis S. L. Carvalho
|
r3552 | cuser='foo', cgroup='bar', debug=False, silent=False): | ||
Alexis S. L. Carvalho
|
r3551 | # user, group => owners of the file | ||
# tusers, tgroups => trusted users/groups | ||||
# cuser, cgroup => user/group of the current process | ||||
# write a global hgrc with the list of trusted users/groups and | ||||
# some setting so that we can be sure it was read | ||||
f = open(hgrc, 'w') | ||||
Alexis S. L. Carvalho
|
r5523 | f.write(basehgrc) | ||
f.write('\n[paths]\n') | ||||
Alexis S. L. Carvalho
|
r3551 | f.write('global = /some/path\n\n') | ||
if tusers or tgroups: | ||||
f.write('[trusted]\n') | ||||
if tusers: | ||||
f.write('users = %s\n' % ', '.join(tusers)) | ||||
if tgroups: | ||||
f.write('groups = %s\n' % ', '.join(tgroups)) | ||||
f.close() | ||||
# override the functions that give names to uids and gids | ||||
def username(uid=None): | ||||
if uid is None: | ||||
return cuser | ||||
return user | ||||
util.username = username | ||||
def groupname(gid=None): | ||||
if gid is None: | ||||
return 'bar' | ||||
return group | ||||
util.groupname = groupname | ||||
Martin Geisler
|
r8657 | def isowner(st): | ||
Alexis S. L. Carvalho
|
r3677 | return user == cuser | ||
util.isowner = isowner | ||||
Alexis S. L. Carvalho
|
r3551 | # try to read everything | ||
#print '# File belongs to user %s, group %s' % (user, group) | ||||
#print '# trusted users = %s; trusted groups = %s' % (tusers, tgroups) | ||||
kind = ('different', 'same') | ||||
who = ('', 'user', 'group', 'user and the group') | ||||
trusted = who[(user in tusers) + 2*(group in tgroups)] | ||||
if trusted: | ||||
trusted = ', but we trust the ' + trusted | ||||
print '# %s user, %s group%s' % (kind[user == cuser], kind[group == cgroup], | ||||
trusted) | ||||
Matt Mackall
|
r8190 | u = ui.ui() | ||
u.setconfig('ui', 'debug', str(bool(debug))) | ||||
Alexis S. L. Carvalho
|
r3551 | u.readconfig('.hg/hgrc') | ||
Alexis S. L. Carvalho
|
r3552 | if silent: | ||
return u | ||||
print 'trusted' | ||||
Alexis S. L. Carvalho
|
r3551 | for name, path in u.configitems('paths'): | ||
print ' ', name, '=', path | ||||
Alexis S. L. Carvalho
|
r3552 | print 'untrusted' | ||
for name, path in u.configitems('paths', untrusted=True): | ||||
print '.', | ||||
u.config('paths', name) # warning with debug=True | ||||
print '.', | ||||
u.config('paths', name, untrusted=True) # no warnings | ||||
print name, '=', path | ||||
Alexis S. L. Carvalho
|
r3551 | |||
return u | ||||
os.mkdir('repo') | ||||
os.chdir('repo') | ||||
os.mkdir('.hg') | ||||
f = open('.hg/hgrc', 'w') | ||||
f.write('[paths]\n') | ||||
f.write('local = /another/path\n\n') | ||||
f.close() | ||||
#print '# Everything is run by user foo, group bar\n' | ||||
# same user, same group | ||||
testui() | ||||
# same user, different group | ||||
testui(group='def') | ||||
# different user, same group | ||||
testui(user='abc') | ||||
# ... but we trust the group | ||||
testui(user='abc', tgroups=['bar']) | ||||
# different user, different group | ||||
testui(user='abc', group='def') | ||||
# ... but we trust the user | ||||
testui(user='abc', group='def', tusers=['abc']) | ||||
# ... but we trust the group | ||||
testui(user='abc', group='def', tgroups=['def']) | ||||
# ... but we trust the user and the group | ||||
testui(user='abc', group='def', tusers=['abc'], tgroups=['def']) | ||||
# ... but we trust all users | ||||
print '# we trust all users' | ||||
testui(user='abc', group='def', tusers=['*']) | ||||
# ... but we trust all groups | ||||
print '# we trust all groups' | ||||
testui(user='abc', group='def', tgroups=['*']) | ||||
# ... but we trust the whole universe | ||||
print '# we trust all users and groups' | ||||
testui(user='abc', group='def', tusers=['*'], tgroups=['*']) | ||||
# ... check that users and groups are in different namespaces | ||||
print "# we don't get confused by users and groups with the same name" | ||||
testui(user='abc', group='def', tusers=['def'], tgroups=['abc']) | ||||
# ... lists of user names work | ||||
print "# list of user names" | ||||
testui(user='abc', group='def', tusers=['foo', 'xyz', 'abc', 'bleh'], | ||||
tgroups=['bar', 'baz', 'qux']) | ||||
# ... lists of group names work | ||||
print "# list of group names" | ||||
testui(user='abc', group='def', tusers=['foo', 'xyz', 'bleh'], | ||||
tgroups=['bar', 'def', 'baz', 'qux']) | ||||
print "# Can't figure out the name of the user running this process" | ||||
testui(user='abc', group='def', cuser=None) | ||||
Alexis S. L. Carvalho
|
r3552 | |||
print "# prints debug warnings" | ||||
u = testui(user='abc', group='def', cuser='foo', debug=True) | ||||
Matt Mackall
|
r8142 | print "# ui.readconfig sections" | ||
Alexis S. L. Carvalho
|
r3552 | filename = 'foobar' | ||
f = open(filename, 'w') | ||||
f.write('[foobar]\n') | ||||
f.write('baz = quux\n') | ||||
f.close() | ||||
Matt Mackall
|
r8142 | u.readconfig(filename, sections = ['foobar']) | ||
Alexis S. L. Carvalho
|
r3552 | print u.config('foobar', 'baz') | ||
print "# read trusted, untrusted, new ui, trusted" | ||||
u = ui.ui() | ||||
Matt Mackall
|
r8136 | u.setconfig('ui', 'debug', 'on') | ||
Alexis S. L. Carvalho
|
r3552 | u.readconfig(filename) | ||
Matt Mackall
|
r8190 | u2 = u.copy() | ||
Alexis S. L. Carvalho
|
r3552 | def username(uid=None): | ||
return 'foo' | ||||
util.username = username | ||||
u2.readconfig('.hg/hgrc') | ||||
print 'trusted:' | ||||
print u2.config('foobar', 'baz') | ||||
print 'untrusted:' | ||||
print u2.config('foobar', 'baz', untrusted=True) | ||||
Thomas Arendsen Hein
|
r4516 | |||
Alexis S. L. Carvalho
|
r3552 | print "# error handling" | ||
def assertraises(f, exc=util.Abort): | ||||
try: | ||||
f() | ||||
except exc, inst: | ||||
print 'raised', inst.__class__.__name__ | ||||
else: | ||||
print 'no exception?!' | ||||
print "# file doesn't exist" | ||||
os.unlink('.hg/hgrc') | ||||
assert not os.path.exists('.hg/hgrc') | ||||
testui(debug=True, silent=True) | ||||
testui(user='abc', group='def', debug=True, silent=True) | ||||
print "# parse error" | ||||
f = open('.hg/hgrc', 'w') | ||||
Matt Mackall
|
r8144 | f.write('foo') | ||
Alexis S. L. Carvalho
|
r3552 | f.close() | ||
Matt Mackall
|
r8144 | try: | ||
testui(user='abc', group='def', silent=True) | ||||
Matt Mackall
|
r11291 | except error.ParseError, inst: | ||
Matt Mackall
|
r8144 | print inst | ||
Alexis S. L. Carvalho
|
r3552 | |||
Matt Mackall
|
r8144 | try: | ||
testui(debug=True, silent=True) | ||||
Matt Mackall
|
r11291 | except error.ParseError, inst: | ||
Matt Mackall
|
r8144 | print inst | ||