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

[JGIT PATCH 10/11] Add tests for WindowCache.reconfigure cases

From
Shawn O. Pearce <spearce@spearce.org>
Date
Apr 29, 2009, 18:54 UTC
Message-ID
<1241031288-23437-11-git-send-email-spearce@spearce.org>
In-Reply-To
<1241031288-23437-10-git-send-email-spearce@spearce.org>

Most of these cases occur when the window cache is misconfigured by the application. We should be throwing an exception out with some sort of error message if they happen, so check for that.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 New test, to get better coverage.
 .../jgit/lib/WindowCacheReconfigureTest.java       |  119 ++++++++++++++++++++
 1 files changed, 119 insertions(+), 0 deletions(-)
 create mode 100644 org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheReconfigureTest.java
diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheReconfigureTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheReconfigureTest.java
new file mode 100644
index 0000000..9bd4d96
--- /dev/null
+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/WindowCacheReconfigureTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2009, Google Inc.
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials provided
+ *   with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ *   names of its contributors may be used to endorse or promote
+ *   products derived from this software without specific prior
+ *   written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package org.spearce.jgit.lib;
+
+public class WindowCacheReconfigureTest extends RepositoryTestCase {
+	public void testConfigureCache_PackedGitLimit_0() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitLimit(0);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitLimit = 0");
+		} catch (IllegalArgumentException e) {
+			//
+		}
+	}
+
+	public void testConfigureCache_PackedGitWindowSize_0() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitWindowSize(0);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitWindowSize = 0");
+		} catch (IllegalArgumentException e) {
+			assertEquals("Invalid window size", e.getMessage());
+		}
+	}
+
+	public void testConfigureCache_PackedGitWindowSize_512() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitWindowSize(512);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitWindowSize = 512");
+		} catch (IllegalArgumentException e) {
+			assertEquals("Invalid window size", e.getMessage());
+		}
+	}
+
+	public void testConfigureCache_PackedGitWindowSize_4097() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitWindowSize(4097);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitWindowSize = 4097");
+		} catch (IllegalArgumentException e) {
+			assertEquals("Window size must be power of 2", e.getMessage());
+		}
+	}
+
+	public void testConfigureCache_PackedGitOpenFiles_0() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitOpenFiles(0);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitOpenFiles = 0");
+		} catch (IllegalArgumentException e) {
+			assertEquals("Open files must be >= 1", e.getMessage());
+		}
+	}
+
+	public void testConfigureCache_PackedGitWindowSizeAbovePackedGitLimit() {
+		try {
+			final WindowCacheConfig cfg = new WindowCacheConfig();
+			cfg.setPackedGitLimit(1024);
+			cfg.setPackedGitWindowSize(8192);
+			WindowCache.reconfigure(cfg);
+			fail("incorrectly permitted PackedGitWindowSize > PackedGitLimit");
+		} catch (IllegalArgumentException e) {
+			assertEquals("Window size must be < limit", e.getMessage());
+		}
+	}
+
+	public void testConfigureCache_Limits1() {
+		// This test is just to force coverage over some lower bounds for
+		// the table. We don't want the table to wind up with too small
+		// of a size. This is highly dependent upon the table allocation
+		// algorithm actually implemented in WindowCache.
+		//
+		final WindowCacheConfig cfg = new WindowCacheConfig();
+		cfg.setPackedGitLimit(6 * 4096 / 5);
+		cfg.setPackedGitWindowSize(4096);
+		WindowCache.reconfigure(cfg);
+	}
+}
-- 
1.6.3.rc3.199.g24398
Previous: Shawn O. PearceNext: Shawn O. Pearce
Message 11 of 13 in “WindowCache rewrite... with tests”
  1. 00/11 WindowCache rewrite... with testsShawn O. Pearce, Apr 29, 2009
  2. 01/11 Fix more computation of integer average overflowsShawn O. Pearce, Apr 29, 2009
  3. 02/11 Fix performance problem recently introduced to DeltaPackedObjectLoaderShawn O. Pearce, Apr 29, 2009
  4. 03/11 Replace inefficient new String(String) constructor to silence FindBugsShawn O. Pearce, Apr 29, 2009
  5. 04/11 Replace inefficient new Long(long) constructor to silence FindBugsShawn O. Pearce, Apr 29, 2009
  6. 05/11 Change IndexPack to use ObjectIdSubclassMap instead of ObjectIdMapShawn O. Pearce, Apr 29, 2009
  7. 06/11 Use getCachedBytes in IndexPack to avoid an unnecessary copyShawn O. Pearce, Apr 29, 2009
  8. 07/11 Remove ObjectIdMap from the JGit libraryShawn O. Pearce, Apr 29, 2009
  9. 08/11 Don't use ByteWindows when checking pack file headers/footersShawn O. Pearce, Apr 29, 2009
  10. 09/11 Rewrite WindowCache to be easier to follow and maintainShawn O. Pearce, Apr 29, 2009
  11. 10/11 Add tests for WindowCache.reconfigure casesShawn O. Pearce, Apr 29, 2009
  12. 11/11 Add tests to increase coverage of WindowCacheShawn O. Pearce, Apr 29, 2009
  13. Robin RosenbergApr 29, 2009

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.