test-hgweb-auth.py
107 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
/ tests / test-hgweb-auth.py
Sune Foldager
|
r8333 | from mercurial import demandimport; demandimport.enable() | ||
Patrick Mezard
|
r15024 | import urllib2 | ||
Patrick Mezard
|
r15005 | from mercurial import ui, util | ||
Sune Foldager
|
r8333 | from mercurial import url | ||
from mercurial.error import Abort | ||||
class myui(ui.ui): | ||||
def interactive(self): | ||||
return False | ||||
origui = myui() | ||||
def writeauth(items): | ||||
ui = origui.copy() | ||||
for name, value in items.iteritems(): | ||||
ui.setconfig('auth', name, value) | ||||
return ui | ||||
def dumpdict(dict): | ||||
Matt Mackall
|
r10282 | return '{' + ', '.join(['%s: %s' % (k, dict[k]) | ||
for k in sorted(dict.iterkeys())]) + '}' | ||||
Sune Foldager
|
r8333 | |||
Patrick Mezard
|
r15005 | def test(auth, urls=None): | ||
Sune Foldager
|
r8333 | print 'CFG:', dumpdict(auth) | ||
prefixes = set() | ||||
for k in auth: | ||||
prefixes.add(k.split('.', 1)[0]) | ||||
for p in prefixes: | ||||
Patrick Mezard
|
r15005 | for name in ('.username', '.password'): | ||
if (p + name) not in auth: | ||||
auth[p + name] = p | ||||
auth = dict((k, v) for k, v in auth.iteritems() if v is not None) | ||||
Sune Foldager
|
r8333 | |||
ui = writeauth(auth) | ||||
def _test(uri): | ||||
print 'URI:', uri | ||||
try: | ||||
pm = url.passwordmgr(ui) | ||||
Patrick Mezard
|
r15025 | u, authinfo = util.url(uri).authinfo() | ||
Patrick Mezard
|
r15005 | if authinfo is not None: | ||
pm.add_password(*authinfo) | ||||
Patrick Mezard
|
r15025 | print ' ', pm.find_user_password('test', u) | ||
Simon Heimberg
|
r19378 | except Abort: | ||
Sune Foldager
|
r8333 | print 'abort' | ||
Patrick Mezard
|
r15005 | if not urls: | ||
urls = [ | ||||
'http://example.org/foo', | ||||
'http://example.org/foo/bar', | ||||
'http://example.org/bar', | ||||
'https://example.org/foo', | ||||
'https://example.org/foo/bar', | ||||
'https://example.org/bar', | ||||
'https://x@example.org/bar', | ||||
'https://y@example.org/bar', | ||||
] | ||||
for u in urls: | ||||
_test(u) | ||||
Sune Foldager
|
r8333 | |||
print '\n*** Test in-uri schemes\n' | ||||
test({'x.prefix': 'http://example.org'}) | ||||
test({'x.prefix': 'https://example.org'}) | ||||
test({'x.prefix': 'http://example.org', 'x.schemes': 'https'}) | ||||
test({'x.prefix': 'https://example.org', 'x.schemes': 'http'}) | ||||
print '\n*** Test separately configured schemes\n' | ||||
test({'x.prefix': 'example.org', 'x.schemes': 'http'}) | ||||
test({'x.prefix': 'example.org', 'x.schemes': 'https'}) | ||||
test({'x.prefix': 'example.org', 'x.schemes': 'http https'}) | ||||
print '\n*** Test prefix matching\n' | ||||
Matt Mackall
|
r10282 | test({'x.prefix': 'http://example.org/foo', | ||
'y.prefix': 'http://example.org/bar'}) | ||||
test({'x.prefix': 'http://example.org/foo', | ||||
'y.prefix': 'http://example.org/foo/bar'}) | ||||
Sune Foldager
|
r8333 | test({'x.prefix': '*', 'y.prefix': 'https://example.org/bar'}) | ||
Patrick Mezard
|
r15005 | |||
print '\n*** Test user matching\n' | ||||
test({'x.prefix': 'http://example.org/foo', | ||||
'x.username': None, | ||||
'x.password': 'xpassword'}, | ||||
urls=['http://y@example.org/foo']) | ||||
test({'x.prefix': 'http://example.org/foo', | ||||
'x.username': None, | ||||
'x.password': 'xpassword', | ||||
'y.prefix': 'http://example.org/foo', | ||||
'y.username': 'y', | ||||
'y.password': 'ypassword'}, | ||||
urls=['http://y@example.org/foo']) | ||||
test({'x.prefix': 'http://example.org/foo/bar', | ||||
'x.username': None, | ||||
'x.password': 'xpassword', | ||||
'y.prefix': 'http://example.org/foo', | ||||
'y.username': 'y', | ||||
'y.password': 'ypassword'}, | ||||
urls=['http://y@example.org/foo/bar']) | ||||
Patrick Mezard
|
r15024 | |||
def testauthinfo(fullurl, authurl): | ||||
print 'URIs:', fullurl, authurl | ||||
pm = urllib2.HTTPPasswordMgrWithDefaultRealm() | ||||
pm.add_password(*util.url(fullurl).authinfo()[1]) | ||||
print pm.find_user_password('test', authurl) | ||||
print '\n*** Test urllib2 and util.url\n' | ||||
testauthinfo('http://user@example.com:8080/foo', 'http://example.com:8080/foo') | ||||