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,18 +92,22 @@ public void testInserterDiscardsPack() throws IOException {
|
|||
|
||||
@Test
|
||||
public void testReadFromInserterSmallObjects() throws IOException {
|
||||
ObjectInserter ins = db.newObjectInserter();
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("foo"));
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("bar"));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
ObjectReader reader = ins.newReader();
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertEquals("foo", readString(reader.open(id1)));
|
||||
assertEquals("bar", readString(reader.open(id2)));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
ins.flush();
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
try (ObjectReader reader = ins.newReader()) {
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertEquals("foo", readString(reader.open(id1)));
|
||||
assertEquals("bar", readString(reader.open(id2)));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
ins.flush();
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -114,17 +118,19 @@ public void testReadFromInserterLargerObjects() throws IOException {
|
|||
.setBlockLimit(2048));
|
||||
|
||||
byte[] data = new TestRng(JGitTestUtil.getName()).nextBytes(8192);
|
||||
DfsInserter ins = (DfsInserter) db.newObjectInserter();
|
||||
ins.setCompressionLevel(Deflater.NO_COMPRESSION);
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, data);
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
try (DfsInserter ins = (DfsInserter) db.newObjectInserter()) {
|
||||
ins.setCompressionLevel(Deflater.NO_COMPRESSION);
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, data);
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
ObjectReader reader = ins.newReader();
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertTrue(Arrays.equals(data, readStream(reader.open(id1))));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
ins.flush();
|
||||
try (ObjectReader reader = ins.newReader()) {
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertTrue(Arrays.equals(data, readStream(reader.open(id1))));
|
||||
assertEquals(0, db.getObjectDatabase().listPacks().size());
|
||||
}
|
||||
ins.flush();
|
||||
|
||||
}
|
||||
List<DfsPackDescription> packs = db.getObjectDatabase().listPacks();
|
||||
assertEquals(1, packs.size());
|
||||
assertTrue(packs.get(0).getFileSize(PackExt.PACK) > 2048);
|
||||
|
@ -132,48 +138,58 @@ public void testReadFromInserterLargerObjects() throws IOException {
|
|||
|
||||
@Test
|
||||
public void testReadFromFallback() throws IOException {
|
||||
ObjectInserter ins = db.newObjectInserter();
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("foo"));
|
||||
ins.flush();
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("bar"));
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
ObjectReader reader = ins.newReader();
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertEquals("foo", readString(reader.open(id1)));
|
||||
assertEquals("bar", readString(reader.open(id2)));
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
ins.flush();
|
||||
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
||||
try (ObjectReader reader = ins.newReader()) {
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
assertEquals("foo", readString(reader.open(id1)));
|
||||
assertEquals("bar", readString(reader.open(id2)));
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
}
|
||||
ins.flush();
|
||||
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReaderResolve() throws IOException {
|
||||
ObjectInserter ins = db.newObjectInserter();
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB, Constants.encode("bar"));
|
||||
String abbr1 = ObjectId.toString(id1).substring(0, 4);
|
||||
String abbr2 = ObjectId.toString(id2).substring(0, 4);
|
||||
assertFalse(abbr1.equals(abbr2));
|
||||
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||
ObjectId id1 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("foo"));
|
||||
ins.flush();
|
||||
ObjectId id2 = ins.insert(Constants.OBJ_BLOB,
|
||||
Constants.encode("bar"));
|
||||
String abbr1 = ObjectId.toString(id1).substring(0, 4);
|
||||
String abbr2 = ObjectId.toString(id2).substring(0, 4);
|
||||
assertFalse(abbr1.equals(abbr2));
|
||||
|
||||
ObjectReader reader = ins.newReader();
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
Collection<ObjectId> objs;
|
||||
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr1));
|
||||
assertEquals(1, objs.size());
|
||||
assertEquals(id1, objs.iterator().next());
|
||||
try (ObjectReader reader = ins.newReader()) {
|
||||
assertSame(ins, reader.getCreatedFromInserter());
|
||||
Collection<ObjectId> objs;
|
||||
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr1));
|
||||
assertEquals(1, objs.size());
|
||||
assertEquals(id1, objs.iterator().next());
|
||||
|
||||
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr2));
|
||||
assertEquals(1, objs.size());
|
||||
assertEquals(id2, objs.iterator().next());
|
||||
objs = reader.resolve(AbbreviatedObjectId.fromString(abbr2));
|
||||
assertEquals(1, objs.size());
|
||||
assertEquals(id2, objs.iterator().next());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGarbageSelectivelyVisible() throws IOException {
|
||||
ObjectInserter ins = db.newObjectInserter();
|
||||
ObjectId fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
ObjectId fooId;
|
||||
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||
fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
}
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
// Make pack 0 garbage.
|
||||
|
@ -187,36 +203,40 @@ public void testGarbageSelectivelyVisible() throws IOException {
|
|||
|
||||
@Test
|
||||
public void testInserterIgnoresUnreachable() throws IOException {
|
||||
ObjectInserter ins = db.newObjectInserter();
|
||||
ObjectId fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
ObjectId fooId;
|
||||
try (ObjectInserter ins = db.newObjectInserter()) {
|
||||
fooId = ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
assertEquals(1, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
// Make pack 0 garbage.
|
||||
db.getObjectDatabase().listPacks().get(0).setPackSource(PackSource.UNREACHABLE_GARBAGE);
|
||||
// Make pack 0 garbage.
|
||||
db.getObjectDatabase().listPacks().get(0)
|
||||
.setPackSource(PackSource.UNREACHABLE_GARBAGE);
|
||||
|
||||
// We shouldn't be able to see foo because it's garbage.
|
||||
assertFalse(db.getObjectDatabase().has(fooId, true));
|
||||
// We shouldn't be able to see foo because it's garbage.
|
||||
assertFalse(db.getObjectDatabase().has(fooId, true));
|
||||
|
||||
// But if we re-insert foo, it should become visible again.
|
||||
ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
// But if we re-insert foo, it should become visible again.
|
||||
ins.insert(Constants.OBJ_BLOB, Constants.encode("foo"));
|
||||
ins.flush();
|
||||
}
|
||||
assertTrue(db.getObjectDatabase().has(fooId, true));
|
||||
|
||||
// Verify that we have a foo in both packs, and 1 of them is garbage.
|
||||
DfsReader reader = new DfsReader(db.getObjectDatabase());
|
||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||
Set<PackSource> pack_sources = new HashSet<>();
|
||||
try (DfsReader reader = new DfsReader(db.getObjectDatabase())) {
|
||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||
Set<PackSource> pack_sources = new HashSet<>();
|
||||
|
||||
assertEquals(2, packs.length);
|
||||
assertEquals(2, packs.length);
|
||||
|
||||
pack_sources.add(packs[0].getPackDescription().getPackSource());
|
||||
pack_sources.add(packs[1].getPackDescription().getPackSource());
|
||||
pack_sources.add(packs[0].getPackDescription().getPackSource());
|
||||
pack_sources.add(packs[1].getPackDescription().getPackSource());
|
||||
|
||||
assertTrue(packs[0].hasObject(reader, fooId));
|
||||
assertTrue(packs[1].hasObject(reader, fooId));
|
||||
assertTrue(pack_sources.contains(PackSource.UNREACHABLE_GARBAGE));
|
||||
assertTrue(pack_sources.contains(PackSource.INSERT));
|
||||
assertTrue(packs[0].hasObject(reader, fooId));
|
||||
assertTrue(packs[1].hasObject(reader, fooId));
|
||||
assertTrue(pack_sources.contains(PackSource.UNREACHABLE_GARBAGE));
|
||||
assertTrue(pack_sources.contains(PackSource.INSERT));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -237,17 +257,20 @@ public void testNoCheckExisting() throws IOException {
|
|||
assertEquals(2, db.getObjectDatabase().listPacks().size());
|
||||
|
||||
// Verify that we have a foo in both INSERT packs.
|
||||
DfsReader reader = new DfsReader(db.getObjectDatabase());
|
||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||
try (DfsReader reader = new DfsReader(db.getObjectDatabase())) {
|
||||
DfsPackFile packs[] = db.getObjectDatabase().getPacks();
|
||||
|
||||
assertEquals(2, packs.length);
|
||||
DfsPackFile p1 = packs[0];
|
||||
assertEquals(PackSource.INSERT, p1.getPackDescription().getPackSource());
|
||||
assertTrue(p1.hasObject(reader, fooId));
|
||||
assertEquals(2, packs.length);
|
||||
DfsPackFile p1 = packs[0];
|
||||
assertEquals(PackSource.INSERT,
|
||||
p1.getPackDescription().getPackSource());
|
||||
assertTrue(p1.hasObject(reader, fooId));
|
||||
|
||||
DfsPackFile p2 = packs[1];
|
||||
assertEquals(PackSource.INSERT, p2.getPackDescription().getPackSource());
|
||||
assertTrue(p2.hasObject(reader, fooId));
|
||||
DfsPackFile p2 = packs[1];
|
||||
assertEquals(PackSource.INSERT,
|
||||
p2.getPackDescription().getPackSource());
|
||||
assertTrue(p2.hasObject(reader, fooId));
|
||||
}
|
||||
}
|
||||
|
||||
private static String readString(ObjectLoader loader) throws IOException {
|
||||
|
|
|
@ -881,9 +881,9 @@ private String contentAsString(Repository r, ObjectId treeId, String path)
|
|||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
ObjectReader or = r.newObjectReader();
|
||||
try (BufferedReader br = new BufferedReader(
|
||||
new InputStreamReader(or.open(blobId).openStream(), UTF_8))) {
|
||||
try (ObjectReader or = r.newObjectReader();
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(
|
||||
or.open(blobId).openStream(), UTF_8))) {
|
||||
String line;
|
||||
boolean first = true;
|
||||
while ((line = br.readLine()) != null) {
|
||||
|
|
|
@ -65,12 +65,13 @@ public void testAtEOF() throws Exception {
|
|||
@Test
|
||||
public void testCreateSubtreeIterator() throws Exception {
|
||||
final EmptyTreeIterator etp = new EmptyTreeIterator();
|
||||
final ObjectReader reader = db.newObjectReader();
|
||||
final AbstractTreeIterator sub = etp.createSubtreeIterator(reader);
|
||||
assertNotNull(sub);
|
||||
assertTrue(sub.first());
|
||||
assertTrue(sub.eof());
|
||||
assertTrue(sub instanceof EmptyTreeIterator);
|
||||
try (ObjectReader reader = db.newObjectReader()) {
|
||||
final AbstractTreeIterator sub = etp.createSubtreeIterator(reader);
|
||||
assertNotNull(sub);
|
||||
assertTrue(sub.first());
|
||||
assertTrue(sub.eof());
|
||||
assertTrue(sub instanceof EmptyTreeIterator);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -121,8 +122,9 @@ public void stopWalk() {
|
|||
called[0] = true;
|
||||
}
|
||||
};
|
||||
final ObjectReader reader = db.newObjectReader();
|
||||
parent.createSubtreeIterator(reader).stopWalk();
|
||||
try (ObjectReader reader = db.newObjectReader()) {
|
||||
parent.createSubtreeIterator(reader).stopWalk();
|
||||
}
|
||||
assertTrue(called[0]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -217,29 +217,29 @@ public void testSimpleIterate() throws Exception {
|
|||
assertFalse(top.eof());
|
||||
assertEquals(FileMode.TREE.getBits(), top.mode);
|
||||
|
||||
final ObjectReader reader = db.newObjectReader();
|
||||
final AbstractTreeIterator sub = top.createSubtreeIterator(reader);
|
||||
assertTrue(sub instanceof FileTreeIterator);
|
||||
final FileTreeIterator subfti = (FileTreeIterator) sub;
|
||||
assertTrue(sub.first());
|
||||
assertFalse(sub.eof());
|
||||
assertEquals(paths[2], nameOf(sub));
|
||||
assertEquals(paths[2].length(), subfti.getEntryLength());
|
||||
assertEquals(mtime[2], subfti.getEntryLastModifiedInstant());
|
||||
try (ObjectReader reader = db.newObjectReader()) {
|
||||
final AbstractTreeIterator sub = top.createSubtreeIterator(reader);
|
||||
assertTrue(sub instanceof FileTreeIterator);
|
||||
final FileTreeIterator subfti = (FileTreeIterator) sub;
|
||||
assertTrue(sub.first());
|
||||
assertFalse(sub.eof());
|
||||
assertEquals(paths[2], nameOf(sub));
|
||||
assertEquals(paths[2].length(), subfti.getEntryLength());
|
||||
assertEquals(mtime[2], subfti.getEntryLastModifiedInstant());
|
||||
|
||||
sub.next(1);
|
||||
assertTrue(sub.eof());
|
||||
sub.next(1);
|
||||
assertTrue(sub.eof());
|
||||
top.next(1);
|
||||
assertFalse(top.first());
|
||||
assertFalse(top.eof());
|
||||
assertEquals(FileMode.REGULAR_FILE.getBits(), top.mode);
|
||||
assertEquals(paths[3], nameOf(top));
|
||||
assertEquals(paths[3].length(), top.getEntryLength());
|
||||
assertEquals(mtime[3], top.getEntryLastModifiedInstant());
|
||||
|
||||
top.next(1);
|
||||
assertFalse(top.first());
|
||||
assertFalse(top.eof());
|
||||
assertEquals(FileMode.REGULAR_FILE.getBits(), top.mode);
|
||||
assertEquals(paths[3], nameOf(top));
|
||||
assertEquals(paths[3].length(), top.getEntryLength());
|
||||
assertEquals(mtime[3], top.getEntryLastModifiedInstant());
|
||||
|
||||
top.next(1);
|
||||
assertTrue(top.eof());
|
||||
top.next(1);
|
||||
assertTrue(top.eof());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue