class TestTextOcciRendering(unittest.TestCase): """ Simple sanity checks... """ # disable 'Unused attr' pylint check (not needing body here) # disable 'Too many instance attributes' pyling check (It's a test :)) # pylint: disable=W0612,R0902 registry = NonePersistentRegistry() def setUp(self): self.rendering = TextOcciRendering(self.registry) # type system... self.kind = Kind("http://example.com#", "foo", related=[Resource.kind]) self.invalid_kind = Kind("http://example.com#", "invalid") self.link = Kind("http://example.com#", "link", related=[Link.kind]) self.mixin = Mixin("http://example.com#", "mixin") self.action = Action("http://example.com#", "action") self.registry.set_backend(self.kind, KindBackend()) self.registry.set_backend(self.invalid_kind, KindBackend()) self.registry.set_backend(self.link, KindBackend()) self.registry.set_backend(self.mixin, MixinBackend()) self.registry.set_backend(self.action, ActionBackend()) # 2 linked entities self.entity = Resource("/foo/1", self.kind, [self.mixin]) trg = Resource("/foo/2", self.kind, [], []) self.link1 = Link("/link/1", self.link, [], self.entity, trg) self.entity.links = [self.link1] self.registry.add_resource("/foo/2", trg) self.registry.add_resource("/link/1", self.link1) self.registry.add_resource("/foo/1", self.entity) def tearDown(self): for res in self.registry.get_resources(): self.registry.delete_resource(res.identifier) for item in self.registry.get_categories(): self.registry.delete_mixin(item) # ========================================================================== # Failure # ========================================================================== def test_resource_for_failure(self): """ Check if the correct exceptions are thrown. """ # no kind available... res = Resource("/foo/1", self.mixin, [], links=[]) headers, body = self.rendering.from_entity(res) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) # kind does not relate to link or resource... res.kind = self.invalid_kind headers, body = self.rendering.from_entity(res) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) def test_resources_for_failure(self): """ Tests is a set of resource can be set and retrieved. """ heads = {"X-OCCI-Location": "/bla/bla/2"} self.assertRaises(AttributeError, self.rendering.to_entities, heads, "") def test_link_for_failure(self): """ Test link... """ # call creation of entity with non existing trg resource. trg = Resource("/bar/1", self.kind, [], []) link = Link("/bar/1", self.link, [], self.entity, trg) headers, body = self.rendering.from_entity(link) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) # ========================================================================== # Sanity # ========================================================================== def test_resource_for_sanity(self): """ Test is a resource can be rendered and retrieved. """ # basic check headers, body = self.rendering.from_entity(self.entity) new = self.rendering.to_entity(headers, body, None) self.assertEqual(self.entity.kind, new.kind) self.assertEqual(len(self.entity.links), len(new.links)) # verify that provided kind is taken kind = Kind("foo", "bar", related=[Resource.kind]) headers, body = self.rendering.from_entity(self.entity) new = self.rendering.to_entity(headers, body, kind) self.assertEqual(new.kind, kind) self.assertEqual(len(self.entity.links), len(new.links)) # verify that actions get added self.entity.actions = [self.action] headers, body = self.rendering.from_entity(self.entity) self.assertTrue("?action" in headers["Link"]) def test_resources_for_sanity(self): """ Tests is a set of resource can be set and retrieved for sanity. """ res = self.registry.get_resources() heads, body = self.rendering.from_entities(res, "/") entities = self.rendering.to_entities(heads, body) self.assertEqual(self.registry.get_resources(), entities) def test_link_for_sanity(self): """ Test is a link can be rendered and retrieved. """ headers, body = self.rendering.from_entity(self.link1) tmp = "occi.core.target=" + self.link1.target.identifier tmp += ", occi.core.source=" + self.link1.source.identifier headers["X-OCCI-Attribute"] = tmp new = self.rendering.to_entity(headers, body, None) self.assertEqual(self.link1.kind, new.kind) # do not alter the source entity link list! self.assertTrue(len(self.entity.links) == 1) def test_qi_categories_for_sanity(self): """ Tests QI interface rendering... """ heads = {"Category": 'foo; scheme="http://example.com#";' + ' location="/foo/"'} mixins = self.rendering.to_mixins(heads, "") headers, body = self.rendering.from_categories(mixins) self.assertTrue("foo" in headers["Category"]) self.assertTrue('scheme="http://example.com#"' in headers["Category"]) self.assertTrue('location="/foo/"' in headers["Category"]) def test_action_for_sanity(self): """ Test the to actions function... """ heads = {"Category": self.action.term + '; scheme="' + self.action.scheme + '"'} action = self.rendering.to_action(heads, None) self.assertEqual(action, self.action) def test_get_filters_for_sanity(self): """ Test if filters can be retrieved... """ headers, body = self.rendering.from_categories([self.kind]) cats, attrs = self.rendering.get_filters(headers, "") self.assertTrue(cats == [self.kind]) self.assertTrue(attrs == {}) headers["X-OCCI-Attribute"] = 'foo="bar"' cats, attrs = self.rendering.get_filters(headers, "") self.assertTrue(cats == [self.kind]) self.assertTrue(attrs["foo"] == "bar")
class TestTextOcciRendering(unittest.TestCase): ''' Simple sanity checks... ''' # disable 'Unused attr' pylint check (not needing body here) # disable 'Too many instance attributes' pyling check (It's a test :)) # pylint: disable=W0612,R0902 registry = NonePersistentRegistry() def setUp(self): self.rendering = TextOcciRendering(self.registry) # type system... self.kind = Kind('http://example.com#', 'foo', related=[Resource.kind]) self.invalid_kind = Kind('http://example.com#', 'invalid') self.link = Kind('http://example.com#', 'link', related=[Link.kind]) self.mixin = Mixin('http://example.com#', 'mixin') self.action = Action('http://example.com#', 'action') self.registry.set_backend(self.kind, KindBackend()) self.registry.set_backend(self.invalid_kind, KindBackend()) self.registry.set_backend(self.link, KindBackend()) self.registry.set_backend(self.mixin, MixinBackend()) self.registry.set_backend(self.action, ActionBackend()) # 2 linked entities self.entity = Resource('/foo/1', self.kind, [self.mixin]) trg = Resource('/foo/2', self.kind, [], []) self.link1 = Link('/link/1', self.link, [], self.entity, trg) self.entity.links = [self.link1] self.registry.add_resource('/foo/2', trg) self.registry.add_resource('/link/1', self.link1) self.registry.add_resource('/foo/1', self.entity) def tearDown(self): for res in self.registry.get_resources(): self.registry.delete_resource(res.identifier) for item in self.registry.get_categories(): self.registry.delete_mixin(item) #========================================================================== # Failure #========================================================================== def test_resource_for_failure(self): ''' Check if the correct exceptions are thrown. ''' # no kind available... res = Resource('/foo/1', self.mixin, [], links=[]) headers, body = self.rendering.from_entity(res) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) # kind does not relate to link or resource... res.kind = self.invalid_kind headers, body = self.rendering.from_entity(res) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) def test_resources_for_failure(self): ''' Tests is a set of resource can be set and retrieved. ''' heads = {'X-OCCI-Location': '/bla/bla/2'} self.assertRaises(AttributeError, self.rendering.to_entities, heads, '') def test_link_for_failure(self): ''' Test link... ''' # call creation of entity with non existing trg resource. trg = Resource('/bar/1', self.kind, [], []) link = Link('/bar/1', self.link, [], self.entity, trg) headers, body = self.rendering.from_entity(link) self.assertRaises(AttributeError, self.rendering.to_entity, headers, body, None) #========================================================================== # Sanity #========================================================================== def test_resource_for_sanity(self): ''' Test is a resource can be rendered and retrieved. ''' # basic check headers, body = self.rendering.from_entity(self.entity) new = self.rendering.to_entity(headers, body, None) self.assertEqual(self.entity.kind, new.kind) self.assertEqual(len(self.entity.links), len(new.links)) # verify that provided kind is taken kind = Kind('foo', 'bar', related=[Resource.kind]) headers, body = self.rendering.from_entity(self.entity) new = self.rendering.to_entity(headers, body, kind) self.assertEqual(new.kind, kind) self.assertEqual(len(self.entity.links), len(new.links)) # verify that actions get added self.entity.actions = [self.action] headers, body = self.rendering.from_entity(self.entity) self.assertTrue('?action' in headers['Link']) def test_resources_for_sanity(self): ''' Tests is a set of resource can be set and retrieved for sanity. ''' res = self.registry.get_resources() heads, body = self.rendering.from_entities(res, '/') entities = self.rendering.to_entities(heads, body) self.assertEqual(self.registry.get_resources(), entities) def test_link_for_sanity(self): ''' Test is a link can be rendered and retrieved. ''' headers, body = self.rendering.from_entity(self.link1) tmp = 'occi.core.target=' + self.link1.target.identifier tmp += ', occi.core.source=' + self.link1.source.identifier headers['X-OCCI-Attribute'] = tmp new = self.rendering.to_entity(headers, body, None) self.assertEqual(self.link1.kind, new.kind) # do not alter the source entity link list! self.assertTrue(len(self.entity.links) == 1) def test_qi_categories_for_sanity(self): ''' Tests QI interface rendering... ''' heads = { 'Category': 'foo; scheme="http://example.com#";' + ' location="/foo/"' } mixins = self.rendering.to_mixins(heads, '') headers, body = self.rendering.from_categories(mixins) self.assertTrue('foo' in headers['Category']) self.assertTrue('scheme="http://example.com#"' in headers['Category']) self.assertTrue('location="/foo/"' in headers['Category']) def test_action_for_sanity(self): ''' Test the to actions function... ''' heads = { 'Category': self.action.term + '; scheme="' + self.action.scheme + '"' } action = self.rendering.to_action(heads, None) self.assertEqual(action, self.action) def test_get_filters_for_sanity(self): ''' Test if filters can be retrieved... ''' headers, body = self.rendering.from_categories([self.kind]) cats, attrs = self.rendering.get_filters(headers, '') self.assertTrue(cats == [self.kind]) self.assertTrue(attrs == {}) headers['X-OCCI-Attribute'] = 'foo="bar"' cats, attrs = self.rendering.get_filters(headers, '') self.assertTrue(cats == [self.kind]) self.assertTrue(attrs['foo'] == 'bar')