Example #1
0
    def test1179(self):
        createTestImage(self.root.sf)
        rdefs = self.root.sf.getQueryService().findAll("RenderingDef", None)
        if len(rdefs) == 0:
            raise Exception("Must have at least one rendering def")
        id = rdefs[0].pixels.id.val
        # make sure thumbnail is viewed by owner
        tb = self.root.sf.createThumbnailStore()
        try:
            tb.setPixelsId(id)
            s = tb.getThumbnail(rint(16), rint(16))
            assert len(s) > 0
        finally:
            tb.close()

        share = self.root.sf.getShareService()
        sid = share.createShare("", None, [], [], [], True)
        share.activate(sid)
        # Share is active: we are in the security context of the share
        tb = self.root.sf.createThumbnailStore()
        try:
            tb.setPixelsId(id)
            s = tb.getThumbnail(rint(16), rint(16))
            assert len(s) > 0
        except omero.SecurityViolation:
            assert False, "Pixels was not in share"
        finally:
            tb.close()
            share.deactivate()
 def test880(self):
     try:
         createTestImage(self.client.sf)
         i = self.client.sf.getQueryService().findAll("Image", params.theFilter)[0]
         assert i != None
         assert i.id != None
         assert i.details != None
     except omero.ValidationException, ve:
         print " test880 - createTestImage has failed. This fixture method needs to be fixed."
Example #3
0
 def test880(self):
     try:
         createTestImage(self.client.sf)
         i = self.client.sf.getQueryService().findAll(
             "Image", params.theFilter)[0]
         assert i != None
         assert i.id != None
         assert i.details != None
     except omero.ValidationException, ve:
         print " test880 - createTestImage has failed. This fixture method needs to be fixed."
 def test1179(self):
     createTestImage(self.root.sf)
     rdefs = self.root.sf.getQueryService().findAll("RenderingDef", None)
     if len(rdefs) == 0:
         raise Exception("Must have at least one rendering def")
     share = self.root.sf.getShareService()
     sid = share.createShare("", None, [], [], [], True)
     share.activate(sid)
     tb = self.root.sf.createThumbnailStore()
     try:
         tb.setPixelsId(rdefs[0].pixels.id.val)
     except omero.SecurityViolation:
         assert False, "Pixels was not in share"
Example #5
0
 def test1179(self):
     createTestImage(self.root.sf)
     rdefs = self.root.sf.getQueryService().findAll("RenderingDef", None)
     if len(rdefs) == 0:
         raise Exception("Must have at least one rendering def")
     share = self.root.sf.getShareService()
     sid = share.createShare("", None, [], [], [], True)
     share.activate(sid)
     tb = self.root.sf.createThumbnailStore()
     try:
         tb.setPixelsId(rdefs[0].pixels.id.val)
     except omero.SecurityViolation:
         assert False, "Pixels was not in share"
Example #6
0
 def test880(self):
     try:
         createTestImage(self.client.sf)
         i = self.client.sf.getQueryService().findAll(
             "Image", params.theFilter)[0]
         assert i is not None
         assert i.id is not None
         assert i.details is not None
     except omero.ValidationException:
         print " test880 - createTestImage has failed. "\
               "This fixture method needs to be fixed."
     except IndexError:
         print " test880 - findAll has failed so assertions "\
               "can't be checked. Is this a fail? "
Example #7
0
    def test13018(self):
        """
        Test that image in share is unavailable when share
        is inactive or expired
        """
        owner = self.new_client()
        member, mobj = self.new_client_and_user()

        createTestImage(owner.sf)
        image = owner.sf.getQueryService().findAll("Image", None)[0]

        o_share = owner.sf.getShareService()
        sid = o_share.createShare("", None, [image], [mobj], [], True)

        m_share = member.sf.getShareService()
        m_share.activate(sid)

        o_share.setActive(sid, False)
        with pytest.raises(omero.ValidationException):
            m_share.activate(sid)

        with pytest.raises(omero.ValidationException):
            obj = omero.model.ShareI(sid, False)
            member.sf.setSecurityContext(obj)

        # test inactive share, if member has no access to the image
        s = o_share.getShare(sid)
        with pytest.raises(Glacier2.PermissionDeniedException):
            self.new_client(session=s.uuid)

        # activate again
        o_share.setActive(sid, True)

        # test that the image is now loadable again.
        t_conn = self.new_client(session=s.uuid)
        t_conn.sf.getQueryService().find("Image", image.id.val)

        # test expired share, if member has no access to the image
        expiration = long(time.time() * 1000) + 500
        o_share.setExpiration(sid, rtime(expiration))
        self.assert_expiration(expiration, o_share.getShare(sid))
        time.sleep(0.5)

        # Forced closing
        o_session = owner.sf.getSessionService()
        o_session.closeSession(o_share.getShare(sid))

        with pytest.raises(Glacier2.PermissionDeniedException):
            self.new_client(session=s.uuid)
