From 92d37694970963ad6d0d5fbf4ec811630a58df90 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Sat, 18 Apr 2009 16:15:28 +0200 Subject: [EGIT PATCH 2/4] Add test cases dedicated to the WindowCache --- .../tst/org/spearce/jgit/lib/WindowCacheTest.java | 72 ++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-) create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheTest.java diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheTest.java new file mode 100644 index 0000000..a438d46 --- /dev/null +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheTest.java @@ -0,0 +1,72 @@ +package org.spearce.jgit.lib; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import org.spearce.jgit.errors.IncorrectObjectTypeException; +import org.spearce.jgit.errors.MissingObjectException; +import org.spearce.jgit.revwalk.RevObject; +import org.spearce.jgit.revwalk.RevWalk; + +public class WindowCacheTest extends RepositoryTestCase { + + public void setUp() throws Exception { + WindowCacheConfig windowCacheConfig = new WindowCacheConfig(); + windowCacheConfig.setPackedGitOpenFiles(1); + WindowCache.reconfigure(windowCacheConfig); + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + WindowCacheConfig windowCacheConfig = new WindowCacheConfig(); + WindowCache.reconfigure(windowCacheConfig); + } + + /* + * Add pack, find objects in new pack Replace packs, find objects in another + * pack than original, don't choke on lost pack + */ + public void testObjectInNewPack() throws IncorrectObjectTypeException, + IOException { + Repository extra = createNewEmptyRepo(); + RevObject o1 = writeBlob(extra, db, + "nihuioijoisuoiudyosyudoiuyusyuoiyewData"); + PackWriter packWriter = new PackWriter(extra, new TextProgressMonitor()); + packWriter.addObject(o1); + ObjectId name = packWriter.computeName(); + File packFileName = fullPackFileName(db, name, ".pack"); + FileOutputStream pos = new FileOutputStream(packFileName); + packWriter.writePack(pos); + pos.close(); + File idxfname = fullPackFileName(db, name, ".idx"); + FileOutputStream ios = new FileOutputStream(idxfname); + packWriter.writeIndex(ios); + ios.close(); + assertEquals(o1.name(), new RevWalk(db).parseAny(o1).name()); + } + + private File fullPackFileName(Repository repository, ObjectId hash, + String suffix) { + return new File(new File(repository.getObjectsDirectory(), "pack"), + "pack-" + hash.name() + suffix); + } + + private RevObject writeBlob(final Repository repo, final Repository notIn, + final String data) throws IOException { + RevWalk revWalk = new RevWalk(repo); + byte[] bytes = data.getBytes(Constants.CHARACTER_ENCODING); + ObjectId id = new ObjectWriter(repo).writeBlob(bytes.length, + new ByteArrayInputStream(bytes)); + try { + assertNull( + "Oops, We want new objects that we do not have yet, for this test!", + new RevWalk(notIn).parseAny(id)); + } catch (MissingObjectException e) { + // Ok + } + return revWalk.lookupBlob(id); + } +} -- 1.6.2.2.446.gfbdc0