storagehub/src/test/java/org/gcube/data/access/fs/external/CreateUsers.java

259 lines
8.2 KiB
Java

package org.gcube.data.access.fs.external;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.gcube.common.security.providers.SecretManagerProvider;
import org.gcube.common.security.secrets.CredentialSecret;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.acls.AccessType;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.common.storagehub.model.items.SharedFolder;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CreateUsers {
private static StorageHubClient client;
private static Logger log = LoggerFactory.getLogger(CreateUsers.class);
private String user ="pippo.test";
private String user2 ="lucio.lelii";
private String vreWA ="vre-write-all";
private String vreRO ="vre-read-only";
private String vreWO ="vre-write-owner";
private static final int TEST_USERS_NUMBER = 10;
@BeforeClass
public static void before() throws Exception{
String address = "localhost";
int port = 8081;
URI storagehubUri = new URL(String.format("http://%s:%d/storagehub", address,port)).toURI();
client = new StorageHubClient(storagehubUri);
}
@Before
public void setSecret() {
CredentialSecret secret = new CredentialSecret("sg4-test-client", "a156a7db-3b32-4cd5-b27b-2488e0e01698", "/gcube");
SecretManagerProvider.set(secret);
}
@Test
public void initialiseEnvironment() throws Exception {
this.createUser();
this.addUserToVREs();
this.createUser2AndAddItToVres();
}
//USED TO CREATE TEST USERS
final String lexicon = "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345674890";
final java.util.Random rand = new java.util.Random();
// consider using a Map<String,Boolean> to say whether the identifier is being used or not
final Set<String> identifiers = new HashSet<String>();
public String randomIdentifier() {
StringBuilder builder = new StringBuilder();
while(builder.toString().length() == 0) {
int length = rand.nextInt(5)+5;
for(int i = 0; i < length; i++) {
builder.append(lexicon.charAt(rand.nextInt(lexicon.length())));
}
if(identifiers.contains(builder.toString())) {
builder = new StringBuilder();
}
}
return builder.toString();
}
// END
@Test
public void createTestUsers() throws Exception{
for (int i =0 ; i<TEST_USERS_NUMBER; i++)
client.createUserAccount(randomIdentifier().toLowerCase());
}
@Test
public void createAccountforManging() throws Exception{
client.createUserAccount("service-account-sg4-test-client");
client.getVreFolderManager(vreWA).addUser("service-account-sg4-test-client");
client.getVreFolderManager(vreRO).addUser("service-account-sg4-test-client");
client.getVreFolderManager(vreWO).addUser("service-account-sg4-test-client");
}
@Test
public void getUserRootId() throws Exception{
client.impersonate(user);
System.out.println(client.getWSRoot().getId());
}
@Test
public void getBearerToken() {
System.out.println(SecretManagerProvider.get().getHTTPAuthorizationHeaders());
}
@Test
public void getFolderACLsOnrROVRE() throws Exception {
client.impersonate(user);
FolderContainer vre = (FolderContainer) client.getVREFolders().getContainers().stream().filter(f -> f.get().getTitle().equals(vreWA)).findFirst().get();
FolderContainer folder = (FolderContainer) vre.list().getContainers().stream().findFirst().get();
System.out.println(folder.get().getTitle()+" "+folder.getAcls());
}
@Test
public void createUser() throws Exception{
client.createUserAccount(user);
}
@Test
public void removeUserFromGroup() throws Exception{
client.getVreFolderManager(vreWA).removeAdmin(user);
client.getVreFolderManager(vreWA).removeUser(user);
}
@Test
public void addUserToVREs() throws Exception{
client.getVreFolderManager(vreWA).createVRE(AccessType.WRITE_ALL, user, false);
client.getVreFolderManager(vreWA).setAdmin(user);
client.getVreFolderManager(vreRO).createVRE(AccessType.READ_ONLY, user);
client.getVreFolderManager(vreRO).setAdmin(user);
client.getVreFolderManager(vreWO).createVRE(AccessType.WRITE_OWNER, user);
client.getVreFolderManager(vreWO).setAdmin(user);
createFolderByAdminInVREWO();
}
@Test
public void createFolderByAdminInVREWO() throws Exception {
client.impersonate(user);
retrieveVREbyName(vreWO).newFolder("test created by pippo", "");
}
@Test
public void createUser2AndAddItToVres() throws Exception{
client.impersonate(user);
client.createUserAccount(user2);
client.getVreFolderManager(vreWA).addUser(user2);
client.getVreFolderManager(vreRO).addUser(user2);
client.getVreFolderManager(vreWO).addUser(user2);
}
@Test
public void printVREFoldersAdmin() throws StorageHubException{
System.out.println("launching ....." );
List<FolderContainer> vreFolders = client.getVREFolders().getContainers().stream().map(c -> ((FolderContainer) c)).collect(Collectors.toList());
for (FolderContainer fc : vreFolders) {
System.out.println(fc.get().getTitle());
System.out.println(fc.getAcls());
System.out.println(client.getVreFolderManager(fc.get().getTitle()).getAdmins());
}
}
@Test
public void getVREs() throws Exception{
client.impersonate(user);
client.getVREFolders().getItems().stream().map(i -> ((SharedFolder) i)).forEach(s -> System.out.println(s.getDisplayName()));
}
@Test
public void getWsRoot() throws Exception{
client.impersonate(user);
client.getWSRoot().list().getItems().forEach(i -> System.out.println(i.getId()+" "+i.getTitle()));
}
@Test
public void download() throws Exception{
client.impersonate(user);
try ( InputStream is = client.open("5b5236d2-ec88-49f2-a2c5-04ecf8284191").asFile().download().getStream()){
String text = new BufferedReader(
new InputStreamReader(is, StandardCharsets.UTF_8))
.lines()
.collect(Collectors.joining("\n"));
System.out.println(text);
}
}
@Test
public void uploadFile() {
client.impersonate(user);
try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){
client.getWSRoot().uploadFile(is, "test1.jpg", "a test");
} catch (Exception e) {
e.printStackTrace();
}
}
private FolderContainer retrieveVREbyName(String name) throws StorageHubException {
List<FolderContainer> vreFolders = client.getVREFolders().getContainers().stream().map(c -> ((FolderContainer) c)).collect(Collectors.toList());
return vreFolders.stream().filter(c -> ((SharedFolder)c.get()).getDisplayName().equals(name)).findFirst().get();
}
@Test
public void uploadFileToVREWriteAll() throws StorageHubException{
client.impersonate(user2);
try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){
retrieveVREbyName(vreWA).uploadFile(is, "test1.jpg", "a test");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test(expected = StorageHubException.class)
public void uploadFileToVREReadOnly() throws StorageHubException{
client.impersonate(user2);
try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){
retrieveVREbyName(vreRO).uploadFile(is, "test1.jpg", "a test");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void uploadFileToVREReadOnlyAdmin() throws StorageHubException{
client.impersonate(user);
try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){
retrieveVREbyName(vreRO).uploadFile(is, "test1.jpg", "a test");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void uploadFileToVREWriteOwner() throws StorageHubException{
client.impersonate(user2);
try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){
retrieveVREbyName(vreWO).uploadFile(is, "test1.jpg", "a test");
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void removeUser() throws Exception{
client.deleteUserAccount(user);
}
}