Example #8
0
    def test13018(self):
        """
        Test that image in share is unavailable when share
        is inactive or expired
        """
        owner = self.new_client()
        member, mobj = self.new_client_and_user()

        createTestImage(owner.sf)
        image = owner.sf.getQueryService().findAll("Image", None)[0]

        o_share = owner.sf.getShareService()
        sid = o_share.createShare("", None, [image], [mobj], [], True)

        m_share = member.sf.getShareService()
        m_share.activate(sid)

        o_share.setActive(sid, False)
        with pytest.raises(omero.ValidationException):
            m_share.activate(sid)

        with pytest.raises(omero.ValidationException):
            obj = omero.model.ShareI(sid, False)
            member.sf.setSecurityContext(obj)

        # test inactive share, if member has no access to the image
        s = o_share.getShare(sid)
        with pytest.raises(Glacier2.PermissionDeniedException):
            self.new_client(session=s.uuid)

        # activate again
        o_share.setActive(sid, True)

        # test that the image is now loadable again.
        t_conn = self.new_client(session=s.uuid)
        t_conn.sf.getQueryService().find("Image", image.id.val)

        # test expired share, if member has no access to the image
        expiration = long(time.time() * 1000) + 500
        o_share.setExpiration(sid, rtime(expiration))
        self.assert_expiration(expiration, o_share.getShare(sid))
        time.sleep(0.5)

        # Forced closing
        o_session = owner.sf.getSessionService()
        o_session.closeSession(o_share.getShare(sid))

        with pytest.raises(Glacier2.PermissionDeniedException):
            self.new_client(session=s.uuid)
    def testBasicUsage(self):
        gateway = self.client.sf.createGateway()
        gateway.getProjects([0],False)

        try:
            # query below does not find image if created with self.createTestImage() even though it 
            # uses 'identical' code to createTestImage(self.client.sf), which uses script_utils 
            #iid = self.createTestImage().getId().getValue() 
            iid = createTestImage(self.client.sf)
            print iid, type(iid)
            query = self.client.sf.getQueryService()
    
            params = omero.sys.Parameters()
            params.map = {}
            params.map["oid"] = rlong(iid)
            params.theFilter = omero.sys.Filter()
            params.theFilter.offset = rint(0)
            params.theFilter.limit = rint(1)
            pixel = query.findByQuery("select p from Pixels as p left outer join fetch p.image as i where i.id=:oid", params)
            print pixel
            imgid = pixel.image.id.val
            print imgid
            gateway.getRenderedImage(pixel.id.val, 0, 0)
        except omero.ValidationException, ve:
            print " testBasicUsage - createTestImage has failed. This fixture method needs to be fixed."
Example #10
0
    def testBasicUsage(self):
        gateway = self.client.sf.createGateway()
        gateway.getProjects([0], False)

        try:
            # query below does not find image if created with self.createTestImage() even though it
            # uses 'identical' code to createTestImage(self.client.sf), which uses script_utils
            #iid = self.createTestImage().getId().getValue()
            iid = createTestImage(self.client.sf)
            print iid, type(iid)
            query = self.client.sf.getQueryService()

            params = omero.sys.Parameters()
            params.map = {}
            params.map["oid"] = rlong(iid)
            params.theFilter = omero.sys.Filter()
            params.theFilter.offset = rint(0)
            params.theFilter.limit = rint(1)
            pixel = query.findByQuery(
                "select p from Pixels as p left outer join fetch p.image as i where i.id=:oid",
                params)
            print pixel
            imgid = pixel.image.id.val
            print imgid
            gateway.getRenderedImage(pixel.id.val, 0, 0)
        except omero.ValidationException, ve:
            print " testBasicUsage - createTestImage has failed. This fixture method needs to be fixed."
