From a0ea0ca2af41e2dff02780d08c36d0e7ef7c5095 Mon Sep 17 00:00:00 2001
From: juanf <juanf>
Date: Mon, 6 Feb 2017 14:23:37 +0000
Subject: [PATCH] SSDM-4686 : v3 roles bug - tests for create/update/delete
 projects, experiments, samples and datasets

SVN: 37694
---
 .../asapi/v3/CreateDataSetTest.java           | 33 +++++++++++++++++--
 .../asapi/v3/CreateExperimentTest.java        | 25 +++++++++++++-
 .../asapi/v3/CreateProjectTest.java           | 21 ++++++++++++
 .../systemtest/asapi/v3/CreateSampleTest.java | 25 +++++++++++++-
 .../asapi/v3/DeleteDataSetTest.java           |  2 +-
 .../asapi/v3/DeleteExperimentTest.java        |  2 +-
 .../asapi/v3/DeleteProjectTest.java           |  2 +-
 .../systemtest/asapi/v3/DeleteSampleTest.java |  2 +-
 .../asapi/v3/UpdateDataSetTest.java           | 20 +++++++++++
 .../asapi/v3/UpdateExperimentTest.java        | 21 ++++++++++++
 .../asapi/v3/UpdateProjectTest.java           | 21 +++++++++++-
 .../systemtest/asapi/v3/UpdateSampleTest.java | 27 +++++++++++++--
 .../postgresql/156/051=role_assignments.tsv   |  2 +-
 13 files changed, 190 insertions(+), 13 deletions(-)

diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
index 8d0fb577928..cc044907126 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateDataSetTest.java
@@ -90,6 +90,37 @@ public class CreateDataSetTest extends AbstractDataSetTest
         assertDataSetsReindexed(state, permIds.get(0).getPermId());
     }
 
+    @Test
+    public void testCreateDSWithAdminUserInAnotherSpace()
+    {
+        final DataSetPermId permId = new DataSetPermId("NO_SHALL_CREATE");
+
+        assertUserFailureException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    PhysicalDataCreation physicalCreation = new PhysicalDataCreation();
+                    physicalCreation.setLocation("test/location/" + permId.getPermId());
+                    physicalCreation.setFileFormatTypeId(new FileFormatTypePermId("TIFF"));
+                    physicalCreation.setLocatorTypeId(new RelativeLocationLocatorTypePermId());
+                    physicalCreation.setStorageFormatId(new ProprietaryStorageFormatPermId());
+
+                    DataSetCreation creation = new DataSetCreation();
+                    creation.setCode(permId.getPermId());
+                    creation.setTypeId(new EntityTypePermId("UNKNOWN"));
+                    creation.setExperimentId(new ExperimentIdentifier("/TEST-SPACE/TEST-PROJECT/EXP_SPACE_TEST"));
+                    creation.setDataStoreId(new DataStorePermId("STANDARD"));
+                    creation.setPhysicalData(physicalCreation);
+                    creation.setCreationId(new CreationId(permId.getPermId()));
+
+                    v3api.createDataSets(sessionToken, Collections.singletonList(creation));
+                }
+            }, "Data set creation can be only executed by a system user or a user with at least SPACE_ETL_SERVER role");
+    }
+
     @Test
     public void testCreateWithNonAutogeneratedCodeNull()
     {
@@ -962,8 +993,6 @@ public class CreateDataSetTest extends AbstractDataSetTest
                 }
             }, "Data set creation can be only executed by a system user or a user with at least SPACE_ETL_SERVER role");
     }
