/tests/test-hgweb-auth.py
Python | 107 lines | 92 code | 15 blank | 0 comment | 13 complexity | a817b002aa0806b09855709e2eb53a8d MD5 | raw file
Possible License(s): GPL-2.0
- from mercurial import demandimport; demandimport.enable()
- import urllib2
- from mercurial import ui, util
- 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):
- return '{' + ', '.join(['%s: %s' % (k, dict[k])
- for k in sorted(dict.iterkeys())]) + '}'
- def test(auth, urls=None):
- print 'CFG:', dumpdict(auth)
- prefixes = set()
- for k in auth:
- prefixes.add(k.split('.', 1)[0])
- for p in prefixes:
- 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)
- ui = writeauth(auth)
- def _test(uri):
- print 'URI:', uri
- try:
- pm = url.passwordmgr(ui)
- u, authinfo = util.url(uri).authinfo()
- if authinfo is not None:
- pm.add_password(*authinfo)
- print ' ', pm.find_user_password('test', u)
- except Abort:
- print 'abort'
- 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)
- 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'
- 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'})
- test({'x.prefix': '*', 'y.prefix': 'https://example.org/bar'})
- 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'])
- 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')