use of bio.terra.model.SnapshotSummaryModel in project jade-data-repo by DataBiosphere.
the class SnapshotConnectedTest method testMinimal.
@Test
public void testMinimal() throws Exception {
DatasetSummaryModel datasetMinimalSummary = setupMinimalDataset();
String datasetName = PDAO_PREFIX + datasetMinimalSummary.getName();
BigQueryProject bigQueryProject = TestUtils.bigQueryProjectForDatasetName(datasetDao, dataLocationService, datasetMinimalSummary.getName());
long datasetParticipants = queryForCount(datasetName, "participant", bigQueryProject);
assertThat("dataset participants loaded properly", datasetParticipants, equalTo(2L));
long datasetSamples = queryForCount(datasetName, "sample", bigQueryProject);
assertThat("dataset samples loaded properly", datasetSamples, equalTo(5L));
SnapshotRequestModel snapshotRequest = makeSnapshotTestRequest(datasetMinimalSummary, "dataset-minimal-snapshot.json");
MockHttpServletResponse response = performCreateSnapshot(snapshotRequest, "");
SnapshotSummaryModel summaryModel = validateSnapshotCreated(snapshotRequest, response);
SnapshotModel snapshotModel = getTestSnapshot(summaryModel.getId(), snapshotRequest, datasetMinimalSummary);
List<TableModel> tables = snapshotModel.getTables();
Optional<TableModel> participantTable = tables.stream().filter(t -> t.getName().equals("participant")).findFirst();
Optional<TableModel> sampleTable = tables.stream().filter(t -> t.getName().equals("sample")).findFirst();
assertThat("participant table exists", participantTable.isPresent(), equalTo(true));
assertThat("sample table exists", sampleTable.isPresent(), equalTo(true));
long snapshotParticipants = queryForCount(summaryModel.getName(), "participant", bigQueryProject);
assertThat("dataset participants loaded properly", snapshotParticipants, equalTo(1L));
assertThat("participant row count matches expectation", participantTable.get().getRowCount(), equalTo(1));
long snapshotSamples = queryForCount(summaryModel.getName(), "sample", bigQueryProject);
assertThat("dataset samples loaded properly", snapshotSamples, equalTo(2L));
assertThat("sample row count matches expectation", sampleTable.get().getRowCount(), equalTo(2));
List<RelationshipModel> relationships = snapshotModel.getRelationships();
assertThat("a relationship comes back", relationships.size(), equalTo(1));
RelationshipModel relationshipModel = relationships.get(0);
assertThat("relationship name is right", relationshipModel.getName(), equalTo("participant_sample"));
assertThat("from table is right", relationshipModel.getFrom().getTable(), equalTo("participant"));
assertThat("from column is right", relationshipModel.getFrom().getColumn(), equalTo("id"));
assertThat("to table is right", relationshipModel.getTo().getTable(), equalTo("sample"));
assertThat("to column is right", relationshipModel.getTo().getColumn(), equalTo("participant_id"));
}
use of bio.terra.model.SnapshotSummaryModel in project jade-data-repo by DataBiosphere.
the class SnapshotConnectedTest method testArrayStruct.
@Test
public void testArrayStruct() throws Exception {
DatasetSummaryModel datasetArraySummary = setupArrayStructDataset();
String datasetName = PDAO_PREFIX + datasetArraySummary.getName();
BigQueryProject bigQueryProject = TestUtils.bigQueryProjectForDatasetName(datasetDao, dataLocationService, datasetArraySummary.getName());
long datasetParticipants = queryForCount(datasetName, "participant", bigQueryProject);
assertThat("dataset participants loaded properly", datasetParticipants, equalTo(2L));
long datasetSamples = queryForCount(datasetName, "sample", bigQueryProject);
assertThat("dataset samples loaded properly", datasetSamples, equalTo(5L));
SnapshotRequestModel snapshotRequest = makeSnapshotTestRequest(datasetArraySummary, "snapshot-array-struct.json");
MockHttpServletResponse response = performCreateSnapshot(snapshotRequest, "");
SnapshotSummaryModel summaryModel = validateSnapshotCreated(snapshotRequest, response);
getTestSnapshot(summaryModel.getId(), snapshotRequest, datasetArraySummary);
long snapshotParticipants = queryForCount(summaryModel.getName(), "participant", bigQueryProject);
assertThat("dataset participants loaded properly", snapshotParticipants, equalTo(2L));
long snapshotSamples = queryForCount(summaryModel.getName(), "sample", bigQueryProject);
assertThat("dataset samples loaded properly", snapshotSamples, equalTo(3L));
}
use of bio.terra.model.SnapshotSummaryModel in project jade-data-repo by DataBiosphere.
the class SnapshotConnectedTest method validateSnapshotCreated.
private SnapshotSummaryModel validateSnapshotCreated(SnapshotRequestModel snapshotRequest, MockHttpServletResponse response) throws Exception {
SnapshotSummaryModel summaryModel = connectedOperations.handleCreateSnapshotSuccessCase(response);
assertThat(summaryModel.getDescription(), equalTo(snapshotRequest.getDescription()));
assertThat(summaryModel.getName(), equalTo(snapshotRequest.getName()));
// Reset the name in the snapshot request
snapshotRequest.setName(snapshotOriginalName);
return summaryModel;
}
use of bio.terra.model.SnapshotSummaryModel in project jade-data-repo by DataBiosphere.
the class SnapshotConnectedTest method testDuplicateName.
@Test
public void testDuplicateName() throws Exception {
// create a snapshot
SnapshotRequestModel snapshotRequest = makeSnapshotTestRequest(datasetSummary, "snapshot-test-snapshot.json");
MockHttpServletResponse response = performCreateSnapshot(snapshotRequest, "_dup_");
SnapshotSummaryModel summaryModel = validateSnapshotCreated(snapshotRequest, response);
// fetch the snapshot and confirm the metadata matches the request
SnapshotModel snapshotModel = getTestSnapshot(summaryModel.getId(), snapshotRequest, datasetSummary);
assertNotNull("fetched snapshot successfully after creation", snapshotModel);
// check that the snapshot metadata row is unlocked
String exclusiveLock = snapshotDao.getExclusiveLockState(UUID.fromString(snapshotModel.getId()));
assertNull("snapshot row is unlocked", exclusiveLock);
// try to create the same snapshot again and check that it fails
snapshotRequest.setName(snapshotModel.getName());
response = performCreateSnapshot(snapshotRequest, null);
ErrorModel errorModel = handleCreateSnapshotFailureCase(response);
assertThat(response.getStatus(), equalTo(HttpStatus.BAD_REQUEST.value()));
assertThat("error message includes name conflict", errorModel.getMessage(), containsString("Snapshot name already exists"));
// delete and confirm deleted
connectedOperations.deleteTestSnapshot(snapshotModel.getId());
connectedOperations.getSnapshotExpectError(snapshotModel.getId(), HttpStatus.NOT_FOUND);
}
use of bio.terra.model.SnapshotSummaryModel in project jade-data-repo by DataBiosphere.
the class AccessTest method checkShared.
@Test
public void checkShared() throws Exception {
makeIngestTestDataset();
IngestRequestModel request = dataRepoFixtures.buildSimpleIngest("participant", "ingest-test/ingest-test-participant.json");
dataRepoFixtures.ingestJsonData(steward(), datasetId, request);
request = dataRepoFixtures.buildSimpleIngest("sample", "ingest-test/ingest-test-sample.json");
dataRepoFixtures.ingestJsonData(steward(), datasetId, request);
DatasetModel dataset = dataRepoFixtures.getDataset(steward(), datasetId);
String datasetBqSnapshotName = "datarepo_" + dataset.getName();
BigQuery custodianBigQuery = BigQueryFixtures.getBigQuery(dataset.getDataProject(), custodianToken);
try {
BigQueryFixtures.datasetExists(custodianBigQuery, dataset.getDataProject(), datasetBqSnapshotName);
fail("custodian shouldn't be able to access bq dataset before it is shared with them");
} catch (IllegalStateException e) {
assertThat("checking message for pdao exception error", e.getMessage(), equalTo("existence check failed for " + datasetBqSnapshotName));
}
dataRepoFixtures.addDatasetPolicyMember(steward(), datasetId, IamRole.CUSTODIAN, custodian().getEmail());
DataRepoResponse<EnumerateDatasetModel> enumDatasets = dataRepoFixtures.enumerateDatasetsRaw(custodian());
assertThat("Custodian is authorized to enumerate datasets", enumDatasets.getStatusCode(), equalTo(HttpStatus.OK));
boolean custodianHasAccess = BigQueryFixtures.hasAccess(custodianBigQuery, dataset.getDataProject(), datasetBqSnapshotName);
assertThat("custodian can access the bq snapshot after it has been shared", custodianHasAccess, equalTo(true));
SnapshotSummaryModel snapshotSummaryModel = dataRepoFixtures.createSnapshot(custodian(), datasetSummaryModel, "ingest-test-snapshot.json");
SnapshotModel snapshotModel = dataRepoFixtures.getSnapshot(custodian(), snapshotSummaryModel.getId());
BigQuery bigQuery = BigQueryFixtures.getBigQuery(snapshotModel.getDataProject(), readerToken);
try {
BigQueryFixtures.datasetExists(bigQuery, snapshotModel.getDataProject(), snapshotModel.getName());
fail("reader shouldn't be able to access bq dataset before it is shared with them");
} catch (IllegalStateException e) {
assertThat("checking message for exception error", e.getMessage(), equalTo("existence check failed for ".concat(snapshotSummaryModel.getName())));
}
dataRepoFixtures.addSnapshotPolicyMember(custodian(), snapshotSummaryModel.getId(), IamRole.READER, reader().getEmail());
AuthenticatedUserRequest authenticatedReaderRequest = new AuthenticatedUserRequest().email(reader().getEmail()).token(Optional.of(readerToken));
assertThat("correctly added reader", iamService.isAuthorized(authenticatedReaderRequest, IamResourceType.DATASNAPSHOT, snapshotSummaryModel.getId(), IamAction.READ_DATA), equalTo(true));
boolean readerHasAccess = BigQueryFixtures.hasAccess(bigQuery, snapshotModel.getDataProject(), snapshotModel.getName());
assertThat("reader can access the snapshot after it has been shared", readerHasAccess, equalTo(true));
}
Aggregations