summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org/eclipse
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@google.com>2019-10-13 18:14:17 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2019-10-30 18:00:24 +0100
commit7c75a68b9635848a8231df8a1461c3f9405a55f4 (patch)
treee9b54091ddf135b501b713e839c62c00ebe808f2 /org.eclipse.jgit.test/tst/org/eclipse
parentcf11a03bc267fa86aa5dc538ff0ffc777d659c8a (diff)
downloadjgit-7c75a68b9635848a8231df8a1461c3f9405a55f4.tar.gz
jgit-7c75a68b9635848a8231df8a1461c3f9405a55f4.zip
reftable: enforce ascending order in sortAndWriteRefs
MergedReftableTest#scanDuplicates tests whether we can write duplicate keys in a merged reftable. Apparently, the first key appearing should get precedence, and this works because the sort() algorithm on ordered collections is stable. This is potentially confusing behavior, because you can write data into the table that cannot be retrieved (Merged table can only have one entry per key), and the APIs such as exactRef() only return a single value. Make this consistent with behavior introduced in I04f55c481 "reftable: enforce ordering for ref and log writes" by considering a duplicate key in sortAndWriteRefs as a fatal runtime error. Change-Id: I1eedd18f028180069f78c5c467169dcfe1521157 Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java23
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java10
2 files changed, 6 insertions, 27 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java
index 5f5ab72671..53d13f1d60 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/MergedReftableTest.java
@@ -238,29 +238,6 @@ public class MergedReftableTest {
}
@Test
- public void scanDuplicates() throws IOException {
- List<Ref> delta1 = Arrays.asList(
- ref("refs/heads/apple", 1),
- ref("refs/heads/banana", 2));
- List<Ref> delta2 = Arrays.asList(
- ref("refs/heads/apple", 3),
- ref("refs/heads/apple", 4));
-
- MergedReftable mr = merge(write(delta1, 1000), write(delta2, 2000));
- try (RefCursor rc = mr.allRefs()) {
- assertTrue(rc.next());
- assertEquals("refs/heads/apple", rc.getRef().getName());
- assertEquals(id(3), rc.getRef().getObjectId());
- assertEquals(2000, rc.getRef().getUpdateIndex());
- assertTrue(rc.next());
- assertEquals("refs/heads/banana", rc.getRef().getName());
- assertEquals(id(2), rc.getRef().getObjectId());
- assertEquals(1000, rc.getRef().getUpdateIndex());
- assertFalse(rc.next());
- }
- }
-
- @Test
public void scanIncludeDeletes() throws IOException {
List<Ref> delta1 = Arrays.asList(ref("refs/heads/next", 4));
List<Ref> delta2 = Arrays.asList(delete("refs/heads/next"));
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
index 1c04733f63..45e6c7d128 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/reftable/ReftableTest.java
@@ -421,18 +421,20 @@ public class ReftableTest {
}
@Test
- public void invalidRefWriteOrder() throws IOException {
+ public void invalidRefWriteOrderSortAndWrite() {
Ref master = ref(MASTER, 1);
- Ref next = ref(NEXT, 2);
ReftableWriter writer = new ReftableWriter(new ByteArrayOutputStream())
.setMinUpdateIndex(1)
.setMaxUpdateIndex(1)
.begin();
- writer.writeRef(next);
+ List<Ref> refs = new ArrayList<>();
+ refs.add(master);
+ refs.add(master);
+
IllegalArgumentException e = assertThrows(
IllegalArgumentException.class,
- () -> writer.writeRef(master));
+ () -> writer.sortAndWriteRefs(refs));
assertThat(e.getMessage(), containsString("records must be increasing"));
}