aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org/eclipse/jgit
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@gmail.com>2019-03-05 10:24:34 +0900
committerDavid Pursehouse <david.pursehouse@gmail.com>2019-03-05 10:24:34 +0900
commit52179ee247b10e0dfc7fc7c5c6dfedaa378894d6 (patch)
treecb0e4e86716ac7380ec62f45133dee4fd4e17108 /org.eclipse.jgit.test/tst/org/eclipse/jgit
parentea54b6a5a7305a9b68fd7bbca45f919ba978a934 (diff)
parentc2dbdabfb9616e7d9b34ee7c35a2ace43b79a903 (diff)
downloadjgit-52179ee247b10e0dfc7fc7c5c6dfedaa378894d6.tar.gz
jgit-52179ee247b10e0dfc7fc7c5c6dfedaa378894d6.zip
Merge branch 'stable-5.2'
* stable-5.2: Fix error log message in ObjectDirectory.handlePackError() Properly format pack checksums in PackFile.idx() Cancel gc if thread was interrupted PackFile: report correct message for checksum mismatch ObjectDirectory: Clean up logging Bazel: Stop using native.git_repository Change-Id: Ib972641105cef8089791fc65389c4f43e218620a Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org/eclipse/jgit')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
index 9ea62b34d5..05f7c65fa8 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
@@ -47,27 +47,35 @@ import static java.lang.Integer.valueOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.Callable;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import org.eclipse.jgit.errors.CancelledException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.internal.storage.pack.PackWriter;
import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.EmptyProgressMonitor;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Sets;
import org.eclipse.jgit.revwalk.RevBlob;
import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
import org.junit.Test;
public class GcConcurrentTest extends GcTestCase {
@@ -221,4 +229,48 @@ public class GcConcurrentTest extends GcTestCase {
assertEquals(getSinglePack(repository).getPackName(), newPackName);
assertNotNull(getSinglePack(repository).getBitmapIndex());
}
+
+ @Test
+ public void testInterruptGc() throws Exception {
+ FileBasedConfig c = repo.getConfig();
+ c.setInt(ConfigConstants.CONFIG_GC_SECTION, null,
+ ConfigConstants.CONFIG_KEY_AUTOPACKLIMIT, 1);
+ c.save();
+ SampleDataRepositoryTestCase.copyCGitTestPacks(repo);
+ ExecutorService executor = Executors.newSingleThreadExecutor();
+ final CountDownLatch latch = new CountDownLatch(1);
+ Future<Collection<PackFile>> result = executor
+ .submit(new Callable<Collection<PackFile>>() {
+
+ @Override
+ public Collection<PackFile> call() throws Exception {
+ long start = System.currentTimeMillis();
+ System.out.println("starting gc");
+ latch.countDown();
+ Collection<PackFile> r = gc.gc();
+ System.out.println("gc took "
+ + (System.currentTimeMillis() - start) + " ms");
+ return r;
+ }
+ });
+ try {
+ latch.await();
+ Thread.sleep(5);
+ executor.shutdownNow();
+ result.get();
+ fail("thread wasn't interrupted");
+ } catch (ExecutionException e) {
+ Throwable cause = e.getCause();
+ if (cause instanceof CancelledException) {
+ assertEquals(JGitText.get().operationCanceled,
+ cause.getMessage());
+ } else if (cause instanceof IOException) {
+ Throwable cause2 = cause.getCause();
+ assertTrue(cause2 instanceof InterruptedException
+ || cause2 instanceof ExecutionException);
+ } else {
+ fail("unexpected exception " + e);
+ }
+ }
+ }
}