# Copyright 2017 Canonical Ltd. # Licensed under the LGPLv3, see LICENCE file for details. import unittest import macaroonbakery.bakery as bakery import macaroonbakery.httpbakery as httpbakery from httmock import HTTMock, urlmatch class TestKeyRing(unittest.TestCase): def test_cache_fetch(self): key = bakery.generate_key() @urlmatch(path='.*/discharge/info') def discharge_info(url, request): return { 'status_code': 200, 'content': { 'Version': bakery.LATEST_VERSION, 'PublicKey': str(key.public_key), } } expectInfo = bakery.ThirdPartyInfo( public_key=key.public_key, version=bakery.LATEST_VERSION ) kr = httpbakery.ThirdPartyLocator(allow_insecure=True) with HTTMock(discharge_info): info = kr.third_party_info('http://0.1.2.3/') self.assertEqual(info, expectInfo) def test_cache_norefetch(self): key = bakery.generate_key() @urlmatch(path='.*/discharge/info') def discharge_info(url, request): return { 'status_code': 200, 'content': { 'Version': bakery.LATEST_VERSION, 'PublicKey': str(key.public_key), } } expectInfo = bakery.ThirdPartyInfo( public_key=key.public_key, version=bakery.LATEST_VERSION ) kr = httpbakery.ThirdPartyLocator(allow_insecure=True) with HTTMock(discharge_info): info = kr.third_party_info('http://0.1.2.3/') self.assertEqual(info, expectInfo) info = kr.third_party_info('http://0.1.2.3/') self.assertEqual(info, expectInfo) def test_cache_fetch_no_version(self): key = bakery.generate_key() @urlmatch(path='.*/discharge/info') def discharge_info(url, request): return { 'status_code': 200, 'content': { 'PublicKey': str(key.public_key), } } expectInfo = bakery.ThirdPartyInfo( public_key=key.public_key, version=bakery.VERSION_1 ) kr = httpbakery.ThirdPartyLocator(allow_insecure=True) with HTTMock(discharge_info): info = kr.third_party_info('http://0.1.2.3/') self.assertEqual(info, expectInfo) def test_allow_insecure(self): kr = httpbakery.ThirdPartyLocator() with self.assertRaises(bakery.ThirdPartyInfoNotFound): kr.third_party_info('http://0.1.2.3/') def test_fallback(self): key = bakery.generate_key() @urlmatch(path='.*/discharge/info') def discharge_info(url, request): return { 'status_code': 404, } @urlmatch(path='.*/publickey') def public_key(url, request): return { 'status_code': 200, 'content': { 'PublicKey': str(key.public_key), } } expectInfo = bakery.ThirdPartyInfo( public_key=key.public_key, version=bakery.VERSION_1 ) kr = httpbakery.ThirdPartyLocator(allow_insecure=True) with HTTMock(discharge_info): with HTTMock(public_key): info = kr.third_party_info('http://0.1.2.3/') self.assertEqual(info, expectInfo)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 91 B | 0644 |
|
common.py | File | 3.2 KB | 0644 |
|
test_agent.py | File | 15.33 KB | 0644 |
|
test_authorizer.py | File | 4.79 KB | 0644 |
|
test_bakery.py | File | 9.5 KB | 0644 |
|
test_checker.py | File | 35.75 KB | 0644 |
|
test_checkers.py | File | 15.28 KB | 0644 |
|
test_client.py | File | 25.25 KB | 0644 |
|
test_codec.py | File | 7.56 KB | 0644 |
|
test_discharge.py | File | 21.06 KB | 0644 |
|
test_discharge_all.py | File | 5.72 KB | 0644 |
|
test_httpbakery.py | File | 1.26 KB | 0644 |
|
test_keyring.py | File | 3.45 KB | 0644 |
|
test_macaroon.py | File | 8.23 KB | 0644 |
|
test_namespace.py | File | 1.87 KB | 0644 |
|
test_oven.py | File | 5.03 KB | 0644 |
|
test_store.py | File | 546 B | 0644 |
|
test_time.py | File | 4.65 KB | 0644 |
|
test_utils.py | File | 3.36 KB | 0644 |
|