From 53ad4373825f444bc011d046e0acd3dfe5eaeca7 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Sat, 28 Jan 2017 21:19:55 +0100 Subject: [PATCH] RepositoryCacheTest: avoid to close already closed repository The tearDown() of the superclass closed the repository once more which led to a negative use count warning logged by Repository.close(). Change-Id: I331f85a540c68264a53456276c32f72b79113d61 Signed-off-by: Matthias Sohn --- .../junit/LocalDiskRepositoryTestCase.java | 24 ++++++++++++-- .../eclipse/jgit/lib/RepositoryCacheTest.java | 33 ++++++++++--------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java index 42e201e93..ceb045235 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java @@ -359,12 +359,32 @@ public abstract class LocalDiskRepositoryTestCase { * @throws IOException * the repository could not be created in the temporary area */ - private FileRepository createRepository(boolean bare) throws IOException { + private FileRepository createRepository(boolean bare) + throws IOException { + return createRepository(bare, true); + } + + /** + * Creates a new empty repository. + * + * @param bare + * true to create a bare repository; false to make a repository + * within its working directory + * @param autoClose + * auto close the repository in #tearDown + * @return the newly created repository, opened for access + * @throws IOException + * the repository could not be created in the temporary area + */ + public FileRepository createRepository(boolean bare, boolean autoClose) + throws IOException { File gitdir = createUniqueTestGitDir(bare); FileRepository db = new FileRepository(gitdir); assertFalse(gitdir.exists()); db.create(bare); - addRepoToClose(db); + if (autoClose) { + addRepoToClose(db); + } return db; } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryCacheTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryCacheTest.java index b44b4c34a..1107c2c69 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryCacheTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryCacheTest.java @@ -109,7 +109,7 @@ public class RepositoryCacheTest extends RepositoryTestCase { @Test public void testFileKeyOpenNew() throws IOException { - final Repository n = createBareRepository(); + final Repository n = createRepository(true, false); final File gitdir = n.getDirectory(); n.close(); recursiveDelete(gitdir); @@ -187,12 +187,14 @@ public class RepositoryCacheTest extends RepositoryTestCase { } @Test - public void testRepositoryUsageCountWithRegisteredRepository() { - assertEquals(1, ((Repository) db).useCnt.get()); - RepositoryCache.register(db); - assertEquals(1, ((Repository) db).useCnt.get()); - db.close(); - assertEquals(0, ((Repository) db).useCnt.get()); + public void testRepositoryUsageCountWithRegisteredRepository() + throws IOException { + Repository repo = createRepository(false, false); + assertEquals(1, repo.useCnt.get()); + RepositoryCache.register(repo); + assertEquals(1, repo.useCnt.get()); + repo.close(); + assertEquals(0, repo.useCnt.get()); } @Test @@ -232,8 +234,8 @@ public class RepositoryCacheTest extends RepositoryTestCase { @Test public void testRepositoryUnregisteringWhenExpired() throws Exception { - Repository repoA = createBareRepository(); - Repository repoB = createBareRepository(); + Repository repoA = createRepository(true, false); + Repository repoB = createRepository(true, false); Repository repoC = createBareRepository(); RepositoryCache.register(repoA); RepositoryCache.register(repoB); @@ -265,11 +267,12 @@ public class RepositoryCacheTest extends RepositoryTestCase { } @Test - public void testReconfigure() throws InterruptedException { - RepositoryCache.register(db); - assertTrue(RepositoryCache.isCached(db)); - db.close(); - assertTrue(RepositoryCache.isCached(db)); + public void testReconfigure() throws InterruptedException, IOException { + Repository repo = createRepository(false, false); + RepositoryCache.register(repo); + assertTrue(RepositoryCache.isCached(repo)); + repo.close(); + assertTrue(RepositoryCache.isCached(repo)); // Actually, we would only need to validate that // WorkQueue.getExecutor().scheduleWithFixedDelay is called with proper @@ -287,7 +290,7 @@ public class RepositoryCacheTest extends RepositoryTestCase { // This wait will time out after 2048 ms for (int i = 0; i <= 10; i++) { Thread.sleep(1 << i); - if (!RepositoryCache.isCached(db)) { + if (!RepositoryCache.isCached(repo)) { return; } }