示例#1
0
 def testGetBinaryValue(self):
     """
     L{TagValueAPI.get} returns the MIME type and file contents for binary
     L{TagValue}s.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     # NOTE: we use 'Hello \xA2' as value to test that a non utf-8 string
     # will work properly.
     values = {
         objectID: {
             u'name/tag': {
                 'mime-type': 'text/plain',
                 'contents': 'Hello \xA2'
             }
         }
     }
     self.tagValues.set(values)
     result = self.tagValues.get([objectID], [u'name/tag'])
     self.assertEqual(values[objectID][u'name/tag']['mime-type'],
                      result[objectID][u'name/tag'].value['mime-type'])
     self.assertEqual(values[objectID][u'name/tag']['contents'],
                      result[objectID][u'name/tag'].value['contents'])
示例#2
0
 def testGetWithoutObjectIDs(self):
     """
     L{TagValueAPI.get} raises L{FeatureError} if no object IDs are given.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     self.assertRaises(FeatureError, self.tagValues.get, [],
                       [u'username/tag'])
示例#3
0
 def testGetWithoutObjectIDs(self):
     """
     L{TagValueAPI.get} raises L{FeatureError} if no object IDs are given.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     self.assertRaises(FeatureError, self.tagValues.get, [],
                       [u'username/tag'])
示例#4
0
 def testSet(self):
     """L{TagAPI.set} updates the description for the specified L{Tag}s."""
     descriptionTag = self.system.tags[u'fluiddb/tags/description']
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     self.tags.set({u'username/tag': u'A fancy new description.'})
     result = getTagValues([(tag.objectID, descriptionTag.id)])
     description = result.one()
     self.assertEqual(u'A fancy new description.', description.value)
示例#5
0
 def testGet(self):
     """
     L{PermissionAPI.get} returns a C{dict} of permissions for the
     specified path and L{Operation}.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     action = (u'username/tag', Operation.UPDATE_TAG)
     permissions = self.permissions.get([action])
     self.assertEqual({action: (Policy.CLOSED, [u'username'])}, permissions)
示例#6
0
 def testGetFilteredByUnknownObjectIDs(self):
     """
     L{TagValueAPI.get} doesn't return any L{Tag} values if none of the
     requested object IDs exist.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, uuid4(), 42)
     self.assertEqual({}, self.tagValues.get(objectIDs=[uuid4()],
                                             paths=[u'username/tag']))
示例#7
0
 def testDeleteOnlyDirtiesRemovedObjects(self):
     """L{TagValueAPI.delete} only marks affected objects as being dirty."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     result = self.tagValues.delete([(objectID, u'name/tag')])
     self.assertEqual(0, result)
     self.assertNotIn(objectID,
                      getDirtyObjects().values(DirtyObject.objectID))
示例#8
0
 def testDeleteOnlyDirtiesRemovedObjects(self):
     """L{TagValueAPI.delete} only marks affected objects as being dirty."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     result = self.tagValues.delete([(objectID, u'name/tag')])
     self.assertEqual(0, result)
     self.assertNotIn(objectID,
                      getDirtyObjects().values(DirtyObject.objectID))
示例#9
0
 def testGetFilteredByUnknownObjectIDs(self):
     """
     L{TagValueAPI.get} doesn't return any L{Tag} values if none of the
     requested object IDs exist.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, uuid4(), 42)
     self.assertEqual({},
                      self.tagValues.get(objectIDs=[uuid4()],
                                         paths=[u'username/tag']))
示例#10
0
 def testSetWithUnknownUser(self):
     """
     L{PermissionAPI.set} raises L{UknownUserError} if a username
     specified in the C{exceptions} list does not exist.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     values = [(u'username/tag', Operation.DELETE_TAG,
                Policy.OPEN, [u'unknown'])]
     error = self.assertRaises(UnknownUserError, self.permissions.set,
                               values)
     self.assertEqual([u'unknown'], error.usernames)
示例#11
0
 def testSet(self):
     """L{TagValueAPI.set} stores new L{TagValue}s."""
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     values = {objectID: {u'name/tag': 42}}
     self.tagValues.set(values)
     value = getTagValues([(objectID, tag.id)]).one()
     self.assertEqual(tag.id, value.tagID)
     self.assertEqual(objectID, value.objectID)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#12
0
 def testSetUpdates(self):
     """L{TagValueAPI.set} updates an existing value with a new one."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     self.tagValues.set({objectID: {u'name/tag': 5}})
     self.tagValues.set({objectID: {u'name/tag': None}})
     value = getTagValues([(objectID, tag.id)]).one()
     self.assertEqual(tag.id, value.tagID)
     self.assertEqual(objectID, value.objectID)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#13
