diff --git a/contrib/python3-whitelist b/contrib/python3-whitelist --- a/contrib/python3-whitelist +++ b/contrib/python3-whitelist @@ -261,6 +261,7 @@ test-hgk.t test-hgrc.t test-hgweb-annotate-whitespace.t +test-hgweb-auth.py test-hgweb-bundle.t test-hgweb-commands.t test-hgweb-csp.t diff --git a/tests/test-hgweb-auth.py b/tests/test-hgweb-auth.py --- a/tests/test-hgweb-auth.py +++ b/tests/test-hgweb-auth.py @@ -24,16 +24,26 @@ def writeauth(items): ui = origui.copy() for name, value in items.items(): - ui.setconfig('auth', name, value) + ui.setconfig(b'auth', name, value) return ui +def _stringifyauthinfo(ai): + if ai is None: + return ai + realm, authuris, user, passwd = ai + return (pycompat.strurl(realm), + [pycompat.strurl(u) for u in authuris], + pycompat.strurl(user), + pycompat.strurl(passwd), + ) + def test(auth, urls=None): print('CFG:', pycompat.sysstr(stringutil.pprint(auth, bprefix=True))) prefixes = set() for k in auth: - prefixes.add(k.split('.', 1)[0]) + prefixes.add(k.split(b'.', 1)[0]) for p in prefixes: - for name in ('.username', '.password'): + for name in (b'.username', b'.password'): if (p + name) not in auth: auth[p + name] = p auth = dict((k, v) for k, v in auth.items() if v is not None) @@ -41,106 +51,109 @@ ui = writeauth(auth) def _test(uri): - print('URI:', uri) + print('URI:', pycompat.strurl(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)) + pm.add_password(*_stringifyauthinfo(authinfo)) + print(' ', tuple(pycompat.strurl(a) for a in + pm.find_user_password('test', + pycompat.strurl(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', + b'http://example.org/foo', + b'http://example.org/foo/bar', + b'http://example.org/bar', + b'https://example.org/foo', + b'https://example.org/foo/bar', + b'https://example.org/bar', + b'https://x@example.org/bar', + b'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'}) +test({b'x.prefix': b'http://example.org'}) +test({b'x.prefix': b'https://example.org'}) +test({b'x.prefix': b'http://example.org', b'x.schemes': b'https'}) +test({b'x.prefix': b'https://example.org', b'x.schemes': b'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'}) +test({b'x.prefix': b'example.org', b'x.schemes': b'http'}) +test({b'x.prefix': b'example.org', b'x.schemes': b'https'}) +test({b'x.prefix': b'example.org', b'x.schemes': b'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'}) +test({b'x.prefix': b'http://example.org/foo', + b'y.prefix': b'http://example.org/bar'}) +test({b'x.prefix': b'http://example.org/foo', + b'y.prefix': b'http://example.org/foo/bar'}) +test({b'x.prefix': b'*', b'y.prefix': b'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']) +test({b'x.prefix': b'http://example.org/foo', + b'x.username': None, + b'x.password': b'xpassword'}, + urls=[b'http://y@example.org/foo']) +test({b'x.prefix': b'http://example.org/foo', + b'x.username': None, + b'x.password': b'xpassword', + b'y.prefix': b'http://example.org/foo', + b'y.username': b'y', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) +test({b'x.prefix': b'http://example.org/foo/bar', + b'x.username': None, + b'x.password': b'xpassword', + b'y.prefix': b'http://example.org/foo', + b'y.username': b'y', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo/bar']) print('\n*** Test user matching with name in prefix\n') # prefix, username and URL have the same user -test({'x.prefix': 'https://example.org/foo', - 'x.username': None, - 'x.password': 'xpassword', - 'y.prefix': 'http://y@example.org/foo', - 'y.username': 'y', - 'y.password': 'ypassword'}, - urls=['http://y@example.org/foo']) +test({b'x.prefix': b'https://example.org/foo', + b'x.username': None, + b'x.password': b'xpassword', + b'y.prefix': b'http://y@example.org/foo', + b'y.username': b'y', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) # Prefix has a different user from username and URL -test({'y.prefix': 'http://z@example.org/foo', - 'y.username': 'y', - 'y.password': 'ypassword'}, - urls=['http://y@example.org/foo']) +test({b'y.prefix': b'http://z@example.org/foo', + b'y.username': b'y', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) # Prefix has a different user from URL; no username -test({'y.prefix': 'http://z@example.org/foo', - 'y.password': 'ypassword'}, - urls=['http://y@example.org/foo']) +test({b'y.prefix': b'http://z@example.org/foo', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) # Prefix and URL have same user, but doesn't match username -test({'y.prefix': 'http://y@example.org/foo', - 'y.username': 'z', - 'y.password': 'ypassword'}, - urls=['http://y@example.org/foo']) +test({b'y.prefix': b'http://y@example.org/foo', + b'y.username': b'z', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) # Prefix and URL have the same user; no username -test({'y.prefix': 'http://y@example.org/foo', - 'y.password': 'ypassword'}, - urls=['http://y@example.org/foo']) +test({b'y.prefix': b'http://y@example.org/foo', + b'y.password': b'ypassword'}, + urls=[b'http://y@example.org/foo']) # Prefix user, but no URL user or username -test({'y.prefix': 'http://y@example.org/foo', - 'y.password': 'ypassword'}, - urls=['http://example.org/foo']) +test({b'y.prefix': b'http://y@example.org/foo', + b'y.password': b'ypassword'}, + urls=[b'http://example.org/foo']) def testauthinfo(fullurl, authurl): print('URIs:', fullurl, authurl) pm = urlreq.httppasswordmgrwithdefaultrealm() - pm.add_password(*util.url(fullurl).authinfo()[1]) + ai = _stringifyauthinfo(util.url(pycompat.bytesurl(fullurl)).authinfo()[1]) + pm.add_password(*ai) print(pm.find_user_password('test', authurl)) print('\n*** Test urllib2 and util.url\n')