Example #11
0
    def test8704(self):
        # Owner of share
        owner, owner_obj = self.new_client_and_user(perms="rw----")
        # Different group!
        member, member_obj = self.new_client_and_user(perms="rw----")

        member_suuid = \
            member.sf.getAdminService().getEventContext().sessionUuid
        owner_suuid = \
            owner.sf.getAdminService().getEventContext().sessionUuid

        member_groupId = member.sf.getAdminService().getEventContext().groupId
        owner_groupId = owner.sf.getAdminService().getEventContext().groupId

        # just in case
        assert member_suuid != owner_suuid

        # just in case
        assert owner_obj.id.val != member_obj.id.val

        # create image by owner
        owner_update = owner.sf.getUpdateService()
        image_id = createTestImage(owner.sf)

        p = omero.sys.Parameters()
        p.map = {"id": rlong(long(image_id))}
        sql = "select im from Image im join fetch im.details.owner " \
              "join fetch im.details.group where im.id=:id order by im.name"
        image = owner.sf.getQueryService().findAllByQuery(
            sql, p, {'omero.group': str(owner_groupId)})[0]

        rdefs = owner.sf.getQueryService().findAll("RenderingDef", None)

        # create image by member
        member_update = member.sf.getUpdateService()
        image2 = self.new_image()
        image2 = member_update.saveAndReturnObject(image2)

        share = owner.sf.getShareService()
        sid = self.create_share(share, objects=[image],
                                experimenters=[member_obj])

        self.assert_access(owner, sid)
        self.assert_access(member, sid)

        member_share = member.sf.getShareService()
        share_obj = member_share.getShare(sid)
        # Activation shouldn't be needed any more as
        # we pass {'omero.share': <sid>}
        # member_share.activate(long(sid))

        # And the member should be able to use omero.share:sid
        member_query = member.sf.getQueryService()

        try:
            rv = member.sf.getQueryService().find("Image", image.id.val, None)
        except omero.SecurityViolation, sv:
            pass