0
 def testSet(self):
     """L{TagValueAPI.set} stores new L{TagValue}s."""
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     values = {objectID: {u'name/tag': 42}}
     self.tagValues.set(values)
     value = getTagValues([(objectID, tag.id)]).one()
     self.assertEqual(tag.id, value.tagID)
     self.assertEqual(objectID, value.objectID)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#14
0
 def testDeleteReturnsRowCount(self):
     """
     L{TagValueAPI.delete} returns the number of rows that were deleted.
     """
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, 42)
     result = self.tagValues.delete([(objectID, u'name/tag')])
     self.assertEqual(1, result)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#15
0
 def testDeleteReturnsRowCount(self):
     """
     L{TagValueAPI.delete} returns the number of rows that were deleted.
     """
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, 42)
     result = self.tagValues.delete([(objectID, u'name/tag')])
     self.assertEqual(1, result)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#16
0
 def testDelete(self):
     """L{TagValueAPI.delete} deletes L{TagValue}s."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, None)
     self.tagValues.delete([(objectID, u'name/tag')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([], list(values))
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#17
0
 def testSetUpdates(self):
     """L{TagValueAPI.set} updates an existing value with a new one."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     self.tagValues.set({objectID: {u'name/tag': 5}})
     self.tagValues.set({objectID: {u'name/tag': None}})
     value = getTagValues([(objectID, tag.id)]).one()
     self.assertEqual(tag.id, value.tagID)
     self.assertEqual(objectID, value.objectID)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#18
