use of org.pmiops.workbench.model.Workspace in project workbench by all-of-us.
the class WorkspacesControllerTest method testUnshareWorkspace.
@Test
public void testUnshareWorkspace() throws Exception {
User writerUser = new User();
writerUser.setEmail("writerfriend@gmail.com");
writerUser.setUserId(124L);
writerUser.setFreeTierBillingProjectName("TestBillingProject2");
writerUser.setDisabled(false);
writerUser = userDao.save(writerUser);
User readerUser = new User();
readerUser.setEmail("readerfriend@gmail.com");
readerUser.setUserId(125L);
readerUser.setFreeTierBillingProjectName("TestBillingProject3");
readerUser.setDisabled(false);
readerUser = userDao.save(readerUser);
Workspace workspace = createDefaultWorkspace();
workspace = workspacesController.createWorkspace(workspace).getBody();
ShareWorkspaceRequest shareWorkspaceRequest = new ShareWorkspaceRequest();
shareWorkspaceRequest.setWorkspaceEtag(workspace.getEtag());
UserRole creator = new UserRole();
creator.setEmail(LOGGED_IN_USER_EMAIL);
creator.setRole(WorkspaceAccessLevel.OWNER);
shareWorkspaceRequest.addItemsItem(creator);
UserRole writer = new UserRole();
writer.setEmail("writerfriend@gmail.com");
writer.setRole(WorkspaceAccessLevel.WRITER);
shareWorkspaceRequest.addItemsItem(writer);
UserRole reader = new UserRole();
reader.setEmail("readerfriend@gmail.com");
reader.setRole(WorkspaceAccessLevel.READER);
shareWorkspaceRequest.addItemsItem(reader);
WorkspaceACLUpdateResponseList responseValue = new WorkspaceACLUpdateResponseList();
responseValue.setUsersNotFound(new ArrayList<WorkspaceACLUpdate>());
// Simulate time between API calls to trigger last-modified/@Version changes.
CLOCK.increment(1000);
when(fireCloudService.updateWorkspaceACL(anyString(), anyString(), anyListOf(WorkspaceACLUpdate.class))).thenReturn(responseValue);
ShareWorkspaceResponse shareResp = workspacesController.shareWorkspace(workspace.getNamespace(), workspace.getName(), shareWorkspaceRequest).getBody();
stubGetWorkspace(workspace.getNamespace(), workspace.getId(), workspace.getCreator(), WorkspaceAccessLevel.OWNER);
Workspace workspace2 = workspacesController.getWorkspace(workspace.getNamespace(), workspace.getId()).getBody().getWorkspace();
assertThat(shareResp.getWorkspaceEtag()).isEqualTo(workspace2.getEtag());
CLOCK.increment(1000);
shareWorkspaceRequest = new ShareWorkspaceRequest();
shareWorkspaceRequest.setWorkspaceEtag(workspace2.getEtag());
shareWorkspaceRequest.addItemsItem(creator);
shareWorkspaceRequest.addItemsItem(writer);
shareResp = workspacesController.shareWorkspace(workspace.getNamespace(), workspace.getName(), shareWorkspaceRequest).getBody();
Workspace workspace3 = workspacesController.getWorkspace(workspace.getNamespace(), workspace.getId()).getBody().getWorkspace();
assertThat(shareResp.getWorkspaceEtag()).isEqualTo(workspace3.getEtag());
assertThat(workspace3.getUserRoles().size()).isEqualTo(2);
int numOwners = 0;
int numWriters = 0;
int numReaders = 0;
for (UserRole userRole : workspace3.getUserRoles()) {
if (userRole.getRole().equals(WorkspaceAccessLevel.OWNER)) {
assertThat(userRole.getEmail()).isEqualTo(LOGGED_IN_USER_EMAIL);
numOwners++;
} else if (userRole.getRole().equals(WorkspaceAccessLevel.WRITER)) {
assertThat(userRole.getEmail()).isEqualTo("writerfriend@gmail.com");
numWriters++;
} else {
assertThat(userRole.getEmail()).isEqualTo("readerfriend@gmail.com");
numReaders++;
}
}
assertThat(numOwners).isEqualTo(1);
assertThat(numWriters).isEqualTo(1);
assertThat(numReaders).isEqualTo(0);
assertThat(workspace.getEtag()).isNotEqualTo(workspace2.getEtag());
assertThat(workspace2.getEtag()).isNotEqualTo(workspace3.getEtag());
}
use of org.pmiops.workbench.model.Workspace in project workbench by all-of-us.
the class WorkspacesControllerTest method testStaleShareWorkspace.
@Test
public void testStaleShareWorkspace() throws Exception {
Workspace workspace = createDefaultWorkspace();
workspace = workspacesController.createWorkspace(workspace).getBody();
ShareWorkspaceRequest shareWorkspaceRequest = new ShareWorkspaceRequest();
shareWorkspaceRequest.setWorkspaceEtag(workspace.getEtag());
UserRole creator = new UserRole();
creator.setEmail(LOGGED_IN_USER_EMAIL);
creator.setRole(WorkspaceAccessLevel.OWNER);
shareWorkspaceRequest.addItemsItem(creator);
// Simulate time between API calls to trigger last-modified/@Version changes.
CLOCK.increment(1000);
WorkspaceACLUpdateResponseList responseValue = new WorkspaceACLUpdateResponseList();
when(fireCloudService.updateWorkspaceACL(anyString(), anyString(), anyListOf(WorkspaceACLUpdate.class))).thenReturn(responseValue);
workspacesController.shareWorkspace(workspace.getNamespace(), workspace.getName(), shareWorkspaceRequest);
// Simulate time between API calls to trigger last-modified/@Version changes.
CLOCK.increment(1000);
shareWorkspaceRequest = new ShareWorkspaceRequest();
// Use the initial etag, not the updated value from shareWorkspace.
shareWorkspaceRequest.setWorkspaceEtag(workspace.getEtag());
try {
workspacesController.shareWorkspace(workspace.getNamespace(), workspace.getName(), shareWorkspaceRequest);
fail("expected conflict exception when sharing with stale etag");
} catch (ConflictException e) {
// Expected
}
}
use of org.pmiops.workbench.model.Workspace in project workbench by all-of-us.
the class WorkspacesControllerTest method testCloneWorkspace.
@Test
public void testCloneWorkspace() throws Exception {
Workspace workspace = createDefaultWorkspace();
workspace = workspacesController.createWorkspace(workspace).getBody();
// The original workspace is shared with one other user.
User writerUser = new User();
writerUser.setEmail("writerfriend@gmail.com");
writerUser.setUserId(124L);
writerUser.setFreeTierBillingProjectName("TestBillingProject2");
writerUser.setDisabled(false);
writerUser = userDao.save(writerUser);
ShareWorkspaceRequest shareWorkspaceRequest = new ShareWorkspaceRequest();
shareWorkspaceRequest.setWorkspaceEtag(workspace.getEtag());
UserRole creator = new UserRole();
creator.setEmail(LOGGED_IN_USER_EMAIL);
creator.setRole(WorkspaceAccessLevel.OWNER);
shareWorkspaceRequest.addItemsItem(creator);
UserRole writer = new UserRole();
writer.setEmail(writerUser.getEmail());
writer.setRole(WorkspaceAccessLevel.WRITER);
shareWorkspaceRequest.addItemsItem(writer);
when(fireCloudService.updateWorkspaceACL(anyString(), anyString(), anyListOf(WorkspaceACLUpdate.class))).thenReturn(new WorkspaceACLUpdateResponseList());
workspacesController.shareWorkspace(workspace.getNamespace(), workspace.getName(), shareWorkspaceRequest);
stubGetWorkspace(workspace.getNamespace(), workspace.getName(), LOGGED_IN_USER_EMAIL, WorkspaceAccessLevel.OWNER);
CloneWorkspaceRequest req = new CloneWorkspaceRequest();
Workspace modWorkspace = new Workspace();
modWorkspace.setName("cloned");
modWorkspace.setNamespace("cloned-ns");
ResearchPurpose modPurpose = new ResearchPurpose();
modPurpose.setAncestry(true);
modWorkspace.setResearchPurpose(modPurpose);
req.setWorkspace(modWorkspace);
stubGetWorkspace(modWorkspace.getNamespace(), modWorkspace.getName(), LOGGED_IN_USER_EMAIL, WorkspaceAccessLevel.OWNER);
Workspace workspace2 = workspacesController.cloneWorkspace(workspace.getNamespace(), workspace.getId(), req).getBody().getWorkspace();
assertWithMessage("get and clone responses are inconsistent").that(workspace2).isEqualTo(workspacesController.getWorkspace(workspace2.getNamespace(), workspace2.getId()).getBody().getWorkspace());
assertThat(workspace2.getName()).isEqualTo(modWorkspace.getName());
assertThat(workspace2.getNamespace()).isEqualTo(modWorkspace.getNamespace());
assertThat(workspace2.getResearchPurpose()).isEqualTo(modPurpose);
// Original description should have been copied.
assertThat(workspace2.getDescription()).isEqualTo(workspace.getDescription());
// User roles should *not* be copied.
assertThat(workspace2.getUserRoles().size()).isEqualTo(1);
assertThat(workspace2.getUserRoles().get(0).getRole()).isEqualTo(WorkspaceAccessLevel.OWNER);
}
use of org.pmiops.workbench.model.Workspace in project workbench by all-of-us.
the class WorkspacesControllerTest method testCloneWithMassiveNotebook.
@Test(expected = FailedPreconditionException.class)
public void testCloneWithMassiveNotebook() throws Exception {
Workspace workspace = createDefaultWorkspace();
workspace = workspacesController.createWorkspace(workspace).getBody();
stubGetWorkspace(workspace.getNamespace(), workspace.getName(), LOGGED_IN_USER_EMAIL, WorkspaceAccessLevel.OWNER);
CloneWorkspaceRequest req = new CloneWorkspaceRequest();
Workspace modWorkspace = new Workspace();
modWorkspace.setName("cloned");
modWorkspace.setNamespace("cloned-ns");
ResearchPurpose modPurpose = new ResearchPurpose();
modPurpose.setAncestry(true);
modWorkspace.setResearchPurpose(modPurpose);
req.setWorkspace(modWorkspace);
org.pmiops.workbench.firecloud.model.Workspace fcWorkspace = createFcWorkspace(modWorkspace.getNamespace(), modWorkspace.getName(), LOGGED_IN_USER_EMAIL);
fcWorkspace.setBucketName("bucket2");
stubGetWorkspace(fcWorkspace, WorkspaceAccessLevel.OWNER);
Blob bigNotebook = mockBlob(BUCKET_NAME, "notebooks/nb.ipynb");
// 5 GB.
when(bigNotebook.getSize()).thenReturn(5_000_000_000L);
when(cloudStorageService.getBlobList(BUCKET_NAME, "notebooks")).thenReturn(ImmutableList.of(bigNotebook));
workspacesController.cloneWorkspace(workspace.getNamespace(), workspace.getId(), req).getBody().getWorkspace();
}
use of org.pmiops.workbench.model.Workspace in project workbench by all-of-us.
the class WorkspacesControllerTest method testUpdateWorkspaceInvalidEtagsThrow.
@Test
public void testUpdateWorkspaceInvalidEtagsThrow() throws Exception {
Workspace ws = createDefaultWorkspace();
ws = workspacesController.createWorkspace(ws).getBody();
// TODO: Refactor to be a @Parameterized test case.
List<String> cases = ImmutableList.of("", "hello, world", "\"\"", "\"\"1234\"\"", "\"-1\"");
for (String etag : cases) {
try {
stubGetWorkspace(ws.getNamespace(), ws.getId(), ws.getCreator(), WorkspaceAccessLevel.OWNER);
UpdateWorkspaceRequest request = new UpdateWorkspaceRequest();
request.setWorkspace(new Workspace().name("updated-name").etag(etag));
workspacesController.updateWorkspace(ws.getNamespace(), ws.getId(), request);
fail(String.format("expected BadRequestException for etag: %s", etag));
} catch (BadRequestException e) {
// expected
}
}
}
Aggregations