Example #12
0
    def test8704(self):
        # Owner of share
        owner, owner_obj = self.new_client_and_user(perms="rw----")
        # Different group!
        member, member_obj = self.new_client_and_user(perms="rw----")

        member_suuid = member.sf.getAdminService().getEventContext().sessionUuid
        owner_suuid = owner.sf.getAdminService().getEventContext().sessionUuid

        member_groupId = member.sf.getAdminService().getEventContext().groupId
        owner_groupId = owner.sf.getAdminService().getEventContext().groupId

        # just in case
        assert member_suuid != owner_suuid

        # just in case
        assert owner_obj.id.val != member_obj.id.val

        # create image by owner
        owner_update = owner.sf.getUpdateService()
        image_id = createTestImage(owner.sf)

        p = omero.sys.Parameters()
        p.map = {"id": rlong(long(image_id))}
        sql = (
            "select im from Image im join fetch im.details.owner "
            "join fetch im.details.group where im.id=:id order by im.name"
        )
        image = owner.sf.getQueryService().findAllByQuery(sql, p, {"omero.group": str(owner_groupId)})[0]

        rdefs = owner.sf.getQueryService().findAll("RenderingDef", None)

        # create image by member
        member_update = member.sf.getUpdateService()
        image2 = self.new_image()
        image2 = member_update.saveAndReturnObject(image2)

        share = owner.sf.getShareService()
        sid = self.create_share(share, objects=[image], experimenters=[member_obj])

        self.assert_access(owner, sid)
        self.assert_access(member, sid)

        member_share = member.sf.getShareService()
        share_obj = member_share.getShare(sid)
        # Activation shouldn't be needed any more as
        # we pass {'omero.share': <sid>}
        # member_share.activate(long(sid))

        # And the member should be able to use omero.share:sid
        member_query = member.sf.getQueryService()

        try:
            rv = member.sf.getQueryService().find("Image", image.id.val, None)
        except omero.SecurityViolation, sv:
            pass
    def testThumbs(self):

        privateGroup = self.new_group(perms='rw----')
        readOnlyGroup = self.new_group(perms='rwr---')
        collaborativeGroup = self.new_group(perms='rwra--')

        #new user (group owner)
        newOwner = self.new_user(group=privateGroup)
        self.add_groups(newOwner, [readOnlyGroup, collaborativeGroup],
                        owner=True)

        #new user1
        user1 = self.new_user(group=privateGroup)
        self.add_groups(user1, [readOnlyGroup, collaborativeGroup])

        #new user2
        user2 = self.new_user(group=privateGroup)
        self.add_groups(user2, [readOnlyGroup, collaborativeGroup])

        ## login as user1 (into their default group)
        # create image in private group
        client_share1 = self.new_client(
            user=user1, password=user1.omeName.val)
        privateImageId = createTestImage(client_share1.sf)

        # if we don't get thumbnail, test fails when another user does
        self.getThumbnail(client_share1.sf, privateImageId)

        # change user into read-only group. Use object Ids for this,
        # NOT objects from a different context
        a = client_share1.sf.getAdminService()
        me = a.getExperimenter(a.getEventContext().userId)
        a.setDefaultGroup(me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(client_share1, readOnlyGroup.id.val)

        # create image and get thumbnail (in read-only group)
        readOnlyImageId = createTestImage(client_share1.sf)
        self.getThumbnail(client_share1.sf, readOnlyImageId)

        # change user into collaborative group. Use object Ids for this, NOT objects from a different context
        a.setDefaultGroup(me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val, False))
        self.set_context(client_share1, collaborativeGroup.id.val)

        # create image and get thumbnail (in collaborative group)
        collaborativeImageId = createTestImage(client_share1.sf)
        self.getThumbnail(client_share1.sf, collaborativeImageId)

        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(client_share1.sf, privateImageId) is None
        assert self.getThumbnail(client_share1.sf, readOnlyImageId) is None


        # now check that the 'owner' of each group can see all 3 thumbnails.
        ## login as owner (into private group)
        owner_client = self.new_client(
            user=newOwner, password=newOwner.omeName.val)

        group_ctx = {"omero.group": str(privateGroup)}
        self.getThumbnail(owner_client.sf, privateImageId, *group_ctx)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, readOnlyImageId) is None
        assert self.getThumbnail(owner_client.sf, collaborativeImageId) is None

        # change owner into read-only group.
        o = client_share1.sf.getAdminService()
        me = o.getExperimenter(o.getEventContext().userId)
        o.setDefaultGroup(me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(owner_client, readOnlyGroup.id.val)

        self.getThumbnail(owner_client.sf, readOnlyImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, privateImageId) is None
        assert self.getThumbnail(owner_client.sf, collaborativeImageId) is None

        # change owner into collaborative group.
        o.setDefaultGroup(me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val, False))
        self.set_context(owner_client, collaborativeGroup.id.val)

        self.getThumbnail(owner_client.sf, collaborativeImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, privateImageId) is None
        assert self.getThumbnail(owner_client.sf, readOnlyImageId) is None


        # now check that the 'user2' of each group can see all thumbnails except private.
        ## login as user2 (into private group)
        user2_client = self.new_client(user=user2, password=user2.omeName.val)

        # check that we can't get thumbnails for any images in private group
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, readOnlyImageId) is None
        assert self.getThumbnail(user2_client.sf, collaborativeImageId) is None

        # change owner into read-only group.
        u = user2_client.sf.getAdminService()
        me = u.getExperimenter(u.getEventContext().userId)
        u.setDefaultGroup(me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(user2_client, readOnlyGroup.id.val)

        self.getThumbnail(user2_client.sf, readOnlyImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, collaborativeImageId) is None

        # change owner into collaborative group.
        u.setDefaultGroup(me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val, False))
        self.set_context(user2_client, collaborativeGroup.id.val)

        self.getThumbnail(user2_client.sf, collaborativeImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, readOnlyImageId) is None
    def testThumbs(self):

        privateGroup = self.new_group(perms='rw----')
        readOnlyGroup = self.new_group(perms='rwr---')
        collaborativeGroup = self.new_group(perms='rwra--')

        #new user (group owner)
        newOwner = self.new_user(group=privateGroup)
        self.add_groups(newOwner, [readOnlyGroup, collaborativeGroup],
                        owner=True)

        #new user1
        user1 = self.new_user(group=privateGroup)
        self.add_groups(user1, [readOnlyGroup, collaborativeGroup])

        #new user2
        user2 = self.new_user(group=privateGroup)
        self.add_groups(user2, [readOnlyGroup, collaborativeGroup])

        ## login as user1 (into their default group)
        # create image in private group
        client_share1 = self.new_client(user=user1, password="******")
        privateImageId = createTestImage(client_share1.sf)

        # if we don't get thumbnail, test fails when another user does
        self.getThumbnail(client_share1.sf, privateImageId)

        # change user into read-only group. Use object Ids for this,
        # NOT objects from a different context
        a = client_share1.sf.getAdminService()
        me = a.getExperimenter(a.getEventContext().userId)
        a.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(client_share1, readOnlyGroup.id.val)

        # create image and get thumbnail (in read-only group)
        readOnlyImageId = createTestImage(client_share1.sf)
        self.getThumbnail(client_share1.sf, readOnlyImageId)

        # change user into collaborative group. Use object Ids for this, NOT objects from a different context
        a.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val,
                                               False))
        self.set_context(client_share1, collaborativeGroup.id.val)

        # create image and get thumbnail (in collaborative group)
        collaborativeImageId = createTestImage(client_share1.sf)
        self.getThumbnail(client_share1.sf, collaborativeImageId)

        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(client_share1.sf, privateImageId) is None
        assert self.getThumbnail(client_share1.sf, readOnlyImageId) is None

        # now check that the 'owner' of each group can see all 3 thumbnails.
        ## login as owner (into private group)
        owner_client = self.new_client(user=newOwner, password="******")

        group_ctx = {"omero.group": str(privateGroup)}
        self.getThumbnail(owner_client.sf, privateImageId, *group_ctx)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, readOnlyImageId) is None
        assert self.getThumbnail(owner_client.sf, collaborativeImageId) is None

        # change owner into read-only group.
        o = client_share1.sf.getAdminService()
        me = o.getExperimenter(o.getEventContext().userId)
        o.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(owner_client, readOnlyGroup.id.val)

        self.getThumbnail(owner_client.sf, readOnlyImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, privateImageId) is None
        assert self.getThumbnail(owner_client.sf, collaborativeImageId) is None

        # change owner into collaborative group.
        o.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val,
                                               False))
        self.set_context(owner_client, collaborativeGroup.id.val)

        self.getThumbnail(owner_client.sf, collaborativeImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(owner_client.sf, privateImageId) is None
        assert self.getThumbnail(owner_client.sf, readOnlyImageId) is None

        # now check that the 'user2' of each group can see all thumbnails except private.
        ## login as user2 (into private group)
        user2_client = self.new_client(user=user2, password="******")

        # check that we can't get thumbnails for any images in private group
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, readOnlyImageId) is None
        assert self.getThumbnail(user2_client.sf, collaborativeImageId) is None

        # change owner into read-only group.
        u = user2_client.sf.getAdminService()
        me = u.getExperimenter(u.getEventContext().userId)
        u.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(readOnlyGroup.id.val, False))
        self.set_context(user2_client, readOnlyGroup.id.val)

        self.getThumbnail(user2_client.sf, readOnlyImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, collaborativeImageId) is None

        # change owner into collaborative group.
        u.setDefaultGroup(
            me, omero.model.ExperimenterGroupI(collaborativeGroup.id.val,
                                               False))
        self.set_context(user2_client, collaborativeGroup.id.val)

        self.getThumbnail(user2_client.sf, collaborativeImageId)
        # check that we can't get thumbnails for images in other groups
        assert self.getThumbnail(user2_client.sf, privateImageId) is None
        assert self.getThumbnail(user2_client.sf, readOnlyImageId) is None