0
 def testDelete(self):
     """L{TagValueAPI.delete} deletes L{TagValue}s."""
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, None)
     self.tagValues.delete([(objectID, u'name/tag')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([], list(values))
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#19
0
 def testGetTagsForObjects(self):
     """
     L{ObjectAPI.getTagsForObjects} returns a C{list} of L{Tag.path}s that
     are associated with the given objects.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     objectID1 = uuid4()
     objectID2 = uuid4()
     createTagValue(self.user.id, tag.id, objectID1, u'value1')
     createTagValue(self.user.id, tag.id, objectID2, u'value2')
     self.assertEqual(
         [u'user/tag'],
         self.objects.getTagsForObjects([objectID1, objectID2]))
示例#20
0
 def testGetTagsForObjects(self):
     """
     L{ObjectAPI.getTagsForObjects} returns a C{list} of L{Tag.path}s that
     are associated with the given objects.
     """
     tag = createTag(self.user, self.user.namespace, u'tag')
     createTagPermission(tag)
     objectID1 = uuid4()
     objectID2 = uuid4()
     createTagValue(self.user.id, tag.id, objectID1, u'value1')
     createTagValue(self.user.id, tag.id, objectID2, u'value2')
     self.assertEqual([u'user/tag'],
                      self.objects.getTagsForObjects([objectID1,
                                                      objectID2]))
示例#21
0
 def testGetOnlyFluidDBID(self):
     """
     L{TagValueAPI.get} returns object IDs for the 'fluiddb/id' tag, when
     requested.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     values = {objectID: {u'name/tag': {'mime-type': 'text/plain',
                                        'contents': 'Hello, world!'}}}
     self.tagValues.set(values)
     result = self.tagValues.get([objectID], [u'fluiddb/id'])
     self.assertEqual(objectID, result[objectID][u'fluiddb/id'].value)
示例#22
0
 def testGetFluidDBID(self):
     """
     L{TagValueAPI.get} returns object IDs for the 'fluiddb/id' tag, in
     addition to other requests L{TagValue}s, when requested.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     values = {objectID: {u'name/tag': 12}}
     self.tagValues.set(values)
     result = self.tagValues.get([objectID], [u'fluiddb/id', u'name/tag'])
     self.assertEqual(objectID, result[objectID][u'fluiddb/id'].value)
     self.assertEqual(12, result[objectID][u'name/tag'].value)
示例#23
0
 def testGetFluidDBID(self):
     """
     L{TagValueAPI.get} returns object IDs for the 'fluiddb/id' tag, in
     addition to other requests L{TagValue}s, when requested.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     values = {objectID: {u'name/tag': 12}}
     self.tagValues.set(values)
     result = self.tagValues.get([objectID], [u'fluiddb/id', u'name/tag'])
     self.assertEqual(objectID, result[objectID][u'fluiddb/id'].value)
     self.assertEqual(12, result[objectID][u'name/tag'].value)
示例#24
0
    def testMissingAboutValue(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} doesn't
        have a C{fluiddb/about} value.
        """
        test = createTag(self.user, self.parent, u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for test tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/test')

        self.checker.check([test])
        self.assertEqual("Integrity Error in tag u'user/test': "
                         'About tag is missing.\n',
                         self.log.getvalue())
示例#25
0
    def testCreateTagWithDefaultPermissions(self):
        """
        L{createTagPermission} creates a default set of permissions based on
        the default L{Namespace}s with permissions.
        """
        user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
        namespace = createNamespace(user, u'name')
        createNamespacePermission(namespace)

        tag = createTag(user, namespace, u'tag')
        permission2 = createTagPermission(tag)
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.UPDATE_TAG))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.DELETE_TAG))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.CONTROL_TAG))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.WRITE_TAG_VALUE))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.READ_TAG_VALUE))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.DELETE_TAG_VALUE))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.CONTROL_TAG_VALUE))
示例#26
0
 def testCreateTagPermission(self):
     """
     L{createTagPermission} creates a new L{TagPermission} using the
     system-wide default permission settings.
     """
     user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
     namespace = createNamespace(user, u'name')
     tag = createTag(user, namespace, u'tag')
     permission = createTagPermission(tag)
     self.assertNotIdentical(None, permission.tagID)
     self.assertEqual(tag.id, permission.tagID)
     self.assertEqual(Policy.CLOSED, permission.updatePolicy)
     self.assertEqual([user.id], permission.updateExceptions)
     self.assertEqual(Policy.CLOSED, permission.deletePolicy)
     self.assertEqual([user.id], permission.deleteExceptions)
     self.assertEqual(Policy.CLOSED, permission.controlPolicy)
     self.assertEqual([user.id], permission.controlExceptions)
     self.assertEqual(Policy.CLOSED, permission.writeValuePolicy)
     self.assertEqual([user.id], permission.writeValueExceptions)
     self.assertEqual(Policy.OPEN, permission.readValuePolicy)
     self.assertEqual([], permission.readValueExceptions)
     self.assertEqual(Policy.CLOSED, permission.deleteValuePolicy)
     self.assertEqual([user.id], permission.deleteValueExceptions)
     self.assertEqual(Policy.CLOSED, permission.controlValuePolicy)
     self.assertEqual([user.id], permission.controlValueExceptions)
示例#27
0
    def testMissingDescriptionTagValue(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} doesn't
        have C{fluiddb/tags/description} value.
        """
        test = createTag(self.user, self.parent, u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/test')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual("Integrity Error in tag u'user/test': "
                         'Description tag is missing.\n',
                         self.log.getvalue())
示例#28
0
    def testCreateTagPermissionInheritsFromNamespace(self):
        """
        L{createTagPermission} inherits permissions from its parent's
        L{NamespacePermission}s.
        """
        user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
        namespace = createNamespace(user, u'name')
        permission1 = createNamespacePermission(namespace)
        permission1.set(Operation.CREATE_NAMESPACE, Policy.OPEN, [])
        permission1.set(Operation.UPDATE_NAMESPACE, Policy.OPEN, [])
        permission1.set(Operation.DELETE_NAMESPACE, Policy.OPEN, [])
        permission1.set(Operation.LIST_NAMESPACE, Policy.CLOSED, [user.id])
        permission1.set(Operation.CONTROL_NAMESPACE, Policy.OPEN, [])

        tag = createTag(user, namespace, u'tag')
        permission2 = createTagPermission(tag)
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.UPDATE_TAG))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.DELETE_TAG))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.CONTROL_TAG))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.WRITE_TAG_VALUE))
        self.assertEqual((Policy.CLOSED, [user.id]),
                         permission2.get(Operation.READ_TAG_VALUE))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.DELETE_TAG_VALUE))
        self.assertEqual((Policy.OPEN, []),
                         permission2.get(Operation.CONTROL_TAG_VALUE))