-    
-    
 
     @Test
     public void testCreateWithUserEtlServer()
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java
index 1ecfe9c4b51..e442e1e008d 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -36,6 +37,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.IEntityTypeId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.fetchoptions.ExperimentFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentIdentifier;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.ExperimentPermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.id.IExperimentId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.IProjectId;
@@ -48,7 +50,6 @@ import ch.ethz.sis.openbis.systemtest.asapi.v3.index.ReindexingState;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewETPTAssignment;
-
 import junit.framework.Assert;
 
 /**
@@ -94,6 +95,28 @@ public class CreateExperimentTest extends AbstractExperimentTest
             }, "Code cannot be empty");
     }
 
+    @Test
+    public void testCreateWithAdminUserInAnotherSpace()
+    {
+        final String code = "WILL-FAIL";
+        final ExperimentIdentifier identifier = new ExperimentIdentifier("/TEST-SPACE/NOE/" + code);
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    final ExperimentCreation experiment = new ExperimentCreation();
+                    experiment.setTypeId(new EntityTypePermId("SIRNA_HCS"));
+                    experiment.setProjectId(new ProjectIdentifier("/TEST-SPACE/NOE"));
+                    experiment.setCode(code);
+
+                    v3api.createExperiments(sessionToken, Collections.singletonList(experiment));
+                }
+            }, identifier);
+    }
+
     @Test
     public void testCreateWithCodeExisting()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateProjectTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateProjectTest.java
index bfd8df35022..904d1bee66d 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateProjectTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateProjectTest.java
@@ -19,6 +19,7 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3;
 import static org.testng.Assert.assertEquals;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -140,6 +141,26 @@ public class CreateProjectTest extends AbstractTest
             }, spaceId);
     }
 
+    @Test
+    public void testCreateProjectWithAdminUserInAnotherSpace()
+    {
+
+        final ISpaceId spaceId = new SpacePermId("TEST-SPACE");
+        final ProjectCreation project = new ProjectCreation();
+        project.setCode("TEST_PROJECT_FAIL");
+        project.setSpaceId(spaceId);
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+                    v3api.createProjects(sessionToken, Collections.singletonList(project));
+                }
+            }, spaceId);
+    }
+
     @Test
     public void testCreateWithSpaceNonexistent()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java
index ee9faa8a9cb..d80c1b2f63d 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java
@@ -53,7 +53,6 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.common.batch.Batch;
 import ch.ethz.sis.openbis.systemtest.asapi.v3.index.ReindexingState;
 import ch.systemsx.cisd.common.action.IDelegatedAction;
 import ch.systemsx.cisd.common.test.AssertionUtil;
-
 import junit.framework.Assert;
 
 /**
@@ -122,6 +121,30 @@ public class CreateSampleTest extends AbstractSampleTest
         AssertionUtil.assertCollectionSize(sampleWithAutogeneratedCode, 2);
     }
 
+    @Test
+    public void testCreateSampleWithAdminUserInAnotherSpace()
+    {
+        final String code = "TEST_TO_FAIL";
+        final SampleIdentifier identifier = new SampleIdentifier("/TEST-SPACE/" + code);
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    SampleCreation creation = new SampleCreation();
+                    creation.setCode(code);
+                    creation.setTypeId(new EntityTypePermId("CELL_PLATE"));
+                    creation.setSpaceId(new SpacePermId("TEST-SPACE"));
+                    creation.setCreationId(new CreationId("creation " + code));
+
+                    v3api.createSamples(sessionToken, Collections.singletonList(creation));
+                }
+            }, identifier);
+    }
+
     @Test
     public void testCreateWithCodeExisting()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
index ffcb34fb3fd..548f9d15c59 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteDataSetTest.java
@@ -119,7 +119,7 @@ public class DeleteDataSetTest extends AbstractDeletionTest
     }
 
     @Test
-    public void testDeleteDSWithPowerUserInAnotherSpace()
+    public void testDeleteDSWithAdminUserInAnotherSpace()
     {
         final DataSetPermId permId = new DataSetPermId("20120619092259000-22");
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
index 2853224f1ec..d77f8af4ca6 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteExperimentTest.java
@@ -165,7 +165,7 @@ public class DeleteExperimentTest extends AbstractDeletionTest
     }
 
     @Test
-    public void testExperimentWithPowerUserInAnotherSpace()
+    public void testExperimentWithAdminUserInAnotherSpace()
     {
         final ExperimentPermId permId = new ExperimentPermId("200902091255058-1037");
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
index 7c4361b4c74..443dad3580c 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteProjectTest.java
@@ -104,7 +104,7 @@ public class DeleteProjectTest extends AbstractDeletionTest
     }
 
     @Test
-    public void testDeleteProjectWithPowerUserInAnotherSpace()
+    public void testDeleteProjectWithAdminUserInAnotherSpace()
     {
         final ProjectPermId permId = new ProjectPermId("20120814110011738-105");
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
index 427077d5b12..a552e91f276 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/DeleteSampleTest.java
@@ -57,7 +57,7 @@ public class DeleteSampleTest extends AbstractDeletionTest
     }
 
     @Test
-    public void testDeleteSampleWithPowerUserInAnotherSpace()
+    public void testDeleteSampleWithAdminUserInAnotherSpace()
     {
         final SamplePermId permId = new SamplePermId("200902091250077-1060");
 
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
index 11bb12ad8cc..d742a26f9c5 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateDataSetTest.java
@@ -106,6 +106,26 @@ public class UpdateDataSetTest extends AbstractSampleTest
         assertEquals(result.getProperties().get("COMMENT"), "Updated description");
     }
 
+    @Test
+    public void testUpdateDSWithAdminUserInAnotherSpace()
+    {
+        final DataSetPermId permId = new DataSetPermId("20120619092259000-22");
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    DataSetUpdate update = new DataSetUpdate();
+                    update.setDataSetId(permId);
+
+                    v3api.updateDataSets(sessionToken, Collections.singletonList(update));
+                }
+            }, permId);
+    }
+
     @Test
     public void testUpdateWithDataSetNonexistent()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java
index 8e32bbb16bd..7e0cb3c6859 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java
@@ -20,6 +20,7 @@ import static org.testng.Assert.assertEquals;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -692,6 +693,26 @@ public class UpdateExperimentTest extends AbstractExperimentTest
             }, tagId);
     }
 
+    @Test
+    public void testUpdateWithAdminUserInAnotherSpace()
+    {
+        final ExperimentPermId permId = new ExperimentPermId("200902091255058-1037");
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    final ExperimentUpdate update = new ExperimentUpdate();
+                    update.setExperimentId(permId);
+
+                    v3api.updateExperiments(sessionToken, Collections.singletonList(update));
+                }
+            }, permId);
+    }
+
     private ExperimentPermId createExperimentWithoutAttachments()
     {
         final String sessionToken = v3api.login(TEST_USER, PASSWORD);
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java
index b5996314cf3..f266e3eecdc 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateProjectTest.java
@@ -16,10 +16,11 @@
 
 package ch.ethz.sis.openbis.systemtest.asapi.v3;
 
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -85,6 +86,24 @@ public class UpdateProjectTest extends AbstractTest
             }, projectId);
     }
 
+    @Test
+    public void testUpdateProjectWithAdminUserInAnotherSpace()
+    {
+        final IProjectId projectId = new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT");
+        final ProjectUpdate update = new ProjectUpdate();
+        update.setProjectId(projectId);
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+                    v3api.updateProjects(sessionToken, Collections.singletonList(update));
+                }
+            }, projectId);
+    }
+
     @Test
     public void testUpdateWithProjectNonexistent()
     {
diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java
index ace8542abf8..af3540354de 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateSampleTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertEquals;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -744,7 +745,8 @@ public class UpdateSampleTest extends AbstractSampleTest
                 {
                     v3api.updateSamples(sessionToken, Arrays.asList(update));
                 }
-            }, "/CISD/A01:CL1 (perm id: 200811050919915-8) cannot be it's own container", patternContains("verifying (1/1)", toDblQuotes("'identifier' : '/CISD/A01:CL1'")));
+            }, "/CISD/A01:CL1 (perm id: 200811050919915-8) cannot be it's own container",
+                patternContains("verifying (1/1)", toDblQuotes("'identifier' : '/CISD/A01:CL1'")));
     }
 
     @Test
@@ -920,8 +922,8 @@ public class UpdateSampleTest extends AbstractSampleTest
                 {
                     v3api.updateSamples(sessionToken, Arrays.asList(update));
                 }
-            }, "/CISD/CL1:A01 (perm id: 200811050919915-9) cannot be it's own container", 
-            patternContains("verifying (1/1)", toDblQuotes("'identifier' : '/CISD/CL1:A01'")));
+            }, "/CISD/CL1:A01 (perm id: 200811050919915-9) cannot be it's own container",
+                patternContains("verifying (1/1)", toDblQuotes("'identifier' : '/CISD/CL1:A01'")));
     }
 
     @Test
@@ -1246,6 +1248,25 @@ public class UpdateSampleTest extends AbstractSampleTest
                 patternContains("verifying (1/1)", toDblQuotes("'identifier' : '/CISD/3V-125'")));
     }
 
+    @Test
+    public void testUpdateSampleWithAdminUserInAnotherSpace()
+    {
+        final SamplePermId permId = new SamplePermId("200902091250077-1060");
+
+        assertUnauthorizedObjectAccessException(new IDelegatedAction()
+            {
+                @Override
+                public void execute()
+                {
+                    String sessionToken = v3api.login(TEST_ROLE_V3, PASSWORD);
+
+                    final SampleUpdate update = new SampleUpdate();
+                    update.setSampleId(permId);
+                    v3api.updateSamples(sessionToken, Collections.singletonList(update));
+                }
+            }, permId);
+    }
+
     @Test
     public void testUpdateWithAttachmentsSetAddRemove()
     {
diff --git a/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv b/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
index 2ff08b28cdf..36836f23cca 100644
--- a/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
+++ b/openbis/sourceTest/sql/postgresql/156/051=role_assignments.tsv
@@ -8,4 +8,4 @@
 8	POWER_USER	1	6	2	2008-11-05 09:18:11.471+01	\N
 9	ADMIN	3	7	2	2008-11-05 09:18:11.471+01	\N
 10	OBSERVER	3	8	2	2008-11-05 09:18:11.471+01	\N
-11	POWER_USER	1	8	2	2008-11-05 09:18:11.471+01	\N
+11	ADMIN	1	8	2	2008-11-05 09:18:11.471+01	\N
-- 
GitLab