File: //lib/python3/dist-packages/macaroonbakery/tests/test_namespace.py
# Copyright 2017 Canonical Ltd.
# Licensed under the LGPLv3, see LICENCE file for details.
from unittest import TestCase
import macaroonbakery.checkers as checkers
class TestNamespace(TestCase):
def test_serialize(self):
tests = [
('empty namespace', None, b''),
('standard namespace', {'std': ''}, b'std:'),
('several elements', {
'std': '',
'http://blah.blah': 'blah',
'one': 'two',
'foo.com/x.v0.1': 'z',
}, b'foo.com/x.v0.1:z http://blah.blah:blah one:two std:'),
('sort by URI not by field', {
'a': 'one',
'a1': 'two',
}, b'a:one a1:two')
]
for test in tests:
ns = checkers.Namespace(test[1])
data = ns.serialize_text()
self.assertEquals(data, test[2])
self.assertEquals(str(ns), test[2].decode('utf-8'))
# Check that it can be deserialize to the same thing:
ns1 = checkers.deserialize_namespace(data)
self.assertEquals(ns1, ns)
# TODO(rogpeppe) add resolve tests
def test_register(self):
ns = checkers.Namespace(None)
ns.register('testns', 't')
prefix = ns.resolve('testns')
self.assertEquals(prefix, 't')
ns.register('other', 'o')
prefix = ns.resolve('other')
self.assertEquals(prefix, 'o')
# If we re-register the same URL, it does nothing.
ns.register('other', 'p')
prefix = ns.resolve('other')
self.assertEquals(prefix, 'o')
def test_register_bad_uri(self):
ns = checkers.Namespace(None)
with self.assertRaises(KeyError):
ns.register('', 'x')
def test_register_bad_prefix(self):
ns = checkers.Namespace(None)
with self.assertRaises(ValueError):
ns.register('std', 'x:1')