You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2012/06/28 16:26:08 UTC
svn commit: r1355022 -
/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java
Author: thomasm
Date: Thu Jun 28 14:26:07 2012
New Revision: 1355022
URL: http://svn.apache.org/viewvc?rev=1355022&view=rev
Log:
JCR-3363 DataStore garbage collection: test case GarbageCollectorTest.testGC() is too lenient
Modified:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java?rev=1355022&r1=1355021&r2=1355022&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/GarbageCollectorTest.java Thu Jun 28 14:26:07 2012
@@ -27,6 +27,7 @@ import EDU.oswego.cs.dl.util.concurrent.
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
+import javax.jcr.Binary;
import javax.jcr.Credentials;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
@@ -46,6 +47,7 @@ public class GarbageCollectorTest extend
final Session session = getHelper().getReadWriteSession();
final DataStoreGarbageCollector gc = ((SessionImpl) session).createDataStoreGarbageCollector();
+ gc.setPersistenceManagerScan(false);
final Exception[] ex = new Exception[1];
gc.setMarkEventListener(new MarkEventListener() {
boolean closed;
@@ -114,6 +116,7 @@ public class GarbageCollectorTest extend
}.start();
assertEquals("x", sync.take());
DataStoreGarbageCollector gc = ((SessionImpl) session).createDataStoreGarbageCollector();
+ gc.setPersistenceManagerScan(false);
gc.mark();
gc.sweep();
sync.put("deleted");
@@ -137,9 +140,11 @@ public class GarbageCollectorTest extend
root.addNode("node1");
Node node2 = root.addNode("node2");
- Node n = node2.addNode("nodeWithBlob");
+ Node n = node2.addNode("nodeWithBlob").addNode("sub");
ValueFactory vf = session.getValueFactory();
- n.setProperty("test", vf.createBinary(new RandomInputStream(10, 1000)));
+ Binary b = vf.createBinary(new RandomInputStream(20, 1000));
+ n.setProperty("test", b);
+ session.save();
n = node2.addNode("nodeWithTemporaryBlob");
n.setProperty("test", vf.createBinary(new RandomInputStream(11, 1000)));
session.save();
@@ -148,6 +153,9 @@ public class GarbageCollectorTest extend
session.save();
GarbageCollector gc = ((SessionImpl)session).createDataStoreGarbageCollector();
+ gc.getDataStore().clearInUse();
+ gc.setPersistenceManagerScan(false);
+ gc.setMarkEventListener(this);
if (gc.getDataStore() instanceof FileDataStore) {
// make sure the file is old (access time resolution is 2 seconds)
@@ -158,13 +166,19 @@ public class GarbageCollectorTest extend
gc.mark();
int count = listIdentifiers(gc);
LOG.debug("stop scanning; currently " + count + " identifiers");
- gc.stopScan();
LOG.debug("deleting...");
gc.getDataStore().clearInUse();
assertTrue(gc.sweep() > 0);
int count2 = listIdentifiers(gc);
assertEquals(count - 1, count2);
+ // verify the node was moved, and that the binary is still there
+ n = root.getNode("node1").getNode("nodeWithBlob").getNode("sub");
+ b = n.getProperty("test").getValue().getBinary();
+ InputStream in = b.getStream();
+ InputStream in2 = new RandomInputStream(20, 1000);
+ verifyInputStream(in, in2);
+
deleteMyNodes();
gc.close();
@@ -173,6 +187,8 @@ public class GarbageCollectorTest extend
private void runGC(Session session, boolean all) throws Exception {
GarbageCollector gc = ((SessionImpl)session).createDataStoreGarbageCollector();
gc.setMarkEventListener(this);
+ gc.setPersistenceManagerScan(false);
+
if (gc.getDataStore() instanceof FileDataStore) {
// make sure the file is old (access time resolution is 2 seconds)
Thread.sleep(2000);
@@ -219,6 +235,14 @@ public class GarbageCollectorTest extend
InputStream in = n.getProperty("test").getBinary().getStream();
InputStream in2 = new RandomInputStream(10, 1000);
+ verifyInputStream(in, in2);
+
+ deleteMyNodes();
+
+ s2.logout();
+ }
+
+ private void verifyInputStream(InputStream in, InputStream in2) throws IOException {
while (true) {
int a = in.read();
int b = in2.read();
@@ -228,9 +252,6 @@ public class GarbageCollectorTest extend
}
}
- deleteMyNodes();
-
- s2.logout();
}
public void afterScanning(Node n) throws RepositoryException {