package org.eclipse.jgit.internal.storage.pack; import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_DISTANT_COMMIT_SPAN; import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_RECENT_COMMIT_COUNT; import static org.eclipse.jgit.storage.pack.PackConfig.DEFAULT_BITMAP_RECENT_COMMIT_SPAN; import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder; import org.eclipse.jgit.lib.AbbreviatedObjectId; import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.storage.pack.PackConfig; import org.junit.Test; /** Tests for the {@link PackWriterBitmapPreparer}. */ public class PackWriterBitmapPreparerTest { private static class StubObjectReader extends ObjectReader { @Override public ObjectReader newReader() { return null; } @Override public Collection<ObjectId> resolve(AbbreviatedObjectId id) throws IOException { return null; } @Override public ObjectLoader open(AnyObjectId objectId, int typeHint) throws MissingObjectException, IncorrectObjectTypeException, IOException { return null; } @Override public Set<ObjectId> getShallowCommits() throws IOException { return null; } @Override public void close() { // stub } } @Test public void testNextSelectionDistanceForActiveBranch() throws Exception { PackWriterBitmapPreparer preparer = newPeparer( DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000 DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100 DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000 int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 10000, 100 }, { 20000, 100 }, { 20100, 100 }, { 20102, 102 }, { 20200, 200 }, { 22200, 2200 }, { 24999, 4999 }, { 25000, 5000 }, { 50000, 5000 }, { 1000000, 5000 }, }; for (int[] pair : distancesAndSpans) { assertEquals(pair[1], preparer.nextSpan(pair[0])); } } @Test public void testNextSelectionDistanceWithFewerRecentCommits() throws Exception { PackWriterBitmapPreparer preparer = newPeparer(1000, DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100 DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000 int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 1000, 100 }, { 1100, 100 }, { 1111, 111 }, { 2000, 1000 }, { 5999, 4999 }, { 6000, 5000 }, { 10000, 5000 }, { 50000, 5000 }, { 1000000, 5000 } }; for (int[] pair : distancesAndSpans) { assertEquals(pair[1], preparer.nextSpan(pair[0])); } } @Test public void testNextSelectionDistanceWithSmallerRecentSpan() throws Exception { PackWriterBitmapPreparer preparer = newPeparer( DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000 10, // recent span DEFAULT_BITMAP_DISTANT_COMMIT_SPAN); // 5000 int[][] distancesAndSpans = { { 0, 10 }, { 100, 10 }, { 10000, 10 }, { 20000, 10 }, { 20010, 10 }, { 20012, 12 }, { 20050, 50 }, { 20200, 200 }, { 22200, 2200 }, { 24999, 4999 }, { 25000, 5000 }, { 50000, 5000 }, { 1000000, 5000 } }; for (int[] pair : distancesAndSpans) { assertEquals(pair[1], preparer.nextSpan(pair[0])); } } @Test public void testNextSelectionDistanceWithSmallerDistantSpan() throws Exception { PackWriterBitmapPreparer preparer = newPeparer( DEFAULT_BITMAP_RECENT_COMMIT_COUNT, // 20000 DEFAULT_BITMAP_RECENT_COMMIT_SPAN, // 100 1000); int[][] distancesAndSpans = { { 0, 100 }, { 100, 100 }, { 10000, 100 }, { 20000, 100 }, { 20100, 100 }, { 20102, 102 }, { 20200, 200 }, { 20999, 999 }, { 21000, 1000 }, { 22000, 1000 }, { 25000, 1000 }, { 50000, 1000 }, { 1000000, 1000 } }; for (int[] pair : distancesAndSpans) { assertEquals(pair[1], preparer.nextSpan(pair[0])); } } private PackWriterBitmapPreparer newPeparer(int recentCount, int recentSpan, int distantSpan) throws IOException { List<ObjectToPack> objects = Collections.emptyList(); Set<ObjectId> wants = Collections.emptySet(); PackConfig config = new PackConfig(); config.setBitmapRecentCommitCount(recentCount); config.setBitmapRecentCommitSpan(recentSpan); config.setBitmapDistantCommitSpan(distantSpan); PackBitmapIndexBuilder indexBuilder = new PackBitmapIndexBuilder( objects); return new PackWriterBitmapPreparer(new StubObjectReader(), indexBuilder, null, wants, config); } }