Example #15
0
    def test8704(self):
        # Owner of share
        owner, owner_obj = self.new_client_and_user(perms="rw----")
        # Different group!
        member, member_obj = self.new_client_and_user(perms="rw----")

        member_suuid = \
            member.sf.getAdminService().getEventContext().sessionUuid
        owner_suuid = \
            owner.sf.getAdminService().getEventContext().sessionUuid

        member.sf.getAdminService().getEventContext().groupId
        owner_groupId = owner.sf.getAdminService().getEventContext().groupId

        # just in case
        assert member_suuid != owner_suuid

        # just in case
        assert owner_obj.id.val != member_obj.id.val

        # create image by owner
        owner.sf.getUpdateService()
        image_id = createTestImage(owner.sf)

        p = omero.sys.Parameters()
        p.map = {"id": rlong(long(image_id))}
        sql = "select im from Image im join fetch im.details.owner " \
              "join fetch im.details.group where im.id=:id order by im.name"
        image = owner.sf.getQueryService().findAllByQuery(
            sql, p, {'omero.group': str(owner_groupId)})[0]

        rdefs = owner.sf.getQueryService().findAll("RenderingDef", None)

        # create image by member
        image2 = self.make_image(client=member)

        sid = self.create_share(objects=[image],
                                experimenters=[member_obj],
                                client=owner)

        self.assert_access(owner, sid)
        self.assert_access(member, sid)

        member_share = member.sf.getShareService()
        member_share.getShare(sid)
        # Activation shouldn't be needed any more as
        # we pass {'omero.share': <sid>}
        # member_share.activate(long(sid))

        # And the member should be able to use omero.share:sid
        member_query = member.sf.getQueryService()

        try:
            rv = member.sf.getQueryService().find("Image", image.id.val, None)
        except omero.SecurityViolation:
            pass
        else:
            assert False, "Error: Member shouldn't access image in share!"

        rv = member_query.find("Image", image.id.val,
                               {'omero.share': str(sid)})
        # Not sure which group to set
        # 'omero.group':str(image.details.group.id.val)
        # or 'omero.group':str(member_groupId)

        assert image.id.val == rv.id.val

        member_tb = member.sf.createThumbnailStore()
        try:
            member_tb.setPixelsId(rdefs[0].pixels.id.val,
                                  {'omero.share': str(sid)})
        finally:
            member_tb.close()
        # join share
        user_client = self.new_client(session=member_suuid)
        try:
            # Deactivation shouldn't be needed any more
            # as we pass {'omero.share': <sid>}
            # user_client.sf.getShareService().deactivate()
            user_query = user_client.sf.getQueryService()
            rv = user_query.find(
                "Image", image2.id.val,
                {'omero.group': str(image2.details.group.id.val)})
            assert image2.id.val == rv.id.val
        finally:
            user_client.__del__()
