コード例 #1
0
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")
コード例 #2
0
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')