blob: c33413b51b8c205523a3243c4f13ad96652b9654 [file] [log] [blame]
/**
*
* 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.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.apache.thrift.transport.TTransportException;
import java.util.ArrayList;
import java.util.Arrays;
public class CipresTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello World!");
//should use the correct host name and port here
String serverHost = "wb-airavata.scigap.org";
int serverPort = 7878;
TTransport transport = null;
try {
transport = new TSocket(serverHost, serverPort);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol);
try {
sharingServiceClient.deleteDomain("test-domain");
} catch (SharingRegistryException sre1) {
System.out.println("deleteDomain failed" + sre1.getMessage() + "\n");
}
Domain domain = new Domain();
//has to be one word
domain.setName("test-domain");
//optional
domain.setDescription("test domain description");
//domain id will be same as domain name
String domainId = sharingServiceClient.createDomain(domain);
System.out.println("After domain creation...\n");
User user1 = new User();
String userName1 = "test-user-1";
String userId1 = "test-user-1";
//required
user1.setUserId(userId1);
//required
user1.setUserName(userName1);
//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[] icon = new byte[10];
//user1.setIcon(icon);
sharingServiceClient.createUser(user1);
User user2 = new User();
String userName2 = "test-user-2";
String userId2 = "test-user-2";
//required
user2.setUserId(userId2);
//required
user2.setUserName(userName2);
//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[] icon = new byte[20];
//user2.setIcon(icon);
sharingServiceClient.createUser(user2);
User user3 = new User();
String userName3 = "test-user-3";
String userId3 = "test-user-3";
//required
user3.setUserId(userId3);
//required
user3.setUserName(userName3);
//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[] icon = new byte[30];
//user3.setIcon(icon);
sharingServiceClient.createUser(user3);
System.out.println("After user creation...\n");
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);
//Similarly create another group "userGroup2" with the owner being "test-user-2".
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);
System.out.println("After group creation...\n");
sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2");
System.out.println("After adding user to group...\n");
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);
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);
System.out.println("After adding groups to parent group...\n");
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);
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);
System.out.println("After project entity creation...\n");
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);
System.out.println("After currentTimeMillis()...\n");
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");
System.out.println("Before sharingServiceClient.createEntity entity2...\n");
sharingServiceClient.createEntity(entity2);
System.out.println("After sharingServiceClient.createEntity entity2...\n");
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);
System.out.println("After sharingServiceClient.createEntity entity3...\n");
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);
System.out.println("After sharingServiceClient.createEntity entity4...\n");
System.out.println("After test entity creation...\n");
//shared with cascading permissions
//System.out.println("Before shareEntityWithUsers WRITE...\n");
//sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true);
System.out.println("Before shareEntityWithGroups READ...\n");
long time = System.currentTimeMillis();
sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true);
System.out.println("Time for sharing " + (System.currentTimeMillis() - time));
//shared with non cascading permissions
System.out.println("Before shareEntityWithGroups CLONE...\n");
time = System.currentTimeMillis();
sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false);
System.out.println("Time for sharing " + (System.currentTimeMillis() - time));
//test-project-1 is explicitly shared with test-user-2 with WRITE permission
System.out.println("Before userHasAccess 1...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE"));
//test-user-2 has WRITE permission to test-experiment-1 and test-experiment-2 indirectly
System.out.println("Before userHasAccess 2...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE"));
System.out.println("Before userHasAccess 3...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE"));
//test-user-2 does not have READ permission to test-experiment-1 and test-experiment-2
System.out.println("Before userHasAccess 4...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ"));
System.out.println(domainId + " test-user-2 " + " test-experiment-2 " + " READ ");
System.out.println("Before userHasAccess 5...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ"));
//test-user-3 does not have READ permission to test-project-1
System.out.println("Before userHasAccess 6...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ"));
//test-experiment-2 is shared with test-group-2 with READ permission. Therefore test-user-3 has READ permission
System.out.println("Before userHasAccess 7...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ"));
//test-user-3 does not have WRITE permission to test-experiment-2
System.out.println("Before userHasAccess 8...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE"));
//test-user-3 has CLONE permission to test-experiment-2
System.out.println("Before userHasAccess 9...\n");
System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "CLONE")));
//test-user-3 does not have CLONE permission to test-file-1
System.out.println("Before userHasAccess 10...\n");
System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE")));
System.out.println("After cascading permissions...\n");
ArrayList<SearchCriteria> filters = new ArrayList<>();
//ArrayList<SearchCriteria> filters = new List<>();
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.setSearchCondition(SearchCondition.LIKE);
searchCriteria.setValue("experiment stampede methyl");
//searchCriteria.setValue("stampede");
//searchCriteria.setSearchField(EntitySearchField.NAME);
searchCriteria.setSearchField(EntitySearchField.FULL_TEXT);
filters.add(searchCriteria);
searchCriteria = new SearchCriteria();
searchCriteria.setSearchCondition(SearchCondition.EQUAL);
searchCriteria.setValue("READ");
searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
filters.add(searchCriteria);
System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1).size());
System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", filters, 0, -1));
System.out.println("After searchEntities...\n");
//System.out.println("After searchEntities...\n");
User userA = new User();
String userNameA = "UserA";
String userIdA = "UserA";
//required
userA.setUserId(userIdA);
//required
userA.setUserName(userNameA);
//required
userA.setDomainId(domainId);
//required
userA.setFirstName("User");
//required
userA.setLastName("A");
//required
userA.setEmail("user.a@example.com");
//optional - this should be bytes of the users image icon
//byte[] icon = new byte[10];
//userA.setIcon(icon);
sharingServiceClient.createUser(userA);
User userB = new User();
String userNameB = "UserB";
String userIdB = "UserB";
//required
userB.setUserId(userIdB);
//required
userB.setUserName(userNameB);
//required
userB.setDomainId(domainId);
//required
userB.setFirstName("User");
//required
userB.setLastName("B");
//required
userB.setEmail("user.b@example.com");
//optional - this should be bytes of the users image icon
//byte[] icon = new byte[10];
//userB.setIcon(icon);
sharingServiceClient.createUser(userB);
User userC = new User();
String userNameC = "UserC";
String userIdC = "UserC";
//required
userC.setUserId(userIdC);
//required
userC.setUserName(userNameC);
//required
userC.setDomainId(domainId);
//required
userC.setFirstName("User");
//required
userC.setLastName("C");
//required
userC.setEmail("user.c@example.com");
//optional - this should be bytes of the users image icon
//byte[] icon = new byte[10];
//userC.setIcon(icon);
sharingServiceClient.createUser(userC);
User userD = new User();
String userNameD = "UserD";
String userIdD = "UserD";
//required
userD.setUserId(userIdD);
//required
userD.setUserName(userNameD);
//required
userD.setDomainId(domainId);
//required
userD.setFirstName("User");
//required
userD.setLastName("D");
//required
userD.setEmail("user.d@example.com");
//optional - this should be bytes of the users image icon
//byte[] icon = new byte[10];
//userD.setIcon(icon);
sharingServiceClient.createUser(userD);
System.out.println("After user creation...\n");
UserGroup Group1 = new UserGroup();
//required
Group1.setGroupId("Group1");
//required
Group1.setDomainId(domainId);
//required
Group1.setName("Group1");
//optional
//userGroup1.setDescription("test group description");
//required
Group1.setOwnerId("UserA");
//required
Group1.setGroupType(GroupType.USER_LEVEL_GROUP);
sharingServiceClient.createGroup(Group1);
System.out.println("After Group1 creation...\n");
sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserB"), "Group1");
sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserC"), "Group1");
sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("UserD"), "Group1");
System.out.println("After adding users to Group1 creation...\n");
EntityType entityTypeFolder = new EntityType();
//required
entityTypeFolder.setEntityTypeId("FOLDER");
//required
entityTypeFolder.setDomainId(domainId);
//required
entityTypeFolder.setName("FOLDER");
//optional
//entityTypeFolder.setDescription("PROJECT entity type description");
sharingServiceClient.createEntityType(entityTypeFolder);
System.out.println("After creating FOLDER entity type...\n");
EntityType entityTypeInputData = new EntityType();
//required
entityTypeInputData.setEntityTypeId("INPUTDATA");
//required
entityTypeInputData.setDomainId(domainId);
//required
entityTypeInputData.setName("INPUTDATA");
//optional
//entityTypeFolder.setDescription("PROJECT entity type description");
sharingServiceClient.createEntityType(entityTypeInputData);
System.out.println("After creating INPUTDATA entity type...\n");
Entity entityB1 = new Entity();
//required
entityB1.setEntityId("UserBProject1");
//required
entityB1.setDomainId(domainId);
//required
entityB1.setEntityTypeId("PROJECT");
//required
entityB1.setOwnerId("UserB");
//required
entityB1.setName("UserBProject1");
//optional
entityB1.setDescription("User B's Project 1");
//optional
entityB1.setFullText("test project 1");
//optional - If not set this will be default to current system time
entityB1.setOriginalEntityCreationTime(System.currentTimeMillis());
sharingServiceClient.createEntity(entityB1);
System.out.println("After creating UserBProject1 ...\n");
Entity entityC1 = new Entity();
//required
entityC1.setEntityId("UserCProject2");
//required
entityC1.setDomainId(domainId);
//required
entityC1.setEntityTypeId("PROJECT");
//required
entityC1.setOwnerId("UserC");
//required
entityC1.setName("UserCProject2");
//optional
entityC1.setDescription("User C's Project 2");
//optional
entityC1.setFullText("test project 2");
//optional - If not set this will be default to current system time
entityC1.setOriginalEntityCreationTime(System.currentTimeMillis());
sharingServiceClient.createEntity(entityC1);
System.out.println("After creating UserCProject2 ...\n");
Entity entityF1 = new Entity();
entityF1.setEntityId("Folder1");
entityF1.setDomainId(domainId);
entityF1.setEntityTypeId("FOLDER");
entityF1.setOwnerId("UserB");
entityF1.setName("UserBFolder1");
entityF1.setDescription("UserB's Folder 1");
entityF1.setParentEntityId("UserBProject1");
entityF1.setFullText("test experiment 1 ethidium");
sharingServiceClient.createEntity(entityF1);
System.out.println("After creating Folder1 ...\n");
Entity entityD1 = new Entity();
entityD1.setEntityId("Data1");
entityD1.setDomainId(domainId);
entityD1.setEntityTypeId("INPUTDATA");
entityD1.setOwnerId("UserB");
entityD1.setName("UserBData1");
entityD1.setDescription("UserB's Data 1");
entityD1.setParentEntityId("Folder1");
entityD1.setFullText("Data 1 for User B Folder 1");
sharingServiceClient.createEntity(entityD1);
System.out.println("After creating Data1 ...\n");
Entity entityF2 = new Entity();
entityF2.setEntityId("Folder2");
entityF2.setDomainId(domainId);
entityF2.setEntityTypeId("FOLDER");
entityF2.setOwnerId("UserC");
entityF2.setName("UserCFolder2");
entityF2.setDescription("UserC's Folder 2");
entityF2.setParentEntityId("UserCProject2");
entityF2.setFullText("test experiment 2 ethidium");
sharingServiceClient.createEntity(entityF2);
System.out.println("After creating Folder2 ...\n");
Entity entityD2 = new Entity();
entityD2.setEntityId("Data2");
entityD2.setDomainId(domainId);
entityD2.setEntityTypeId("INPUTDATA");
entityD2.setOwnerId("UserC");
entityD2.setName("UserCData2");
entityD2.setDescription("UserC's Data 2");
entityD2.setParentEntityId("Folder2");
entityD2.setFullText("Data 2 for User C Folder 1");
sharingServiceClient.createEntity(entityD2);
System.out.println("After creating Data2 ...\n");
//sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true);
time = System.currentTimeMillis();
sharingServiceClient.shareEntityWithGroups(domainId, "Folder1", Arrays.asList("Group1"), "READ", true);
System.out.println("Time for sharing " + (System.currentTimeMillis() - time));
System.out.println("After READ sharing UserBFolder1 with Group1 ...\n");
//sharingServiceClient.shareEntityWithGroups(domainId, "Folder2", Arrays.asList("Group1"), "READ", true);
//System.out.println("After READ sharing UserCFolder2 with Group1 ...\n");
Entity entityD3 = new Entity();
entityD3.setEntityId("Data3");
entityD3.setDomainId(domainId);
entityD3.setEntityTypeId("INPUTDATA");
entityD3.setOwnerId("UserC");
entityD3.setName("UserCData3");
entityD3.setDescription("UserC's Data 3");
entityD3.setParentEntityId("Folder2");
entityD3.setFullText("Data 3 for User C Folder 2");
sharingServiceClient.createEntity(entityD3);
System.out.println("After creating Data3 ...\n");
System.out.println("Does UserC have READ access to Data1 ...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data1", "READ"));
System.out.println("Does UserC have READ access to Data2 ...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data2", "READ"));
System.out.println("Does UserC have READ access to Data3 ...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "UserC", "Data3", "READ"));
System.out.println("Does UserB have READ access to Data3 ...\n");
System.out.println(sharingServiceClient.userHasAccess(domainId, "UserB", "Data3", "READ"));
ArrayList<SearchCriteria> sharedfilters = new ArrayList<>();
searchCriteria = new SearchCriteria();
searchCriteria.setSearchCondition(SearchCondition.EQUAL);
searchCriteria.setValue("READ");
searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
sharedfilters.add(searchCriteria);
System.out.println("items READable by UserC ...\n");
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size());
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1));
searchCriteria = new SearchCriteria();
//searchCriteria.setSearchCondition(SearchCondition.EQUAL);
searchCriteria.setSearchCondition(SearchCondition.NOT);
searchCriteria.setValue("UserC");
searchCriteria.setSearchField(EntitySearchField.OWNER_ID);
sharedfilters.add(searchCriteria);
System.out.println("items READable, and not owned by UserC by UserC ...\n");
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size());
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1));
System.out.println("After searchEntities 2...\n");
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1).size());
System.out.println(sharingServiceClient.searchEntities(domainId, "UserC", sharedfilters, 0, -1));
System.out.println("After searchEntities 2...\n");
sharingServiceClient.removeUsersFromGroup(domainId, Arrays.asList("UserD"), "Group1");
System.out.println("After removing UserD from Group1 ...\n");
sharingServiceClient.deleteGroup(domainId, "Group1");
System.out.println("After deleting Group1 ...\n");
System.out.println("End of try clause...\n");
} catch (TTransportException ex1) {
System.out.println("TTransportException...\n");
System.out.println(ex1);
System.out.println(ex1.getCause());
ex1.printStackTrace();
System.out.println(ex1.getMessage());
} catch (SharingRegistryException ex2) {
System.out.println("SharingRegistryException...\n");
System.out.println(ex2.getMessage());
} catch (TException ex3) {
System.out.println("TException...\n");
System.out.println(ex3.getMessage());
} finally {
System.out.println("In finally...\n");
transport.close();
}
}
}