use of org.projectnessie.model.Branch in project nessie by projectnessie.
the class AbstractRestCommitLog method filterCommitLogByTimeRange.
@Test
public void filterCommitLogByTimeRange() throws BaseNessieClientServerException {
Branch branch = createBranch("filterCommitLogByTimeRange");
int numAuthors = 5;
int commitsPerAuthor = 10;
int expectedTotalSize = numAuthors * commitsPerAuthor;
String currentHash = branch.getHash();
createCommits(branch, numAuthors, commitsPerAuthor, currentHash);
LogResponse log = getApi().getCommitLog().refName(branch.getName()).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(expectedTotalSize);
Instant initialCommitTime = log.getLogEntries().get(log.getLogEntries().size() - 1).getCommitMeta().getCommitTime();
assertThat(initialCommitTime).isNotNull();
Instant lastCommitTime = log.getLogEntries().get(0).getCommitMeta().getCommitTime();
assertThat(lastCommitTime).isNotNull();
Instant fiveMinLater = initialCommitTime.plus(5, ChronoUnit.MINUTES);
log = getApi().getCommitLog().refName(branch.getName()).filter(String.format("timestamp(commit.commitTime) > timestamp('%s')", initialCommitTime)).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(expectedTotalSize - 1);
log.getLogEntries().forEach(commit -> assertThat(commit.getCommitMeta().getCommitTime()).isAfter(initialCommitTime));
log = getApi().getCommitLog().refName(branch.getName()).filter(String.format("timestamp(commit.commitTime) < timestamp('%s')", fiveMinLater)).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(expectedTotalSize);
log.getLogEntries().forEach(commit -> assertThat(commit.getCommitMeta().getCommitTime()).isBefore(fiveMinLater));
log = getApi().getCommitLog().refName(branch.getName()).filter(String.format("timestamp(commit.commitTime) > timestamp('%s') && timestamp(commit.commitTime) < timestamp('%s')", initialCommitTime, lastCommitTime)).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(expectedTotalSize - 2);
log.getLogEntries().forEach(commit -> assertThat(commit.getCommitMeta().getCommitTime()).isAfter(initialCommitTime).isBefore(lastCommitTime));
log = getApi().getCommitLog().refName(branch.getName()).filter(String.format("timestamp(commit.commitTime) > timestamp('%s')", fiveMinLater)).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).isEmpty();
}
use of org.projectnessie.model.Branch in project nessie by projectnessie.
the class AbstractRestCommitLog method commitLogPagingAndFilteringByAuthor.
@Test
public void commitLogPagingAndFilteringByAuthor() throws BaseNessieClientServerException {
Branch branch = createBranch("commitLogPagingAndFiltering");
int numAuthors = 3;
int commits = 45;
int pageSizeHint = 10;
int expectedTotalSize = numAuthors * commits;
createCommits(branch, numAuthors, commits, branch.getHash());
LogResponse log = getApi().getCommitLog().refName(branch.getName()).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(expectedTotalSize);
String author = "author-1";
List<String> messagesOfAuthorOne = log.getLogEntries().stream().map(LogEntry::getCommitMeta).filter(c -> author.equals(c.getAuthor())).map(CommitMeta::getMessage).collect(Collectors.toList());
verifyPaging(branch.getName(), commits, pageSizeHint, messagesOfAuthorOne, author);
List<String> allMessages = log.getLogEntries().stream().map(LogEntry::getCommitMeta).map(CommitMeta::getMessage).collect(Collectors.toList());
List<CommitMeta> completeLog = StreamingUtil.getCommitLogStream(getApi(), c -> c.refName(branch.getName()).fetch(FetchOption.MINIMAL), OptionalInt.of(pageSizeHint)).map(LogEntry::getCommitMeta).collect(Collectors.toList());
assertThat(completeLog.stream().map(CommitMeta::getMessage)).containsExactlyElementsOf(allMessages);
}
use of org.projectnessie.model.Branch in project nessie by projectnessie.
the class AbstractRestCommitLog method filterCommitLogByProperties.
@Test
public void filterCommitLogByProperties() throws BaseNessieClientServerException {
Branch branch = createBranch("filterCommitLogByProperties");
int numAuthors = 5;
int commitsPerAuthor = 10;
String currentHash = branch.getHash();
createCommits(branch, numAuthors, commitsPerAuthor, currentHash);
LogResponse log = getApi().getCommitLog().refName(branch.getName()).get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(numAuthors * commitsPerAuthor);
log = getApi().getCommitLog().refName(branch.getName()).filter("commit.properties['prop1'] == 'val1'").get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).hasSize(numAuthors * commitsPerAuthor);
log.getLogEntries().forEach(commit -> assertThat(commit.getCommitMeta().getProperties().get("prop1")).isEqualTo("val1"));
log = getApi().getCommitLog().refName(branch.getName()).filter("commit.properties['prop1'] == 'val3'").get();
assertThat(log).isNotNull();
assertThat(log.getLogEntries()).isEmpty();
}
use of org.projectnessie.model.Branch in project nessie by projectnessie.
the class AbstractRestContents method multiget.
@Test
public void multiget() throws BaseNessieClientServerException {
Branch branch = createBranch("foo");
ContentKey a = ContentKey.of("a");
ContentKey b = ContentKey.of("b");
IcebergTable ta = IcebergTable.of("path1", 42, 42, 42, 42);
IcebergTable tb = IcebergTable.of("path2", 42, 42, 42, 42);
getApi().commitMultipleOperations().branch(branch).operation(Put.of(a, ta)).commitMeta(CommitMeta.fromMessage("commit 1")).commit();
getApi().commitMultipleOperations().branch(branch).operation(Put.of(b, tb)).commitMeta(CommitMeta.fromMessage("commit 2")).commit();
Map<ContentKey, Content> response = getApi().getContent().key(a).key(b).key(ContentKey.of("noexist")).refName("foo").get();
assertThat(response).containsEntry(a, ta).containsEntry(b, tb).doesNotContainKey(ContentKey.of("noexist"));
}
use of org.projectnessie.model.Branch in project nessie by projectnessie.
the class AbstractRestDiff method testDiff.
@ParameterizedTest
@MethodSource("diffRefModes")
public void testDiff(ReferenceMode refModeFrom, ReferenceMode refModeTo) throws BaseNessieClientServerException {
int commitsPerBranch = 10;
Reference fromRef = getApi().createReference().reference(Branch.of("testDiffFromRef", null)).create();
Reference toRef = getApi().createReference().reference(Branch.of("testDiffToRef", null)).create();
String toRefHash = createCommits(toRef, 1, commitsPerBranch, toRef.getHash());
toRef = Branch.of(toRef.getName(), toRefHash);
List<DiffEntry> diffOnRefHeadResponse = getApi().getDiff().fromRef(refModeFrom.transform(fromRef)).toRef(refModeTo.transform(toRef)).get().getDiffs();
// we only committed to toRef, the "from" diff should be null
assertThat(diffOnRefHeadResponse).hasSize(commitsPerBranch).allSatisfy(diff -> {
assertThat(diff.getKey()).isNotNull();
assertThat(diff.getFrom()).isNull();
assertThat(diff.getTo()).isNotNull();
});
// Some combinations with explicit fromHashOnRef/toHashOnRef
assertThat(getApi().getDiff().fromRefName(fromRef.getName()).fromHashOnRef(fromRef.getHash()).toRefName(toRef.getName()).toHashOnRef(toRef.getHash()).get().getDiffs()).isEqualTo(diffOnRefHeadResponse);
// result
if (refModeTo != ReferenceMode.NAME_ONLY) {
Branch toRefAtFrom = Branch.of(toRef.getName(), fromRef.getHash());
assertThat(getApi().getDiff().fromRef(refModeFrom.transform(fromRef)).toRef(refModeTo.transform(toRefAtFrom)).get().getDiffs()).isEmpty();
}
// after committing to fromRef, "from/to" diffs should both have data
fromRef = Branch.of(fromRef.getName(), createCommits(fromRef, 1, commitsPerBranch, fromRef.getHash()));
assertThat(getApi().getDiff().fromRef(refModeFrom.transform(fromRef)).toRef(refModeTo.transform(toRef)).get().getDiffs()).hasSize(commitsPerBranch).allSatisfy(diff -> {
assertThat(diff.getKey()).isNotNull();
assertThat(diff.getFrom()).isNotNull();
assertThat(diff.getTo()).isNotNull();
// we only have a diff on the ID
assertThat(diff.getFrom().getId()).isNotEqualTo(diff.getTo().getId());
Optional<IcebergTable> fromTable = diff.getFrom().unwrap(IcebergTable.class);
assertThat(fromTable).isPresent();
Optional<IcebergTable> toTable = diff.getTo().unwrap(IcebergTable.class);
assertThat(toTable).isPresent();
assertThat(fromTable.get().getMetadataLocation()).isEqualTo(toTable.get().getMetadataLocation());
assertThat(fromTable.get().getSchemaId()).isEqualTo(toTable.get().getSchemaId());
assertThat(fromTable.get().getSnapshotId()).isEqualTo(toTable.get().getSnapshotId());
assertThat(fromTable.get().getSortOrderId()).isEqualTo(toTable.get().getSortOrderId());
assertThat(fromTable.get().getSpecId()).isEqualTo(toTable.get().getSpecId());
});
List<ContentKey> keys = IntStream.rangeClosed(0, commitsPerBranch).mapToObj(i -> ContentKey.of("table" + i)).collect(Collectors.toList());
// request all keys and delete the tables for them on toRef
Map<ContentKey, Content> map = getApi().getContent().refName(toRef.getName()).keys(keys).get();
for (Map.Entry<ContentKey, Content> entry : map.entrySet()) {
toRef = getApi().commitMultipleOperations().branchName(toRef.getName()).hash(toRefHash).commitMeta(CommitMeta.fromMessage("delete")).operation(Delete.of(entry.getKey())).commit();
}
// now that we deleted all tables on toRef, the diff for "to" should be null
assertThat(getApi().getDiff().fromRef(refModeFrom.transform(fromRef)).toRef(refModeTo.transform(toRef)).get().getDiffs()).hasSize(commitsPerBranch).allSatisfy(diff -> {
assertThat(diff.getKey()).isNotNull();
assertThat(diff.getFrom()).isNotNull();
assertThat(diff.getTo()).isNull();
});
}
Aggregations