示例#29
0
    def testMissingAboutValue(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} doesn't
        have a C{fluiddb/about} value.
        """
        test = createTag(self.user, self.parent, u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for test tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/test')

        self.checker.check([test])
        self.assertEqual(
            "Integrity Error in tag u'user/test': "
            'About tag is missing.\n', self.log.getvalue())
示例#30
0
    def testMissingDescriptionTagValue(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} doesn't
        have C{fluiddb/tags/description} value.
        """
        test = createTag(self.user, self.parent, u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/test')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual(
            "Integrity Error in tag u'user/test': "
            'Description tag is missing.\n', self.log.getvalue())
示例#31
0
    def testGetTagsByObjects(self):
        """
        L{ObjectAPI.getTagsByObjects} returns a C{dict} of L{Tag.path}s that
        are associated with the given objects.
        """
        tag1 = createTag(self.user, self.user.namespace, u'tag1')
        tag2 = createTag(self.user, self.user.namespace, u'tag2')
        createTagPermission(tag1)
        createTagPermission(tag2)
        objectID = uuid4()
        createTagValue(self.user.id, tag1.id, objectID, u'value1')
        createTagValue(self.user.id, tag2.id, objectID, u'value2')

        tagPaths = self.objects.getTagsByObjects([objectID])
        expected = {objectID: [u'user/tag1', u'user/tag2']}
        tagPaths[objectID] = sorted(tagPaths[objectID])
        self.assertEqual(expected, tagPaths)
示例#32
0
文件: tag.py 项目: xanixon/fluiddb
    def _createPermissions(self, tags):
        """Create L{TagPermission}s for new L{Tag}s.

        L{Tag}s inherit permissions from their parent tag, if one
        is available.

        @param tags: A sequence of new L{Tag}s to create
            L{TagPermission}s for.
        """
        # Preload parent Namespace and NamespacePermission's into Storm's
        # cache.  Simply creating the objects will be enough to get them into
        # the cache.  If there are many objects we need to be careful about
        # overloading the cache, but that isn't an issue here.
        parentPaths = [getParentPath(tag.path) for tag in tags]
        list(getNamespacePermissions(parentPaths))
        for tag in tags:
            createTagPermission(tag)
示例#33
0
    def testGetTagsByObjects(self):
        """
        L{ObjectAPI.getTagsByObjects} returns a C{dict} of L{Tag.path}s that
        are associated with the given objects.
        """
        tag1 = createTag(self.user, self.user.namespace, u'tag1')
        tag2 = createTag(self.user, self.user.namespace, u'tag2')
        createTagPermission(tag1)
        createTagPermission(tag2)
        objectID = uuid4()
        createTagValue(self.user.id, tag1.id, objectID, u'value1')
        createTagValue(self.user.id, tag2.id, objectID, u'value2')

        tagPaths = self.objects.getTagsByObjects([objectID])
        expected = {objectID: [u'user/tag1', u'user/tag2']}
        tagPaths[objectID] = sorted(tagPaths[objectID])
        self.assertEqual(expected, tagPaths)
示例#34
0
    def testInvalidPaths(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} has a
        wrong path.
        """
        test = Tag(self.user, self.parent, u'user/$bad!', u'$bad!')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for $bad! tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/$bad!')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual(
            "Integrity Error in tag u'user/$bad!': "
            'Invalid path.\n', self.log.getvalue())
示例#35
0
 def testGetObjectWithAboutValueDoesNotExist(self):
     """
     L{FacadeObjectAPI.getObject} returns a L{TObjectInfo} with the
     L{Tag.path}s for which the L{User} has L{Operation.READ_TAG_VALUE},
     and the L{AboutTagValue.value} if it has one and C{showAbout} is
     C{True}.
     """
     objectID = uuid4()
     tag = createTag(self.user, self.user.namespace, u'foo')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, u'bar')
     session = AuthenticatedSession(self.user.username, uuid4())
     self.store.commit()
     with login(self.user.username, uuid4(), self.transact) as session:
         objectInfo = yield self.facade.getObject(session, str(objectID),
                                                  showAbout=True)
         self.assertEqual([u'username/foo'], objectInfo.tagPaths)
         self.assertIdentical(None, objectInfo.about)
示例#36
0
    def testWrongParent(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} has a
        wrong associated parent.
        """
        test = Tag(self.user, self.parent, u'wrong/test', u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for test tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'wrong/test')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual(
            "Integrity Error in tag u'wrong/test': "
            'Assigned parent is incorrect.\n', self.log.getvalue())
