git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[JGIT PATCH 3/8] Turn off memory mapping in JGit unit tests by default

From
Robin Rosenberg <robin.rosenberg@dewire.com>
Date
Nov 30, 2008, 23:40 UTC
Message-ID
<1228088435-23722-4-git-send-email-robin.rosenberg@dewire.com>
In-Reply-To
<1228088435-23722-3-git-send-email-robin.rosenberg@dewire.com>

A system property named jgit.junit.usemmmap can be set to true to enable memory mapping during unit testing.

The protected method configure can be overridden to do things like configuring the JGit engine.

Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
 .../org/spearce/jgit/lib/RepositoryTestCase.java   |   30 ++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java
index e164faf..3b08fa5 100644
--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java
+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryTestCase.java
@@ -49,6 +49,19 @@
 import junit.framework.TestCase;
 import org.spearce.jgit.util.JGitTestUtil;
 
+/**
+ * Base class for most JGit unit tests.
+ *
+ * Sets up a predefined test repository and has support for creating additional
+ * repositories and destroying them when the tests are finished.
+ *
+ * A system property <em>jgit.junit.usemmmap</em> defines whether memory mapping
+ * is used. Memory mapping has an effect on the file system, in that memory
+ * mapped files in java cannot be deleted as long as they mapped arrays have not
+ * been reclaimed by the garbage collector. The programmer cannot control this
+ * with precision, though hinting using <em>{@link java.lang.System#gc}</em>
+ * often helps.
+ */
 public abstract class RepositoryTestCase extends TestCase {
 
 	protected final File trashParent = new File("trash");
@@ -66,6 +79,22 @@
 		jcommitter = new PersonIdent("J. Committer", "jcommitter@example.com");
 	}
 
+	protected boolean packedGitMMAP;
+
+	/**
+	 * Configure JGit before setting up test repositories.
+	 */
+	protected void configure() {
+		packedGitMMAP = "true".equals(System.getProperty("jgit.junit.usemmmap"));
+		WindowCache.reconfigure(128*1024, 8192, packedGitMMAP, 8192);
+	}
+
+	/**
+	 * Utility method to delete a directory recursively. It is
+	 * also used internally.
+	 *
+	 * @param dir
+	 */
 	protected static void recursiveDelete(final File dir) {
 		final File[] ls = dir.listFiles();
 		if (ls != null) {
@@ -123,6 +152,7 @@ protected static void checkFile(File f, final String checkData)
 
 	public void setUp() throws Exception {
 		super.setUp();
+		configure();
 		recursiveDelete(trashParent);
 		trash = new File(trashParent,"trash"+System.currentTimeMillis());
 		trash_git = new File(trash, ".git");
-- 
1.6.0.3.640.g6331a
Previous: Robin RosenbergNext: Robin Rosenberg
Message 9 of 15 in “RepositoryTestCase cleanups”
  1. 0/4 RepositoryTestCase cleanupsRobin Rosenberg, Nov 27, 2008
  2. Shawn O. PearceNov 27, 2008
  3. Robin RosenbergNov 29, 2008
  4. Johannes SchindelinDec 1, 2008
  5. Robin RosenbergNov 30, 2008
  6. 0/8 Unit test cleanupsRobin Rosenberg, Nov 30, 2008
  7. 1/8 Drop unneeded code in unit testsRobin Rosenberg, Nov 30, 2008
  8. 2/8 Cleanup malformed test casesRobin Rosenberg, Nov 30, 2008
  9. 3/8 Turn off memory mapping in JGit unit tests by defaultRobin Rosenberg, Nov 30, 2008
  10. 4/8 Add a counter to make sure the test repo name is uniqueRobin Rosenberg, Nov 30, 2008
  11. 5/8 Make the cleanup less verbose when it fails to delete temporary stuff.Robin Rosenberg, Nov 30, 2008
  12. 6/8 Cleanup after each test.Robin Rosenberg, Nov 30, 2008
  13. 7/8 Close files opened by unit testing frameworkRobin Rosenberg, Nov 30, 2008
  14. 8/8 Hard failure on unit test cleanups if they fail.Robin Rosenberg, Nov 30, 2008
  15. Shawn O. PearceDec 2, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.