##// END OF EJS Templates
merge main and crew
merge main and crew

File last commit:

r19378:9de689d2 default
r20621:5beb49fd merge default
Show More
test-hgweb-auth.py
107 lines | 3.4 KiB | text/x-python | PythonLexer
/ tests / test-hgweb-auth.py
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 from mercurial import demandimport; demandimport.enable()
Patrick Mezard
http: strip credentials from urllib2 manager URIs (issue2885)...
r15024 import urllib2
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 from mercurial import ui, util
Sune Foldager
allow http authentication information to be specified in the configuration
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
many, many trivial check-code fixups
r10282 return '{' + ', '.join(['%s: %s' % (k, dict[k])
for k in sorted(dict.iterkeys())]) + '}'
Sune Foldager
allow http authentication information to be specified in the configuration
r8333
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 def test(auth, urls=None):
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 print 'CFG:', dumpdict(auth)
prefixes = set()
for k in auth:
prefixes.add(k.split('.', 1)[0])
for p in prefixes:
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
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
allow http authentication information to be specified in the configuration
r8333
ui = writeauth(auth)
def _test(uri):
print 'URI:', uri
try:
pm = url.passwordmgr(ui)
Patrick Mezard
http: pass user to readauthforuri() (fix 4a43e23b8c55)...
r15025 u, authinfo = util.url(uri).authinfo()
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
r15005 if authinfo is not None:
pm.add_password(*authinfo)
Patrick Mezard
http: pass user to readauthforuri() (fix 4a43e23b8c55)...
r15025 print ' ', pm.find_user_password('test', u)
Simon Heimberg
cleanup: drop unused variables and an unused import
r19378 except Abort:
Sune Foldager
allow http authentication information to be specified in the configuration
r8333 print 'abort'
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
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
allow http authentication information to be specified in the configuration
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
many, many trivial check-code fixups
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
allow http authentication information to be specified in the configuration
r8333 test({'x.prefix': '*', 'y.prefix': 'https://example.org/bar'})
Patrick Mezard
hgweb: do not ignore [auth] if url has a username (issue2822)...
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
http: strip credentials from urllib2 manager URIs (issue2885)...
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')