示例#37
0
    def testInvalidPaths(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} has a
        wrong path.
        """
        test = Tag(self.user, self.parent, u'user/$bad!', u'$bad!')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for $bad! tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/$bad!')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual("Integrity Error in tag u'user/$bad!': "
                         'Invalid path.\n',
                         self.log.getvalue())
示例#38
0
    def testWrongParent(self):
        """
        L{TagIntegrityChecker.check} logs an error if the given L{Tag} has a
        wrong associated parent.
        """
        test = Tag(self.user, self.parent, u'wrong/test', u'test')
        createTagPermission(test)
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for test tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'wrong/test')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual("Integrity Error in tag u'wrong/test': "
                         'Assigned parent is incorrect.\n',
                         self.log.getvalue())
示例#39
0
 def testDeleteOnlyConsidersSpecifiedObjectIDs(self):
     """
     L{TagValueAPI.delete} only removes the values for the specified object
     IDs.
     """
     objectID1 = uuid4()
     objectID2 = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID1, 42)
     value = createTagValue(self.user.id, tag.id, objectID2, 17)
     self.tagValues.delete([(objectID1, u'name/tag')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([value], list(values))
     self.assertIn(objectID1,
                   getDirtyObjects().values(DirtyObject.objectID))
示例#40
0
 def testDeleteRemovesTagValues(self):
     """
     L{TagValueAPI.delete} removes L{TagValue}s associated with the deleted
     L{Tag}s.
     """
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag1 = createTag(self.user, namespace, u'tag1')
     tag2 = createTag(self.user, namespace, u'tag2')
     createTagPermission(tag1)
     createTagPermission(tag2)
     value = createTagValue(self.user.id, tag1.id, objectID, 42)
     createTagValue(self.user.id, tag2.id, objectID, 17)
     self.tagValues.delete([(objectID, u'name/tag2')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([value], list(values))
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#41
0
 def testDeleteOnlyConsidersSpecifiedObjectIDs(self):
     """
     L{TagValueAPI.delete} only removes the values for the specified object
     IDs.
     """
     objectID1 = uuid4()
     objectID2 = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID1, 42)
     value = createTagValue(self.user.id, tag.id, objectID2, 17)
     self.tagValues.delete([(objectID1, u'name/tag')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([value], list(values))
     self.assertIn(objectID1,
                   getDirtyObjects().values(DirtyObject.objectID))
示例#42
0
文件: system.py 项目: xanixon/fluiddb
 def _createTagPermissions(self, tag):
     """Create L{TagPermission}s."""
     permission = createTagPermission(tag)
     permission.set(Operation.UPDATE_TAG, Policy.CLOSED, [])
     permission.set(Operation.DELETE_TAG, Policy.CLOSED, [])
     permission.set(Operation.CONTROL_TAG, Policy.CLOSED, [])
     permission.set(Operation.WRITE_TAG_VALUE, Policy.CLOSED, [])
     permission.set(Operation.READ_TAG_VALUE, Policy.OPEN, [])
     permission.set(Operation.DELETE_TAG_VALUE, Policy.CLOSED, [])
     permission.set(Operation.CONTROL_TAG_VALUE, Policy.CLOSED, [])
示例#43
0
 def testDeleteRemovesTagValues(self):
     """
     L{TagValueAPI.delete} removes L{TagValue}s associated with the deleted
     L{Tag}s.
     """
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag1 = createTag(self.user, namespace, u'tag1')
     tag2 = createTag(self.user, namespace, u'tag2')
     createTagPermission(tag1)
     createTagPermission(tag2)
     value = createTagValue(self.user.id, tag1.id, objectID, 42)
     createTagValue(self.user.id, tag2.id, objectID, 17)
     self.tagValues.delete([(objectID, u'name/tag2')])
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([value], list(values))
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#44
0
 def testGetObjectWithAboutValueDoesNotExist(self):
     """
     L{FacadeObjectAPI.getObject} returns a L{TObjectInfo} with the
     L{Tag.path}s for which the L{User} has L{Operation.READ_TAG_VALUE},
     and the L{AboutTagValue.value} if it has one and C{showAbout} is
     C{True}.
     """
     objectID = uuid4()
     tag = createTag(self.user, self.user.namespace, u'foo')
     createTagPermission(tag)
     createTagValue(self.user.id, tag.id, objectID, u'bar')
     session = AuthenticatedSession(self.user.username, uuid4())
     self.store.commit()
     with login(self.user.username, uuid4(), self.transact) as session:
         objectInfo = yield self.facade.getObject(session,
                                                  str(objectID),
                                                  showAbout=True)
         self.assertEqual([u'username/foo'], objectInfo.tagPaths)
         self.assertIdentical(None, objectInfo.about)
示例#45
0
 def _createTagPermissions(self, tag):
     """Create L{TagPermission}s."""
     permission = createTagPermission(tag)
     permission.set(Operation.UPDATE_TAG, Policy.CLOSED, [])
     permission.set(Operation.DELETE_TAG, Policy.CLOSED, [])
     permission.set(Operation.CONTROL_TAG, Policy.CLOSED, [])
     permission.set(Operation.WRITE_TAG_VALUE, Policy.CLOSED, [])
     permission.set(Operation.READ_TAG_VALUE, Policy.OPEN, [])
     permission.set(Operation.DELETE_TAG_VALUE, Policy.CLOSED, [])
     permission.set(Operation.CONTROL_TAG_VALUE, Policy.CLOSED, [])
示例#46
0
 def testGetFilteredByObjectIDsAndPath(self):
     """
     When both object IDs and tag paths are provided, L{TagValueAPI.get}
     returns only those L{Tag} values that meet both criteria.
     """
     objectID1 = uuid4()
     objectID2 = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag1 = createTag(self.user, namespace, u'tag1')
     tag2 = createTag(self.user, namespace, u'tag2')
     createTagPermission(tag1)
     createTagPermission(tag2)
     createTagValue(self.user.id, tag1.id, objectID1, 42)
     createTagValue(self.user.id, tag1.id, objectID2, 67)
     createTagValue(self.user.id, tag2.id, objectID1, 17)
     createTagValue(self.user.id, tag2.id, objectID2, 13)
     result = self.tagValues.get(objectIDs=[objectID1],
                                 paths=[u'name/tag1'])
     self.assertEqual(42, result[objectID1][u'name/tag1'].value)
示例#47
0
 def testGetBinaryValue(self):
     """
     L{TagValueAPI.get} returns the MIME type and file contents for binary
     L{TagValue}s.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     # NOTE: we use 'Hello \xA2' as value to test that a non utf-8 string
     # will work properly.
     values = {objectID: {u'name/tag': {'mime-type': 'text/plain',
                                        'contents': 'Hello \xA2'}}}
     self.tagValues.set(values)
     result = self.tagValues.get([objectID], [u'name/tag'])
     self.assertEqual(values[objectID][u'name/tag']['mime-type'],
                      result[objectID][u'name/tag'].value['mime-type'])
     self.assertEqual(values[objectID][u'name/tag']['contents'],
                      result[objectID][u'name/tag'].value['contents'])
