From ce9a47597a234d664049ac75fa9cc6ab0911c85a Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Fri, 24 Aug 2007 16:25:51 +0000
Subject: [PATCH] - add assertions covering cache maps out of sync. - replace atomic init followed by clear in favor of before/after group to improve concurrency. - fix FIFO rotation test bug to assert for all rotated entries.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SoftReferenceEntryCacheTestCase.java | 26 ++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java | 29 ++++++++-
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java | 38 ++++++++++--
opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java | 62 ++++++++++++++------
4 files changed, 127 insertions(+), 28 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
index b85b549..dd3a937 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/CommonEntryCacheTestCase.java
@@ -30,7 +30,6 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
import org.opends.server.TestCaseUtils;
@@ -100,14 +99,6 @@
/**
- * Indicates whether a concurrent test thread should assert
- * that the cache is empty before executing the actual test.
- */
- private AtomicBoolean cacheEmptyAssert = new AtomicBoolean();
-
-
-
- /**
* Reflection of the toVerboseString implementation method.
*/
protected String toVerboseString()
@@ -307,6 +298,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testPutEntry()
throws Exception
{
@@ -324,6 +316,11 @@
" in the cache. Cache contents:" + ServerConstants.EOL +
toVerboseString());
+ assertNotNull(cache.getEntry(b, 1, LockType.NONE, new ArrayList<Lock>()),
+ "Expected to find entry id " + Integer.toString(-1) +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
// Clear the cache so that other tests can start from scratch.
cache.clear();
}
@@ -335,6 +332,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testPutEntryIfAbsent()
throws Exception
{
@@ -355,6 +353,16 @@
" in the cache. Cache contents:" + ServerConstants.EOL +
toVerboseString());
+ assertNotNull(cache.getEntry(testEntriesList.get(0).getDN()),
+ "Expected to find " + testEntriesList.get(0).getDN().toString() +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
+ assertNotNull(cache.getEntry(b, 1, LockType.NONE, new ArrayList<Lock>()),
+ "Expected to find entry id " + Integer.toString(-1) +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
// Clear the cache so that other tests can start from scratch.
cache.clear();
}
@@ -366,6 +374,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testRemoveEntry()
throws Exception
{
@@ -385,6 +394,11 @@
" in the cache. Cache contents:" + ServerConstants.EOL +
toVerboseString());
+ assertNull(cache.getEntry(b, 1, LockType.NONE, new ArrayList<Lock>()),
+ "Not expected to find entry id " + Integer.toString(-1) +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
// Clear the cache so that other tests can start from scratch.
cache.clear();
}
@@ -396,6 +410,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testClear()
throws Exception
{
@@ -415,6 +430,11 @@
" in the cache. Cache contents:" + ServerConstants.EOL +
toVerboseString());
+ assertNull(cache.getEntry(b, 1, LockType.NONE, new ArrayList<Lock>()),
+ "Not expected to find entry id " + Integer.toString(-1) +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
// Clear the cache so that other tests can start from scratch.
cache.clear();
}
@@ -448,6 +468,11 @@
b.getBackendID() + " in the cache. Cache contents:" +
ServerConstants.EOL + toVerboseString());
+ assertNull(cache.getEntry(testEntriesList.get(0).getDN()),
+ "Not expected to find " + testEntriesList.get(0).getDN().toString() +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
assertNotNull(cache.getEntry(c, 1, LockType.NONE, new ArrayList<Lock>()),
"Expected to find entry id " + Integer.toString(1) + " on backend " +
c.getBackendID() + " in the cache. Cache contents:" +
@@ -464,6 +489,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testClearSubtree()
throws Exception
{
@@ -487,6 +513,11 @@
" in the cache. Cache contents:" + ServerConstants.EOL +
toVerboseString());
+ assertNull(cache.getEntry(b, 1, LockType.NONE, new ArrayList<Lock>()),
+ "Not expected to find entry id " + Integer.toString(-1) +
+ " in the cache. Cache contents:" + ServerConstants.EOL +
+ toVerboseString());
+
assertNotNull(cache.getEntry(testEntry.getDN()),
"Expected to find " + testEntry.getDN().toString() +
" in the cache. Cache contents:" + ServerConstants.EOL +
@@ -524,25 +555,20 @@
*
* @throws Exception If an unexpected problem occurs.
*/
+ @SuppressWarnings("unchecked")
public void testCacheConcurrency()
throws Exception
{
- if(cacheEmptyAssert.compareAndSet(false, true)) {
- assertNull(toVerboseString(),
- "Expected empty cache. " + "Cache contents:" + ServerConstants.EOL +
- toVerboseString());
- }
-
Backend b = DirectoryServer.getBackend(DN.decode("o=test"));
for(int loops = 0; loops < CONCURRENCYLOOPS; loops++) {
for(int i = 0; i < NUMTESTENTRIES; i++) {
cache.putEntry(testEntriesList.get(i), b, i);
cache.getEntry(testEntriesList.get(i).getDN());
+ cache.removeEntry(testEntriesList.get(i).getDN());
+ cache.putEntryIfAbsent(testEntriesList.get(i), b, i);
+ cache.getEntry(b, i, LockType.NONE, new ArrayList<Lock>());
}
}
-
- // Clear the cache so that other tests can start from scratch.
- cache.clear();
}
}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
index a981896..513034a 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FIFOEntryCacheTestCase.java
@@ -39,6 +39,8 @@
import org.opends.server.types.Entry;
import org.opends.server.util.ServerConstants;
import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@@ -314,10 +316,31 @@
+ @BeforeGroups(groups = "testFIFOCacheConcurrency")
+ public void cacheConcurrencySetup()
+ throws Exception
+ {
+ assertNull(super.toVerboseString(),
+ "Expected empty cache. " + "Cache contents:" + ServerConstants.EOL +
+ super.toVerboseString());
+ }
+
+
+
+ @AfterGroups(groups = "testFIFOCacheConcurrency")
+ public void cacheConcurrencyCleanup()
+ throws Exception
+ {
+ // Clear the cache so that other tests can start from scratch.
+ super.cache.clear();
+ }
+
+
+
/**
* {@inheritDoc}
*/
- @Test(groups="slow",
+ @Test(groups = { "slow", "testFIFOCacheConcurrency" },
threadPoolSize = 10,
invocationCount = 10,
timeOut = 60000)
@@ -347,8 +370,8 @@
super.cache.putEntry(super.testEntriesList.get(i), b, i);
}
- // Make sure first MAXENTRIES out of NUMTESTENTRIES rotated.
- for(int i = 0; i < super.MAXENTRIES; i++ ) {
+ // Make sure first NUMTESTENTRIES - MAXENTRIES got rotated.
+ for(int i = 0; i < (super.NUMTESTENTRIES - super.MAXENTRIES); i++ ) {
assertFalse(super.cache.containsEntry(
super.testEntriesList.get(i).getDN()), "Not expected to find " +
super.testEntriesList.get(i).getDN().toString() + " in the " +
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
index e29040a..43b2be7 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
@@ -87,6 +87,11 @@
// Initialize the cache.
super.cache = new FileSystemEntryCache();
super.cache.initializeEntryCache(configuration);
+
+ // Make sure the cache is empty.
+ assertNull(super.toVerboseString(),
+ "Expected empty cache. " + "Cache contents:" + ServerConstants.EOL +
+ super.toVerboseString());
}
@@ -428,10 +433,31 @@
+ @BeforeGroups(groups = "testFSFIFOCacheConcurrency")
+ public void cacheConcurrencySetup()
+ throws Exception
+ {
+ assertNull(super.toVerboseString(),
+ "Expected empty cache. " + "Cache contents:" + ServerConstants.EOL +
+ super.toVerboseString());
+ }
+
+
+
+ @AfterGroups(groups = "testFSFIFOCacheConcurrency")
+ public void cacheConcurrencyCleanup()
+ throws Exception
+ {
+ // Clear the cache so that other tests can start from scratch.
+ super.cache.clear();
+ }
+
+
+
/**
* {@inheritDoc}
*/
- @Test(groups="slow",
+ @Test(groups = { "slow", "testFSFIFOCacheConcurrency" },
threadPoolSize = 10,
invocationCount = 10,
// In case of disk based FS.
@@ -445,7 +471,7 @@
- @BeforeGroups(groups = "testLRUCacheConcurrency")
+ @BeforeGroups(groups = "testFSLRUCacheConcurrency")
public void LRUCacheConcurrencySetup()
throws Exception
{
@@ -455,7 +481,7 @@
- @AfterGroups(groups = "testLRUCacheConcurrency")
+ @AfterGroups(groups = "testFSLRUCacheConcurrency")
public void LRUCacheConcurrencyCleanup()
throws Exception
{
@@ -472,7 +498,7 @@
*
* @throws Exception If an unexpected problem occurs.
*/
- @Test(groups = { "slow", "testLRUCacheConcurrency" },
+ @Test(groups = { "slow", "testFSLRUCacheConcurrency" },
threadPoolSize = 10,
invocationCount = 10,
// In case of disk based FS.
@@ -502,8 +528,8 @@
super.cache.putEntry(super.testEntriesList.get(i), b, i);
}
- // Make sure first MAXENTRIES out of NUMTESTENTRIES rotated.
- for(int i = 0; i < super.MAXENTRIES; i++ ) {
+ // Make sure first NUMTESTENTRIES - MAXENTRIES got rotated.
+ for(int i = 0; i < (super.NUMTESTENTRIES - super.MAXENTRIES); i++ ) {
assertFalse(super.cache.containsEntry(
super.testEntriesList.get(i).getDN()), "Not expected to find " +
super.testEntriesList.get(i).getDN().toString() + " in the " +
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SoftReferenceEntryCacheTestCase.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SoftReferenceEntryCacheTestCase.java
index 271bc72..e306225 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SoftReferenceEntryCacheTestCase.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/SoftReferenceEntryCacheTestCase.java
@@ -34,7 +34,10 @@
import org.testng.annotations.BeforeClass;
import org.opends.server.admin.std.meta.*;
import org.opends.server.types.Entry;
+import org.opends.server.util.ServerConstants;
import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@@ -287,10 +290,31 @@
+ @BeforeGroups(groups = "testSoftRefCacheConcurrency")
+ public void cacheConcurrencySetup()
+ throws Exception
+ {
+ assertNull(super.toVerboseString(),
+ "Expected empty cache. " + "Cache contents:" + ServerConstants.EOL +
+ super.toVerboseString());
+ }
+
+
+
+ @AfterGroups(groups = "testSoftRefCacheConcurrency")
+ public void cacheConcurrencyCleanup()
+ throws Exception
+ {
+ // Clear the cache so that other tests can start from scratch.
+ super.cache.clear();
+ }
+
+
+
/**
* {@inheritDoc}
*/
- @Test(groups="slow",
+ @Test(groups = { "slow", "testSoftRefCacheConcurrency" },
threadPoolSize = 10,
invocationCount = 10,
timeOut = 60000)
--
Gitblit v1.10.0