diff options
author | Colin Watson <cjwatson@debian.org> | 2017-11-03 12:13:13 +0000 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2017-11-03 12:13:13 +0000 |
commit | 3d9eaeb5dacee168a93da090e2c0d46eedbe51a2 (patch) | |
tree | 779d797fb3cf6cc9552cb08c40662b5d3d8397fd /macaroonbakery/tests/test_keyring.py | |
parent | 79ff2842fa477ee0693ea167c0a74cd7cf080d27 (diff) |
Import py-macaroon-bakery_0.0.4.orig.tar.gz
Diffstat (limited to 'macaroonbakery/tests/test_keyring.py')
-rw-r--r-- | macaroonbakery/tests/test_keyring.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/macaroonbakery/tests/test_keyring.py b/macaroonbakery/tests/test_keyring.py new file mode 100644 index 0000000..351b144 --- /dev/null +++ b/macaroonbakery/tests/test_keyring.py @@ -0,0 +1,111 @@ +# Copyright 2017 Canonical Ltd. +# Licensed under the LGPLv3, see LICENCE file for details. +import unittest + +from httmock import urlmatch, HTTMock + +import macaroonbakery +from macaroonbakery import httpbakery + + +class TestKeyRing(unittest.TestCase): + + def test_cache_fetch(self): + key = macaroonbakery.generate_key() + + @urlmatch(path='.*/discharge/info') + def discharge_info(url, request): + return { + 'status_code': 200, + 'content': { + 'Version': macaroonbakery.LATEST_BAKERY_VERSION, + 'PublicKey': key.public_key.encode().decode('utf-8') + } + } + + expectInfo = macaroonbakery.ThirdPartyInfo( + public_key=key.public_key, + version=macaroonbakery.LATEST_BAKERY_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 = macaroonbakery.generate_key() + + @urlmatch(path='.*/discharge/info') + def discharge_info(url, request): + return { + 'status_code': 200, + 'content': { + 'Version': macaroonbakery.LATEST_BAKERY_VERSION, + 'PublicKey': key.public_key.encode().decode('utf-8') + } + } + + expectInfo = macaroonbakery.ThirdPartyInfo( + public_key=key.public_key, + version=macaroonbakery.LATEST_BAKERY_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 = macaroonbakery.generate_key() + + @urlmatch(path='.*/discharge/info') + def discharge_info(url, request): + return { + 'status_code': 200, + 'content': { + 'PublicKey': key.public_key.encode().decode('utf-8') + } + } + + expectInfo = macaroonbakery.ThirdPartyInfo( + public_key=key.public_key, + version=macaroonbakery.BAKERY_V1 + ) + 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(macaroonbakery.error.ThirdPartyInfoNotFound): + kr.third_party_info('http://0.1.2.3/') + + def test_fallback(self): + key = macaroonbakery.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': key.public_key.encode().decode('utf-8') + } + } + + expectInfo = macaroonbakery.ThirdPartyInfo( + public_key=key.public_key, + version=macaroonbakery.BAKERY_V1 + ) + 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) |