mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 16:31:02 +03:00
1d44bd2bbb
This allows us to write doctests depending on a ui object, but not on global configs. ui.load() is a class method so we can do wsgiui.load(). All ui() calls but for doctests are replaced with ui.load(). Some of them could be changed to not load configs later.
115 lines
3.5 KiB
Python
115 lines
3.5 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
from mercurial import demandimport; demandimport.enable()
|
|
from mercurial import (
|
|
error,
|
|
ui as uimod,
|
|
url,
|
|
util,
|
|
)
|
|
|
|
urlerr = util.urlerr
|
|
urlreq = util.urlreq
|
|
|
|
class myui(uimod.ui):
|
|
def interactive(self):
|
|
return False
|
|
|
|
origui = myui.load()
|
|
|
|
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, urlreq.httppasswordmgrwithdefaultrealm())
|
|
u, authinfo = util.url(uri).authinfo()
|
|
if authinfo is not None:
|
|
pm.add_password(*authinfo)
|
|
print(' ', pm.find_user_password('test', u))
|
|
except error.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 = urlreq.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')
|