view tests/test-hgweb-auth.py @ 13372:5bced0d28a39

url: return the matched authentication group name from readauthforuri() Internally, the group name is only used in debug statements, but readauthforuri can be also used externally to determine which group will be matched for a given URL.
author Steve Borho <steve@borho.org>
date Sun, 13 Feb 2011 12:19:58 -0600
parents 08a0f04b56bd
children 4a43e23b8c55
line wrap: on
line source

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'})