/** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.airavata.sharing.registry; import org.apache.airavata.sharing.registry.models.*; import org.apache.airavata.sharing.registry.server.ServerMain; import org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.databene.contiperf.PerfTest; import org.databene.contiperf.junit.ContiPerfRule; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Arrays; public class SharingRegistryServiceTest { private final static Logger logger = LoggerFactory.getLogger(SharingRegistryServiceTest.class); @Rule public ContiPerfRule i = new ContiPerfRule(); @BeforeClass public static void setUp() throws InterruptedException { ServerMain serverMain = new ServerMain(); serverMain.main(new String[]{}); Thread.sleep(1000 * 2); } @Test @PerfTest(invocations = 50, threads = 10) public void test() throws TException, InterruptedException { String serverHost = "localhost"; int serverPort = 7878; TTransport transport = new TSocket(serverHost, serverPort); transport.open(); TProtocol protocol = new TBinaryProtocol(transport); SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol); Domain domain = new Domain(); //has to be one word domain.setName("test-domain" + Math.random()); //optional domain.setDescription("test domain description"); String domainId = sharingServiceClient.createDomain(domain); Assert.assertTrue(sharingServiceClient.isDomainExists(domainId)); User user1 = new User(); //required user1.setUserId("test-user-1"); //required user1.setUserName("test-user-1"); //required user1.setDomainId(domainId); //required user1.setFirstName("John"); //required user1.setLastName("Doe"); //required user1.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon1 = new byte[10]; //user1.setIcon(icon1); sharingServiceClient.createUser(user1); Assert.assertTrue(sharingServiceClient.isUserExists(domainId, "test-user-1")); User user2 = new User(); //required user2.setUserId("test-user-2"); //required user2.setUserName("test-user-2"); //required user2.setDomainId(domainId); //required user2.setFirstName("John"); //required user2.setLastName("Doe"); //required user2.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon2 = new byte[10]; //user2.setIcon(icon2); sharingServiceClient.createUser(user2); User user3 = new User(); //required user3.setUserId("test-user-3"); //required user3.setUserName("test-user-3"); //required user3.setDomainId(domainId); //required user3.setFirstName("John"); //required user3.setLastName("Doe"); //required user3.setEmail("john.doe@abc.com"); //optional - this should be bytes of the users image icon //byte[] icon3 = new byte[10]; //user3.setIcon(icon3); sharingServiceClient.createUser(user3); UserGroup userGroup1 = new UserGroup(); //required userGroup1.setGroupId("test-group-1"); //required userGroup1.setDomainId(domainId); //required userGroup1.setName("test-group-1"); //optional userGroup1.setDescription("test group description"); //required userGroup1.setOwnerId("test-user-1"); //required userGroup1.setGroupType(GroupType.USER_LEVEL_GROUP); sharingServiceClient.createGroup(userGroup1); Assert.assertTrue(sharingServiceClient.isGroupExists(domainId, "test-group-1")); UserGroup userGroup2 = new UserGroup(); //required userGroup2.setGroupId("test-group-2"); //required userGroup2.setDomainId(domainId); //required userGroup2.setName("test-group-2"); //optional userGroup2.setDescription("test group description"); //required userGroup2.setOwnerId("test-user-2"); //required userGroup2.setGroupType(GroupType.USER_LEVEL_GROUP); sharingServiceClient.createGroup(userGroup2); sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2"); sharingServiceClient.addChildGroupsToParentGroup(domainId, Arrays.asList("test-group-2"), "test-group-1"); PermissionType permissionType1 = new PermissionType(); //required permissionType1.setPermissionTypeId("READ"); //required permissionType1.setDomainId(domainId); //required permissionType1.setName("READ"); //optional permissionType1.setDescription("READ description"); sharingServiceClient.createPermissionType(permissionType1); Assert.assertTrue(sharingServiceClient.isPermissionExists(domainId, "READ")); PermissionType permissionType2 = new PermissionType(); permissionType2.setPermissionTypeId("WRITE"); permissionType2.setDomainId(domainId); permissionType2.setName("WRITE"); permissionType2.setDescription("WRITE description"); sharingServiceClient.createPermissionType(permissionType2); PermissionType permissionType3 = new PermissionType(); permissionType3.setPermissionTypeId("CLONE"); permissionType3.setDomainId(domainId); permissionType3.setName("CLONE"); permissionType3.setDescription("CLONE description"); sharingServiceClient.createPermissionType(permissionType3); EntityType entityType1 = new EntityType(); //required entityType1.setEntityTypeId("PROJECT"); //required entityType1.setDomainId(domainId); //required entityType1.setName("PROJECT"); //optional entityType1.setDescription("PROJECT entity type description"); sharingServiceClient.createEntityType(entityType1); Assert.assertTrue(sharingServiceClient.isEntityTypeExists(domainId, "PROJECT")); EntityType entityType2 = new EntityType(); entityType2.setEntityTypeId("EXPERIMENT"); entityType2.setDomainId(domainId); entityType2.setName("EXPERIMENT"); entityType2.setDescription("EXPERIMENT entity type"); sharingServiceClient.createEntityType(entityType2); EntityType entityType3 = new EntityType(); entityType3.setEntityTypeId("FILE"); entityType3.setDomainId(domainId); entityType3.setName("FILE"); entityType3.setDescription("FILE entity type"); sharingServiceClient.createEntityType(entityType3); //Creating entities Entity entity1 = new Entity(); //required entity1.setEntityId("test-project-1"); //required entity1.setDomainId(domainId); //required entity1.setEntityTypeId("PROJECT"); //required entity1.setOwnerId("test-user-1"); //required entity1.setName("test-project-1"); //optional entity1.setDescription("test project 1 description"); //optional entity1.setFullText("test project 1 stampede gaussian seagrid"); //optional - If not set this will be default to current system time entity1.setOriginalEntityCreationTime(System.currentTimeMillis()); sharingServiceClient.createEntity(entity1); Assert.assertTrue(sharingServiceClient.isEntityExists(domainId, "test-project-1")); Entity entity2 = new Entity(); entity2.setEntityId("test-experiment-1"); entity2.setDomainId(domainId); entity2.setEntityTypeId("EXPERIMENT"); entity2.setOwnerId("test-user-1"); entity2.setName("test-experiment-1"); entity2.setDescription("test experiment 1 description"); entity2.setParentEntityId("test-project-1"); entity2.setFullText("test experiment 1 benzene"); sharingServiceClient.createEntity(entity2); Entity entity3 = new Entity(); entity3.setEntityId("test-experiment-2"); entity3.setDomainId(domainId); entity3.setEntityTypeId("EXPERIMENT"); entity3.setOwnerId("test-user-1"); entity3.setName("test-experiment-2"); entity3.setDescription("test experiment 2 description"); entity3.setParentEntityId("test-project-1"); entity3.setFullText("test experiment 1 3-methyl 1-butanol stampede"); sharingServiceClient.createEntity(entity3); Entity entity4 = new Entity(); entity4.setEntityId("test-file-1"); entity4.setDomainId(domainId); entity4.setEntityTypeId("FILE"); entity4.setOwnerId("test-user-1"); entity4.setName("test-file-1"); entity4.setDescription("test file 1 description"); entity4.setParentEntityId("test-experiment-2"); entity4.setFullText("test input file 1 for experiment 2"); sharingServiceClient.createEntity(entity4); Assert.assertTrue(sharingServiceClient.getEntity(domainId, "test-project-1").getSharedCount() == 0); sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true); Assert.assertTrue(sharingServiceClient.getEntity(domainId, "test-project-1").getSharedCount() == 1); ArrayList<SearchCriteria> filters = new ArrayList<>(); SearchCriteria searchCriteria = new SearchCriteria(); searchCriteria.setSearchField(EntitySearchField.SHARED_COUNT); searchCriteria.setValue("1"); searchCriteria.setSearchCondition(SearchCondition.GTE); filters.add(searchCriteria); Assert.assertTrue(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1).size() == 1); sharingServiceClient.revokeEntitySharingFromUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE"); Assert.assertTrue(sharingServiceClient.getEntity(domainId, "test-project-1").getSharedCount() == 0); sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true); sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true); sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false); //true Assert.assertTrue(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE")); //true Assert.assertTrue(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE")); //true Assert.assertTrue(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE")); //false Assert.assertFalse(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ")); //true Assert.assertTrue(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ")); //false Assert.assertFalse(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ")); //true Assert.assertTrue(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ")); //false Assert.assertFalse(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE")); //true Assert.assertTrue((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "CLONE"))); //false Assert.assertFalse((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE"))); filters = new ArrayList<>(); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.FULL_TEXT); searchCriteria.setValue("experiment"); searchCriteria.setSearchField(EntitySearchField.FULL_TEXT); filters.add(searchCriteria); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setValue("EXPERIMENT"); searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID); filters.add(searchCriteria); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.EQUAL); searchCriteria.setValue("READ"); searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID); filters.add(searchCriteria); Assert.assertTrue(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1).size() == 1); Entity persistedEntity = sharingServiceClient.searchEntities( domainId, "test-user-2", filters, 0, -1).get(0); Assert.assertEquals(entity3.getName(), persistedEntity.getName()); Assert.assertEquals(entity3.getDescription(), persistedEntity.getDescription()); Assert.assertEquals(entity3.getFullText(), persistedEntity.getFullText()); searchCriteria = new SearchCriteria(); searchCriteria.setSearchCondition(SearchCondition.NOT); searchCriteria.setValue("test-user-1"); searchCriteria.setSearchField(EntitySearchField.OWNER_ID); filters.add(searchCriteria); Assert.assertTrue(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1).size() == 0); transport.close(); } }