From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 tests/com/gitblit/tests/GitBlitSuite.java |   65 +++++++++++++++++++++++++++-----
 1 files changed, 54 insertions(+), 11 deletions(-)

diff --git a/tests/com/gitblit/tests/GitBlitSuite.java b/tests/com/gitblit/tests/GitBlitSuite.java
index bb55cfa..b0179c3 100644
--- a/tests/com/gitblit/tests/GitBlitSuite.java
+++ b/tests/com/gitblit/tests/GitBlitSuite.java
@@ -16,11 +16,17 @@
 package com.gitblit.tests;
 
 import java.io.File;
+import java.lang.reflect.Field;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
 
+import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.RepositoryCache;
+import org.eclipse.jgit.lib.RepositoryCache.FileKey;
 import org.eclipse.jgit.storage.file.FileRepository;
+import org.eclipse.jgit.util.FS;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
@@ -49,13 +55,15 @@
 @RunWith(Suite.class)
 @SuiteClasses({ ArrayUtilsTest.class, FileUtilsTest.class, TimeUtilsTest.class,
 		StringUtilsTest.class, Base64Test.class, JsonUtilsTest.class, ByteFormatTest.class,
-		ObjectCacheTest.class, UserServiceTest.class, MarkdownUtilsTest.class, JGitUtilsTest.class,
-		SyndicationUtilsTest.class, DiffUtilsTest.class, MetricUtilsTest.class,
-		TicgitUtilsTest.class, GitBlitTest.class, FederationTests.class, RpcTests.class,
-		GitServletTest.class, GroovyScriptTest.class, LuceneUtilsTest.class, IssuesTest.class })
+		ObjectCacheTest.class, PermissionsTest.class, UserServiceTest.class, LdapUserServiceTest.class,
+		MarkdownUtilsTest.class, JGitUtilsTest.class, SyndicationUtilsTest.class,
+		DiffUtilsTest.class, MetricUtilsTest.class, TicgitUtilsTest.class, X509UtilsTest.class,
+		GitBlitTest.class, FederationTests.class, RpcTests.class, GitServletTest.class,
+		GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class, RepositoryModelTest.class,
+		FanoutServiceTest.class })
 public class GitBlitSuite {
 
-	public static final File REPOSITORIES = new File("git");
+	public static final File REPOSITORIES = new File("data/git");
 
 	static int port = 8280;
 	static int shutdownPort = 8281;
@@ -87,11 +95,12 @@
 	}
 
 	public static Repository getIssuesTestRepository() throws Exception {
+		JGitUtils.createRepository(REPOSITORIES, "gb-issues.git").close();
 		return new FileRepository(new File(REPOSITORIES, "gb-issues.git"));
 	}
 	
 	public static Repository getGitectiveRepository() throws Exception {
-		return new FileRepository(new File("test/gitective.git"));
+		return new FileRepository(new File(REPOSITORIES, "test/gitective.git"));
 	}
 
 	public static boolean startGitblit() throws Exception {
@@ -99,13 +108,17 @@
 			// already started
 			return false;
 		}
+		
+		GitServletTest.deleteWorkingFolders();
+		
 		// Start a Gitblit instance
 		Executors.newSingleThreadExecutor().execute(new Runnable() {
 			public void run() {
 				GitBlitServer.main("--httpPort", "" + port, "--httpsPort", "0", "--shutdownPort",
 						"" + shutdownPort, "--repositoriesFolder",
 						"\"" + GitBlitSuite.REPOSITORIES.getAbsolutePath() + "\"", "--userService",
-						"test-users.conf", "--settings", "test-gitblit.properties");
+						"test-users.conf", "--settings", "test-gitblit.properties",
+						"--baseFolder", "data");
 			}
 		});
 
@@ -121,7 +134,7 @@
 		GitBlitServer.main("--stop", "--shutdownPort", "" + shutdownPort);
 
 		// Wait a few seconds for it to be running
-		Thread.sleep(2500);
+		Thread.sleep(5000);
 	}
 
 	@BeforeClass
@@ -130,15 +143,13 @@
 
 		if (REPOSITORIES.exists() || REPOSITORIES.mkdirs()) {
 			cloneOrFetch("helloworld.git", "https://github.com/git/hello-world.git");
-			cloneOrFetch("ticgit.git", "https://github.com/jeffWelling/ticgit.git");
+			cloneOrFetch("ticgit.git", "https://github.com/schacon/ticgit.git");
 			cloneOrFetch("test/jgit.git", "https://github.com/eclipse/jgit.git");
 			cloneOrFetch("test/helloworld.git", "https://github.com/git/hello-world.git");
 			cloneOrFetch("test/ambition.git", "https://github.com/defunkt/ambition.git");
 			cloneOrFetch("test/theoretical-physics.git", "https://github.com/certik/theoretical-physics.git");
 			cloneOrFetch("test/gitective.git", "https://github.com/kevinsawicki/gitective.git");
 			
-			JGitUtils.createRepository(REPOSITORIES, "gb-issues.git").close();
-
 			enableTickets("ticgit.git");
 			enableDocs("ticgit.git");
 			showRemoteBranches("ticgit.git");
@@ -186,4 +197,36 @@
 			g.printStackTrace();
 		}
 	}
+	
+	public static void close(File repository) {
+		try {
+			File gitDir = FileKey.resolve(repository, FS.detect());
+			if (gitDir != null && gitDir.exists()) {
+				close(RepositoryCache.open(FileKey.exact(gitDir, FS.detect())));
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public static void close(Git git) {
+		close(git.getRepository());
+	}
+	
+	public static void close(Repository r) {
+		RepositoryCache.close(r);
+
+		// assume 2 uses in case reflection fails
+		int uses = 2;
+		try {
+			Field useCnt = Repository.class.getDeclaredField("useCnt");
+			useCnt.setAccessible(true);
+			uses = ((AtomicInteger) useCnt.get(r)).get();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		for (int i = 0; i < uses; i++) {
+			r.close();
+		}
+	}
 }

--
Gitblit v1.9.1