/* * $Id$ * * Copyright 2010 Glencoe Software, Inc. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.itests.perms42; import java.util.HashMap; import java.util.Map; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import ome.api.ThumbnailStore; import ome.conditions.SecurityViolation; import ome.model.IObject; import ome.model.core.Image; import ome.model.core.Pixels; import ome.model.internal.Permissions; import ome.model.meta.ExperimenterGroup; import ome.security.basic.CurrentDetails; /** * Test of the omero.group functionality in Beta4.4. This adds on to the 4.2/4.3 * permission system by allowing querying among several groups at one time. * * @since Beta-4.4.0 * */ @Test(groups = "ticket:3529") public class AllGroupsTest extends PermissionsTest { @AfterMethod public void resetLoginAop() { loginAop.callContext = null; } // Simples reads // ========================================================================= public void testAdminAllGroups() { setup(Permissions.GROUP_READABLE); fixture.make_admin(); assertRead(); } public void testNonAdminAllGroups() { setup(Permissions.GROUP_READABLE); // fixture.make_admin(); Non-admin assertRead(); } protected void assertRead() { // Create an image in the default group Image img = fixture.saveImage(); // Change group and try to load ExperimenterGroup group = fixture.new_group(); fixture.use_group(group); assertCantLoad(img); // Try to load using omero.group:-1 loginAop.callContext = grpctx(-1L); assertCanLoad(img); } // Thumbnail usage // ========================================================================= @Test(enabled = false) // Not yet supported. public void testThumbInAllShares() { setup(Permissions.GROUP_READABLE); assertThumb(sharectx(-1L)); } public void testThumbInAllGroups() { setup(Permissions.GROUP_READABLE); assertThumb(grpctx(-1L)); } protected void assertThumb(Map<String, String> ctx) { Pixels pix = makePixels(); ThumbnailStore tb = factory.createThumbnailService(); loginAop.callContext = ctx; if (!tb.setPixelsId(pix.getId())) { tb.resetDefaults(); tb.setPixelsId(pix.getId()); } tb.getThumbnail(64, 64); } // Helpers // ========================================================================= CurrentDetails cd() { return applicationContext.getBean(CurrentDetails.class); } Map<String, String> grpctx(long id) { HashMap<String, String> map = new HashMap<String, String>(); map.put("omero.group", ""+id); return map; } Map<String, String> sharectx(long id) { HashMap<String, String> map = new HashMap<String, String>(); map.put("omero.share", ""+id); return map; } protected void assertCanLoad(IObject obj) { assertNotNull(lookup(obj)); } protected void assertCantLoad(IObject obj) { try { lookup(obj); fail("secvio"); } catch (SecurityViolation sv) { // ok. } } }