Close ObjectReaders in tests
Change-Id: Ic839af4f85861fb48091d45679e2a614f001d770 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
This commit is contained in:
parent
123634e2aa
commit
c020848dbb
|
@ -92,12 +92,14 @@ public void testInserterDiscardsPack() throws IOException {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadFromInserterSmallObjects() throws IOException {
|
public void testReadFromInserterSmallObjects() throws IOException {
|
||||||
ObjectInserter ins = db.newObjectInserter();
|
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
Constants.encode("foo"));
|
||||||
|
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||||
|
Constants.encode("bar"));
|
||||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
ObjectReader reader = ins.newReader();
|
try (ObjectReader reader = ins.newReader()) {
|
||||||
assertSame(ins, reader.getCreatedFromInserter());
|
assertSame(ins, reader.getCreatedFromInserter());
|
||||||
assertEquals("foo", readString(reader.open(id1)));
|
assertEquals("foo", readString(reader.open(id1)));
|
||||||
assertEquals("bar", readString(reader.open(id2)));
|
assertEquals("bar", readString(reader.open(id2)));
|
||||||
|
@ -105,6 +107,8 @@ public void testReadFromInserterSmallObjects() throws IOException {
|
||||||
ins.flush();
|
ins.flush();
|
||||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadFromInserterLargerObjects() throws IOException {
|
public void testReadFromInserterLargerObjects() throws IOException {
|
||||||
|
@ -114,17 +118,19 @@ public void testReadFromInserterLargerObjects() throws IOException {
|
||||||
.setBlockLimit(2048));
|
.setBlockLimit(2048));
|
||||||
|
|
||||||
byte[] data = new TestRng(JGitTestUtil.getName()).nextBytes(8192);
|
byte[] data = new TestRng(JGitTestUtil.getName()).nextBytes(8192);
|
||||||
DfsInserter ins = (DfsInserter) db.newObjectInserter();
|
try (DfsInserter ins = (DfsInserter) db.newObjectInserter()) {
|
||||||
ins.setCompressionLevel(Deflater.NO_COMPRESSION);
|
ins.setCompressionLevel(Deflater.NO_COMPRESSION);
|
||||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, data);
|
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, data);
|
||||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
ObjectReader reader = ins.newReader();
|
try (ObjectReader reader = ins.newReader()) {
|
||||||
assertSame(ins, reader.getCreatedFromInserter());
|
assertSame(ins, reader.getCreatedFromInserter());
|
||||||
assertTrue(Arrays.equals(data, readStream(reader.open(id1))));
|
assertTrue(Arrays.equals(data, readStream(reader.open(id1))));
|
||||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||||
|
}
|
||||||
ins.flush();
|
ins.flush();
|
||||||
|
|
||||||
|
}
|
||||||
List<DfsPackDescription> packs = db.getObjectDatabase().listPacks();
|
List<DfsPackDescription> packs = db.getObjectDatabase().listPacks();
|
||||||
assertEquals(1, packs.size());
|
assertEquals(1, packs.size());
|
||||||
assertTrue(packs.get(0).getFileSize(PackExt.PACK) > 2048);
|
assertTrue(packs.get(0).getFileSize(PackExt.PACK) > 2048);
|
||||||
|
@ -132,32 +138,38 @@ public void testReadFromInserterLargerObjects() throws IOException {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadFromFallback() throws IOException {
|
public void testReadFromFallback() throws IOException {
|
||||||
ObjectInserter ins = db.newObjectInserter();
|
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||||
|
Constants.encode("foo"));
|
||||||
ins.flush();
|
ins.flush();
|
||||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||||
|
Constants.encode("bar"));
|
||||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
ObjectReader reader = ins.newReader();
|
try (ObjectReader reader = ins.newReader()) {
|
||||||
assertSame(ins, reader.getCreatedFromInserter());
|
assertSame(ins, reader.getCreatedFromInserter());
|
||||||
assertEquals("foo", readString(reader.open(id1)));
|
assertEquals("foo", readString(reader.open(id1)));
|
||||||
assertEquals("bar", readString(reader.open(id2)));
|
assertEquals("bar", readString(reader.open(id2)));
|
||||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||||
|
}
|
||||||
ins.flush();
|
ins.flush();
|
||||||
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReaderResolve() throws IOException {
|
public void testReaderResolve() throws IOException {
|
||||||
ObjectInserter ins = db.newObjectInserter();
|
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||||
|
Constants.encode("foo"));
|
||||||
ins.flush();
|
ins.flush();
|
||||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||||
|
Constants.encode("bar"));
|
||||||
String abbr1 = ObjectId.toString(id1).substring(0, 4);
|
String abbr1 = ObjectId.toString(id1).substring(0, 4);
|
||||||
String abbr2 = ObjectId.toString(id2).substring(0, 4);
|
String abbr2 = ObjectId.toString(id2).substring(0, 4);
|
||||||
assertFalse(abbr1.equals(abbr2));
|
assertFalse(abbr1.equals(abbr2));
|
||||||
|
|
||||||
ObjectReader reader = ins.newReader();
|
try (ObjectReader reader = ins.newReader()) {
|
||||||
assertSame(ins, reader.getCreatedFromInserter());
|
assertSame(ins, reader.getCreatedFromInserter());
|
||||||
Collection<ObjectId> objs;
|
Collection<ObjectId> objs;
|
||||||
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr1));
|
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr1));
|
||||||
|
@ -168,12 +180,16 @@ public void testReaderResolve() throws IOException {
|
||||||
assertEquals(1, objs.size());
|
assertEquals(1, objs.size());
|
||||||
assertEquals(id2, objs.iterator().next());
|
assertEquals(id2, objs.iterator().next());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGarbageSelectivelyVisible() throws IOException {
|
public void testGarbageSelectivelyVisible() throws IOException {
|
||||||
ObjectInserter ins = db.newObjectInserter();
|
ObjectId fooId;
|
||||||
ObjectId fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||||
|
fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||||
ins.flush();
|
ins.flush();
|
||||||
|
}
|
||||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
// Make pack 0 garbage.
|
// Make pack 0 garbage.
|
||||||
|
@ -187,13 +203,15 @@ public void testGarbageSelectivelyVisible() throws IOException {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInserterIgnoresUnreachable() throws IOException {
|
public void testInserterIgnoresUnreachable() throws IOException {
|
||||||
ObjectInserter ins = db.newObjectInserter();
|
ObjectId fooId;
|
||||||
ObjectId fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||||
|
fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||||
ins.flush();
|
ins.flush();
|
||||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
// Make pack 0 garbage.
|
// Make pack 0 garbage.
|
||||||
db.getObjectDatabase().listPacks().get(0).setPackSource(PackSource.UNREACHABLE_GARBAGE);
|
db.getObjectDatabase().listPacks().get(0)
|
||||||
|
.setPackSource(PackSource.UNREACHABLE_GARBAGE);
|
||||||
|
|
||||||
// We shouldn't be able to see foo because it's garbage.
|
// We shouldn't be able to see foo because it's garbage.
|
||||||
assertFalse(db.getObjectDatabase().has(fooId, true));
|
assertFalse(db.getObjectDatabase().has(fooId, true));
|
||||||
|
@ -201,10 +219,11 @@ public void testInserterIgnoresUnreachable() throws IOException {
|
||||||
// But if we re-insert foo, it should become visible again.
|
// But if we re-insert foo, it should become visible again.
|
||||||
ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||||
ins.flush();
|
ins.flush();
|
||||||
|
}
|
||||||
assertTrue(db.getObjectDatabase().has(fooId, true));
|
assertTrue(db.getObjectDatabase().has(fooId, true));
|
||||||
|
|
||||||
// Verify that we have a foo in both packs, and 1 of them is garbage.
|
// Verify that we have a foo in both packs, and 1 of them is garbage.
|
||||||
DfsReader reader = new DfsReader(db.getObjectDatabase());
|
try (DfsReader reader = new DfsReader(db.getObjectDatabase())) {
|
||||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||||
Set<PackSource> pack_sources = new HashSet<>();
|
Set<PackSource> pack_sources = new HashSet<>();
|
||||||
|
|
||||||
|
@ -218,6 +237,7 @@ public void testInserterIgnoresUnreachable() throws IOException {
|
||||||
assertTrue(pack_sources.contains(PackSource.UNREACHABLE_GARBAGE));
|
assertTrue(pack_sources.contains(PackSource.UNREACHABLE_GARBAGE));
|
||||||
assertTrue(pack_sources.contains(PackSource.INSERT));
|
assertTrue(pack_sources.contains(PackSource.INSERT));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNoCheckExisting() throws IOException {
|
public void testNoCheckExisting() throws IOException {
|
||||||
|
@ -237,18 +257,21 @@ public void testNoCheckExisting() throws IOException {
|
||||||
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
||||||
|
|
||||||
// Verify that we have a foo in both INSERT packs.
|
// Verify that we have a foo in both INSERT packs.
|
||||||
DfsReader reader = new DfsReader(db.getObjectDatabase());
|
try (DfsReader reader = new DfsReader(db.getObjectDatabase())) {
|
||||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||||
|
|
||||||
assertEquals(2, packs.length);
|
assertEquals(2, packs.length);
|
||||||
DfsPackFile p1 = packs[0];
|
DfsPackFile p1 = packs[0];
|
||||||
assertEquals(PackSource.INSERT, p1.getPackDescription().getPackSource());
|
assertEquals(PackSource.INSERT,
|
||||||
|
p1.getPackDescription().getPackSource());
|
||||||
assertTrue(p1.hasObject(reader, fooId));
|
assertTrue(p1.hasObject(reader, fooId));
|
||||||
|
|
||||||
DfsPackFile p2 = packs[1];
|
DfsPackFile p2 = packs[1];
|
||||||
assertEquals(PackSource.INSERT, p2.getPackDescription().getPackSource());
|
assertEquals(PackSource.INSERT,
|
||||||
|
p2.getPackDescription().getPackSource());
|
||||||
assertTrue(p2.hasObject(reader, fooId));
|
assertTrue(p2.hasObject(reader, fooId));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static String readString(ObjectLoader loader) throws IOException {
|
private static String readString(ObjectLoader loader) throws IOException {
|
||||||
return RawParseUtils.decode(readStream(loader));
|
return RawParseUtils.decode(readStream(loader));
|
||||||
|
|
|
@ -881,9 +881,9 @@ private String contentAsString(Repository r, ObjectId treeId, String path)
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
ObjectReader or = r.newObjectReader();
|
try (ObjectReader or = r.newObjectReader();
|
||||||
try (BufferedReader br = new BufferedReader(
|
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||||
new InputStreamReader(or.open(blobId).openStream(), UTF_8))) {
|
or.open(blobId).openStream(), UTF_8))) {
|
||||||
String line;
|
String line;
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
while ((line = br.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
|
|
|
@ -65,13 +65,14 @@ public void testAtEOF() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testCreateSubtreeIterator() throws Exception {
|
public void testCreateSubtreeIterator() throws Exception {
|
||||||
final EmptyTreeIterator etp = new EmptyTreeIterator();
|
final EmptyTreeIterator etp = new EmptyTreeIterator();
|
||||||
final ObjectReader reader = db.newObjectReader();
|
try (ObjectReader reader = db.newObjectReader()) {
|
||||||
final AbstractTreeIterator sub = etp.createSubtreeIterator(reader);
|
final AbstractTreeIterator sub = etp.createSubtreeIterator(reader);
|
||||||
assertNotNull(sub);
|
assertNotNull(sub);
|
||||||
assertTrue(sub.first());
|
assertTrue(sub.first());
|
||||||
assertTrue(sub.eof());
|
assertTrue(sub.eof());
|
||||||
assertTrue(sub instanceof EmptyTreeIterator);
|
assertTrue(sub instanceof EmptyTreeIterator);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testEntryObjectId() throws Exception {
|
public void testEntryObjectId() throws Exception {
|
||||||
|
@ -121,8 +122,9 @@ public void stopWalk() {
|
||||||
called[0] = true;
|
called[0] = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
final ObjectReader reader = db.newObjectReader();
|
try (ObjectReader reader = db.newObjectReader()) {
|
||||||
parent.createSubtreeIterator(reader).stopWalk();
|
parent.createSubtreeIterator(reader).stopWalk();
|
||||||
|
}
|
||||||
assertTrue(called[0]);
|
assertTrue(called[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -217,7 +217,7 @@ public void testSimpleIterate() throws Exception {
|
||||||
assertFalse(top.eof());
|
assertFalse(top.eof());
|
||||||
assertEquals(FileMode.TREE.getBits(), top.mode);
|
assertEquals(FileMode.TREE.getBits(), top.mode);
|
||||||
|
|
||||||
final ObjectReader reader = db.newObjectReader();
|
try (ObjectReader reader = db.newObjectReader()) {
|
||||||
final AbstractTreeIterator sub = top.createSubtreeIterator(reader);
|
final AbstractTreeIterator sub = top.createSubtreeIterator(reader);
|
||||||
assertTrue(sub instanceof FileTreeIterator);
|
assertTrue(sub instanceof FileTreeIterator);
|
||||||
final FileTreeIterator subfti = (FileTreeIterator) sub;
|
final FileTreeIterator subfti = (FileTreeIterator) sub;
|
||||||
|
@ -229,7 +229,6 @@ public void testSimpleIterate() throws Exception {
|
||||||
|
|
||||||
sub.next(1);
|
sub.next(1);
|
||||||
assertTrue(sub.eof());
|
assertTrue(sub.eof());
|
||||||
|
|
||||||
top.next(1);
|
top.next(1);
|
||||||
assertFalse(top.first());
|
assertFalse(top.first());
|
||||||
assertFalse(top.eof());
|
assertFalse(top.eof());
|
||||||
|
@ -241,6 +240,7 @@ public void testSimpleIterate() throws Exception {
|
||||||
top.next(1);
|
top.next(1);
|
||||||
assertTrue(top.eof());
|
assertTrue(top.eof());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testComputeFileObjectId() throws Exception {
|
public void testComputeFileObjectId() throws Exception {
|
||||||
|
|
Loading…
Reference in New Issue