Example #16
0
    def test8704(self):
        # Owner of share
        owner, owner_obj = self.new_client_and_user(perms="rw----")
        # Different group!
        member, member_obj = self.new_client_and_user(perms="rw----")

        member_suuid = \
            member.sf.getAdminService().getEventContext().sessionUuid
        owner_suuid = \
            owner.sf.getAdminService().getEventContext().sessionUuid

        member.sf.getAdminService().getEventContext().groupId
        owner_groupId = owner.sf.getAdminService().getEventContext().groupId

        # just in case
        assert member_suuid != owner_suuid

        # just in case
        assert owner_obj.id.val != member_obj.id.val

        # create image by owner
        owner.sf.getUpdateService()
        image_id = createTestImage(owner.sf)

        p = omero.sys.Parameters()
        p.map = {"id": rlong(long(image_id))}
        sql = "select im from Image im join fetch im.details.owner " \
              "join fetch im.details.group where im.id=:id order by im.name"
        image = owner.sf.getQueryService().findAllByQuery(
            sql, p, {'omero.group': str(owner_groupId)})[0]

        rdefs = owner.sf.getQueryService().findAll("RenderingDef", None)

        # create image by member
        image2 = self.make_image(client=member)

        sid = self.create_share(
            objects=[image], experimenters=[member_obj], client=owner)

        self.assert_access(owner, sid)
        self.assert_access(member, sid)

        member_share = member.sf.getShareService()
        member_share.getShare(sid)
        # Activation shouldn't be needed any more as
        # we pass {'omero.share': <sid>}
        # member_share.activate(long(sid))

        # And the member should be able to use omero.share:sid
        member_query = member.sf.getQueryService()

        try:
            rv = member.sf.getQueryService().find("Image", image.id.val, None)
        except omero.SecurityViolation:
            pass
        else:
            assert False, "Error: Member shouldn't access image in share!"

        rv = member_query.find("Image", image.id.val,
                               {'omero.share': str(sid)})
        # Not sure which group to set
        # 'omero.group':str(image.details.group.id.val)
        # or 'omero.group':str(member_groupId)

        assert image.id.val == rv.id.val

        member_tb = member.sf.createThumbnailStore()
        member_tb.setPixelsId(rdefs[0].pixels.id.val,
                              {'omero.share': str(sid)})

        # join share
        user_client = self.new_client(session=member_suuid)
        try:
            # Deactivation shouldn't be needed any more
            # as we pass {'omero.share': <sid>}
            # user_client.sf.getShareService().deactivate()
            user_query = user_client.sf.getQueryService()
            rv = user_query.find("Image", image2.id.val,
                                 {'omero.group':
                                  str(image2.details.group.id.val)})
            assert image2.id.val == rv.id.val
        finally:
            user_client.__del__()