示例#48
0
 def testAllowWithInvalidOperation(self):
     """
     L{TagPermission.allow} raises a C{RuntimeError} if the request
     L{Operation} is not a namespace operation.
     """
     user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
     namespace = createNamespace(user, u'name')
     tag = createTag(user, namespace, u'tag')
     permission = createTagPermission(tag)
     self.assertRaises(RuntimeError, permission.allow, user.id,
                       Operation.CREATE_NAMESPACE)
示例#49
0
 def testCreateTagPermissionAddsToStore(self):
     """
     L{createTagPermission} automatically adds the new L{TagPermission} to
     the database.
     """
     user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
     namespace = createNamespace(user, u'name')
     tag = createTag(user, namespace, u'tag')
     permission = createTagPermission(tag)
     result = self.store.find(TagPermission, TagPermission.tagID == tag.id)
     self.assertIdentical(permission, result.one())
示例#50
0
 def testSetWithInvalidOperation(self):
     """
     L{TagPermission.set} raises a C{RuntimeError} if an invalid
     L{Operation} is provided.
     """
     user = createUser(u'name', u'password', u'Name', u'*****@*****.**')
     namespace = createNamespace(user, u'name')
     tag = createTag(user, namespace, u'tag')
     permission = createTagPermission(tag)
     self.assertRaises(RuntimeError, permission.set,
                       Operation.CREATE_NAMESPACE, Policy.OPEN, [])
