|
|
|
@ -286,6 +286,123 @@ public class MergedReftableTest {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void nonOverlappedUpdateIndices() throws IOException { |
|
|
|
|
ByteArrayOutputStream buf = new ByteArrayOutputStream(); |
|
|
|
|
ReftableWriter writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(1) |
|
|
|
|
.setMaxUpdateIndex(2) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 1), 1); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 2), 2); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] base = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
buf = new ByteArrayOutputStream(); |
|
|
|
|
writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(3) |
|
|
|
|
.setMaxUpdateIndex(4) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 10), 3); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 20), 4); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] delta = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
MergedReftable mr = merge(base, delta); |
|
|
|
|
assertEquals(1, mr.minUpdateIndex()); |
|
|
|
|
assertEquals(4, mr.maxUpdateIndex()); |
|
|
|
|
|
|
|
|
|
try (RefCursor rc = mr.allRefs()) { |
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/a", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(10), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(3, rc.getRef().getUpdateIndex()); |
|
|
|
|
|
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/b", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(20), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(4, rc.getRef().getUpdateIndex()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void overlappedUpdateIndices() throws IOException { |
|
|
|
|
ByteArrayOutputStream buf = new ByteArrayOutputStream(); |
|
|
|
|
ReftableWriter writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(1) |
|
|
|
|
.setMaxUpdateIndex(3) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 1), 1); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 2), 3); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] base = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
buf = new ByteArrayOutputStream(); |
|
|
|
|
writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(2) |
|
|
|
|
.setMaxUpdateIndex(4) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 10), 2); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 20), 4); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] delta = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
MergedReftable mr = merge(base, delta); |
|
|
|
|
assertEquals(1, mr.minUpdateIndex()); |
|
|
|
|
assertEquals(4, mr.maxUpdateIndex()); |
|
|
|
|
|
|
|
|
|
try (RefCursor rc = mr.allRefs()) { |
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/a", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(10), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(2, rc.getRef().getUpdateIndex()); |
|
|
|
|
|
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/b", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(20), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(4, rc.getRef().getUpdateIndex()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void enclosedUpdateIndices() throws IOException { |
|
|
|
|
ByteArrayOutputStream buf = new ByteArrayOutputStream(); |
|
|
|
|
ReftableWriter writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(1) |
|
|
|
|
.setMaxUpdateIndex(4) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 1), 1); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 20), 4); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] base = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
buf = new ByteArrayOutputStream(); |
|
|
|
|
writer = new ReftableWriter(buf) |
|
|
|
|
.setMinUpdateIndex(2) |
|
|
|
|
.setMaxUpdateIndex(3) |
|
|
|
|
.begin(); |
|
|
|
|
writer.writeRef(ref("refs/heads/a", 10), 2); |
|
|
|
|
writer.writeRef(ref("refs/heads/b", 2), 3); |
|
|
|
|
writer.finish(); |
|
|
|
|
byte[] delta = buf.toByteArray(); |
|
|
|
|
|
|
|
|
|
MergedReftable mr = merge(base, delta); |
|
|
|
|
assertEquals(1, mr.minUpdateIndex()); |
|
|
|
|
assertEquals(4, mr.maxUpdateIndex()); |
|
|
|
|
|
|
|
|
|
try (RefCursor rc = mr.allRefs()) { |
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/a", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(10), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(2, rc.getRef().getUpdateIndex()); |
|
|
|
|
|
|
|
|
|
assertTrue(rc.next()); |
|
|
|
|
assertEquals("refs/heads/b", rc.getRef().getName()); |
|
|
|
|
assertEquals(id(20), rc.getRef().getObjectId()); |
|
|
|
|
assertEquals(4, rc.getRef().getUpdateIndex()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
public void compaction() throws IOException { |
|
|
|
|
List<Ref> delta1 = Arrays.asList( |
|
|
|
|