summaryrefslogtreecommitdiff
path: root/tests/test-hgweb-auth.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-hgweb-auth.py')
-rw-r--r--tests/test-hgweb-auth.py107
1 files changed, 107 insertions, 0 deletions
diff --git a/tests/test-hgweb-auth.py b/tests/test-hgweb-auth.py
new file mode 100644
index 0000000..8b1f78a
--- /dev/null
+++ b/tests/test-hgweb-auth.py
@@ -0,0 +1,107 @@
+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, e:
+ 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')