示例#51
0
 def testGetFilteredByObjectIDsAndPath(self):
     """
     When both object IDs and tag paths are provided, L{TagValueAPI.get}
     returns only those L{Tag} values that meet both criteria.
     """
     objectID1 = uuid4()
     objectID2 = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag1 = createTag(self.user, namespace, u'tag1')
     tag2 = createTag(self.user, namespace, u'tag2')
     createTagPermission(tag1)
     createTagPermission(tag2)
     createTagValue(self.user.id, tag1.id, objectID1, 42)
     createTagValue(self.user.id, tag1.id, objectID2, 67)
     createTagValue(self.user.id, tag2.id, objectID1, 17)
     createTagValue(self.user.id, tag2.id, objectID2, 13)
     result = self.tagValues.get(objectIDs=[objectID1],
                                 paths=[u'name/tag1'])
     self.assertEqual(42, result[objectID1][u'name/tag1'].value)
示例#52
0
 def testSetBinaryValue(self):
     """
     L{TagValueAPI.set} can store binary L{TagValue}s.  The contents
     included in the dict representing the value are written to a file and
     added to the L{FileStore}.
     """
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag = createTag(self.user, namespace, u'tag')
     createTagPermission(tag)
     objectID = uuid4()
     self.tagValues.set(
         {objectID: {u'name/tag': {'mime-type': 'text/plain',
                                   'contents': 'Hello, world!'}}})
     value = getTagValues([(objectID, tag.id)]).one()
     self.assertEqual(tag.id, value.tagID)
     self.assertEqual(objectID, value.objectID)
     self.assertEqual({'mime-type': 'text/plain',
                       'size': 13},
                      value.value)
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#53
0
 def testDeleteRemovesTagValuesWhenPassedAGenerator(self):
     """
     L{TagValueAPI.delete} removes L{TagValue}s associated with the
     deleted L{Tag}s when it is passed a generator (as opposed to a
     C{list}).
     """
     objectID = uuid4()
     namespace = createNamespace(self.user, u'name')
     createNamespacePermission(namespace)
     tag1 = createTag(self.user, namespace, u'tag1')
     tag2 = createTag(self.user, namespace, u'tag2')
     createTagPermission(tag1)
     createTagPermission(tag2)
     value = createTagValue(self.user.id, tag1.id, objectID, 42)
     createTagValue(self.user.id, tag2.id, objectID, 17)
     values = ((objectID, name) for name in [u'name/tag2'])
     self.tagValues.delete(values)
     values = self.store.find(TagValue, TagValue.tagID == Tag.id,
                              Not(Tag.path.is_in(self.system.tags)))
     self.assertEqual([value], list(values))
     self.assertIn(objectID, getDirtyObjects().values(DirtyObject.objectID))
示例#54
0
    def testSuperuserInPermissionExceptions(self):
        """
        L{TagIntegrityChecker.check} logs an error if a superuser is in a
        permission exceptions list.
        """
        test = createTag(self.user, self.parent, u'test')
        permission = createTagPermission(test)
        permission.updateExceptions = [self.user.id, self.superuser.id]
        createTagValue(self.user.id, self.descriptionTag.id, test.objectID,
                       u'Description for test tag')
        createTagValue(self.user.id, self.pathTag.id, test.objectID,
                       u'user/test')
        createTagValue(self.user.id, self.aboutTag.id, test.objectID,
                       u'Object for the attribute %s' % test.path)

        self.checker.check([test])
        self.assertEqual("Integrity Error in tag u'user/test': "
                         'A superuser is in the exceptions list for '
                         'UPDATE_TAG permission.\n',
                         self.log.getvalue())