/*
* Copyright 2013-2015 University of Dundee. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package integration.delete;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import integration.AbstractServerTest;
import omero.SecurityViolation;
import omero.api.IProjectionPrx;
import omero.cmd.Delete2;
import omero.constants.projection.ProjectionType;
import omero.gateway.util.Requests;
import omero.model.Image;
import omero.model.Pixels;
import omero.sys.EventContext;
import org.springframework.util.ResourceUtils;
import org.testng.annotations.Test;
/**
* Deleted projected image and/or source image.
*
* @author Jean-Marie Burel <a
* href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @since 4.4.9
*/
public class DeleteProjectedImageTest extends AbstractServerTest {
/** Indicates to delete the source image. */
private static final int SOURCE_IMAGE = 0;
/** Indicates to delete the projected image. */
private static final int PROJECTED_IMAGE = 1;
/** Indicates to delete the both images. */
private static final int BOTH_IMAGES = 2;
/**
* Imports the small dv.
* The image has 5 z-sections, 6 timepoints, 1 channel, signed 16-bit.
*
* @return The id of the pixels set.
* @throws Exception Thrown if an error occurred.
*/
private Pixels importImage() throws Exception
{
File srcFile = ResourceUtils.getFile("classpath:tinyTest.d3d.dv");
List<Pixels> pixels = null;
try {
pixels = importFile(srcFile, "dv");
} catch (Throwable e) {
throw new Exception("cannot import image", e);
}
return pixels.get(0);
}
/**
* Creates an image and projects it either by the owner or by another
* member of the group. The image is then deleted by the owner of the image
* or by another user.
*
* @param src The permissions of the source group.
* @param memberRole The role of the other group member projecting the
* image or <code>-1</code> if the owner projects the image.
* @param deleteMemberRole The role of the member deleting the image
* image or <code>-1</code> if the owner projects the image.
* @param action One of the constants defined by this class.
* @throws Exception Thrown if an error occurred.
*/
private void deleteImage(String src, int memberRole,
int deleteMemberRole, int action)
throws Exception
{
deleteImage(true, src, memberRole, deleteMemberRole, action);
}
/**
* Creates an image and projects it either by the owner or by another
* member of the group. The image is then deleted by the owner of the image
* or by another user.
*
* @param passes if the delete request's response is expected to be
* {@link omero.cmd.OK}
* @param src The permissions of the source group.
* @param memberRole The role of the other group member projecting the
* image or <code>-1</code> if the owner projects the image.
* @param deleteMemberRole The role of the member deleting the image
* image or <code>-1</code> if the owner projects the image.
* @param action One of the constants defined by this class.
* @throws Exception Thrown if an error occurred.
*/
private void deleteImage(boolean passes, String src, int memberRole,
int deleteMemberRole, int action)
throws Exception
{
EventContext ctx = newUserAndGroup(src);
if (memberRole > 0) { //create a second user in the group.
EventContext ctx2 = newUserInGroup(ctx);
switch (memberRole) {
case AbstractServerTest.ADMIN:
logRootIntoGroup(ctx2);
break;
case AbstractServerTest.GROUP_OWNER:
makeGroupOwner();
}
}
Pixels pixels = importImage();
long id = pixels.getImage().getId().getValue();
List<Integer> channels = Arrays.asList(0);
IProjectionPrx svc = factory.getProjectionService();
long projectedID = svc.projectPixels(pixels.getId().getValue(), null,
ProjectionType.MAXIMUMINTENSITY, 0, 1, channels, 1, 0, 1,
"projectedImage");
disconnect();
init(ctx);
//login is as root
if (deleteMemberRole == AbstractServerTest.ADMIN)
logRootIntoGroup(ctx);
//delete the image(s)
Delete2 dc;
switch (action) {
case SOURCE_IMAGE:
dc = Requests.delete("Image", id);
callback(passes, client, dc);
break;
case PROJECTED_IMAGE:
dc = Requests.delete("Image", projectedID);
callback(passes, client, dc);
break;
case BOTH_IMAGES:
dc = Requests.delete("Image", Arrays.asList(id, projectedID));
callback(passes, client, dc);
break;
}
//Check the result
switch (action) {
case SOURCE_IMAGE:
assertNull(iQuery.find(Image.class.getSimpleName(), id));
//check that the projected image is still there
assertNotNull(iQuery.find(Image.class.getSimpleName(), projectedID));
break;
case PROJECTED_IMAGE:
assertNull(iQuery.find(Image.class.getSimpleName(), projectedID));
//check that the original image is still there
assertNotNull(iQuery.find(Image.class.getSimpleName(), id));
break;
case BOTH_IMAGES:
assertNull(iQuery.find(Image.class.getSimpleName(), projectedID));
assertNull(iQuery.find(Image.class.getSimpleName(), id));
}
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByOwnerRW() throws Exception {
deleteImage("rw----", -1, -1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByOwnerRW() throws Exception {
deleteImage("rw----", -1, -1, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByOwnerRW() throws Exception {
deleteImage("rw----", -1, -1, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByOwnerRWR() throws Exception {
deleteImage("rwr---", -1, -1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByOwnerRWR() throws Exception {
deleteImage("rwr---", -1, -1, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR---- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByOwnerRWR() throws Exception {
deleteImage("rwr---", -1, -1, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByOwnerRWRA() throws Exception {
deleteImage("rwra--", -1, -1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByOwnerRWRA() throws Exception {
deleteImage("rwra--", -1, -1, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByOwnerRWRA() throws Exception {
deleteImage("rwra--", -1, -1, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByOwnerRWRW() throws Exception {
deleteImage("rwrw--", -1, -1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByOwnerRWRW() throws Exception {
deleteImage("rwrw--", -1, -1, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByOwnerRWRW() throws Exception {
deleteImage("rwrw--", -1, -1, BOTH_IMAGES);
}
//Project by another member delete by Admin.
/**
* Test the delete of the image that has been projected in a
* RW---- group. The source image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByMemberdeleteByAdminRW() throws Exception {
deleteImage("rw----", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. The projected image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByMemberdeleteByAdminRW() throws Exception {
deleteImage("rw----", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. Both images are deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByMemberdeleteByAdminRW() throws Exception {
deleteImage("rw----", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The source image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByMemberdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The projected image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByMemberdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. Both images are deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByMemberdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The source image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByMemberdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The projected image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByMemberdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. Both images are deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByMemberdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The source image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByMemberdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The projected image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByMemberdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByMemberdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", AbstractServerTest.MEMBER,
AbstractServerTest.ADMIN, BOTH_IMAGES);
}
//delete by admin
/**
* Test the delete of the image that has been projected in a
* RW---- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByAdminRW() throws Exception {
deleteImage("rw----", -1, AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByAdminRW() throws Exception {
deleteImage("rw----", -1, AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RW---- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByAdminRW() throws Exception {
deleteImage("rw----", -1, AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", -1, AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", -1, AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByAdminRWR() throws Exception {
deleteImage("rwr---", -1, AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", -1, AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", -1, AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByAdminRWRA() throws Exception {
deleteImage("rwra--", -1, AbstractServerTest.ADMIN, BOTH_IMAGES);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The source image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByOwnerdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", -1, AbstractServerTest.ADMIN, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The projected image is deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testProjectedImageByOwnerdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", -1, AbstractServerTest.ADMIN, PROJECTED_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. Both images are deleted.
* The projection is done by the owner of the data and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testBothImagesByOwnerdeleteByAdminRWRW() throws Exception {
deleteImage("rwrw--", -1, AbstractServerTest.ADMIN, BOTH_IMAGES);
}
//Projected by another member delete by data owner.
/**
* Test the delete of the image that has been projected in a
* RW---- group. The source image is deleted.
* The projection is done by a member and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test(expectedExceptions = SecurityViolation.class)
public void testSourceImageByMemberdeleteByOwnerRW() throws Exception {
deleteImage(false, "rw----", AbstractServerTest.MEMBER,
-1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWR--- group. The source image is deleted.
* The projection is done by a member and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test(groups = "broken")
public void testSourceImageByMemberdeleteByOwnerRWR() throws Exception {
deleteImage("rwr---", AbstractServerTest.MEMBER,
-1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRA-- group. The source image is deleted.
* The projection is done by a member and deleted by the admin.
*
* @throws Exception Thrown if an error occurred.
*/
@Test(groups = "broken")
public void testSourceImageByMemberdeleteByOwnerRWRA() throws Exception {
deleteImage("rwra--", AbstractServerTest.MEMBER,
-1, SOURCE_IMAGE);
}
/**
* Test the delete of the image that has been projected in a
* RWRW-- group. The source image is deleted.
* The projection is done by a member and deleted by the owner.
*
* @throws Exception Thrown if an error occurred.
*/
@Test
public void testSourceImageByMemberdeleteByOwnerRWRW() throws Exception {
deleteImage("rwrw--", AbstractServerTest.MEMBER,
-1, SOURCE_IMAGE);
}
}