diff tests/test-hgweb-auth.py @ 8333:89c80c3dc584

allow http authentication information to be specified in the configuration
author Sune Foldager <cryo@cyanite.org>
date Mon, 04 May 2009 20:26:27 +0200
parents
children 08a0f04b56bd
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hgweb-auth.py	Mon May 04 20:26:27 2009 +0200
@@ -0,0 +1,61 @@
+from mercurial import demandimport; demandimport.enable()
+from mercurial import ui
+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):
+    print 'CFG:', dumpdict(auth)
+    prefixes = set()
+    for k in auth:
+        prefixes.add(k.split('.', 1)[0])
+    for p in prefixes:
+        auth.update({p + '.username': p, p + '.password': p})
+
+    ui = writeauth(auth)
+
+    def _test(uri):
+        print 'URI:', uri
+        try:
+            pm = url.passwordmgr(ui)
+            print '    ', pm.find_user_password('test', uri)
+        except Abort, e:
+            print 'abort'
+
+    _test('http://example.org/foo')
+    _test('http://example.org/foo/bar')
+    _test('http://example.org/bar')
+    _test('https://example.org/foo')
+    _test('https://example.org/foo/bar')
+    _test('https://example.org/bar')
+
+
+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'})