You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2013/08/15 16:58:38 UTC
svn commit: r1514308 - in
/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak:
NodeStoreFixture.java core/RootFuzzIT.java
Author: mduerig
Date: Thu Aug 15 14:58:38 2013
New Revision: 1514308
URL: http://svn.apache.org/r1514308
Log:
OAK-961 Parametrise tests to run against all Microkernel backends
Parametrise RootFuzzIT, ignore failing tests
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootFuzzIT.java
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java?rev=1514308&r1=1514307&r2=1514308&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java Thu Aug 15 14:58:38 2013
@@ -35,6 +35,11 @@ public abstract class NodeStoreFixture {
public static final NodeStoreFixture SEGMENT_MK = new NodeStoreFixture() {
@Override
+ public String toString() {
+ return "SegmentMK Fixture";
+ }
+
+ @Override
public NodeStore createNodeStore() {
return new SegmentNodeStore(new MemoryStore());
}
@@ -46,6 +51,11 @@ public abstract class NodeStoreFixture {
public static final NodeStoreFixture MONGO_MK = new NodeStoreFixture() {
@Override
+ public String toString() {
+ return "MongoMK Fixture";
+ }
+
+ @Override
public NodeStore createNodeStore() {
return new CloseableNodeStore(new MongoMK.Builder().open());
}
@@ -64,6 +74,11 @@ public abstract class NodeStoreFixture {
public static final NodeStoreFixture MK_IMPL = new NodeStoreFixture() {
@Override
+ public String toString() {
+ return "MKImpl Fixture";
+ }
+
+ @Override
public NodeStore createNodeStore() {
return new KernelNodeStore(new MicroKernelImpl());
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootFuzzIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootFuzzIT.java?rev=1514308&r1=1514307&r2=1514308&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootFuzzIT.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/RootFuzzIT.java Thu Aug 15 14:58:38 2013
@@ -26,20 +26,30 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.core.RootFuzzIT.Operation.Save;
import static org.apache.jackrabbit.oak.core.RootFuzzIT.Operation.SetProperty;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Iterator;
import java.util.Random;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.oak.NodeStoreFixture;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.core.RootFuzzIT.Operation.Rebase;
-import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
+import org.apache.jackrabbit.oak.kernel.JsopDiff;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,10 +57,20 @@ import org.slf4j.LoggerFactory;
* Fuzz test running random sequences of operations on {@link Tree}.
* Run with -DRootFuzzIT-seed=42 to set a specific seed (i.e. 42);
*/
+@RunWith(value = Parameterized.class)
public class RootFuzzIT {
-
static final Logger log = LoggerFactory.getLogger(RootFuzzIT.class);
+ @Parameters
+ public static Collection<Object[]> fixtures() {
+ Object[][] fixtures = new Object[][] {
+ {NodeStoreFixture.MK_IMPL},
+ {NodeStoreFixture.MONGO_MK},
+ {NodeStoreFixture.SEGMENT_MK},
+ };
+ return Arrays.asList(fixtures);
+ }
+
private static final int OP_COUNT = 5000;
private static final int SEED = Integer.getInteger(
@@ -59,31 +79,49 @@ public class RootFuzzIT {
private static final Random random = new Random(SEED);
- private KernelNodeStore store1;
+ private final NodeStoreFixture fixture;
+
+ private NodeStore store1;
private SystemRoot root1;
- private KernelNodeStore store2;
+ private NodeStore store2;
private SystemRoot root2;
private int counter;
+ public RootFuzzIT(NodeStoreFixture fixture) {
+ this.fixture = fixture;
+ }
+
@Before
- public void setup() {
+ public void setup() throws CommitFailedException {
+ log.info("Running " + getClass().getSimpleName() + " with " +
+ fixture + " and seed " + SEED);
+
counter = 0;
- MicroKernel mk1 = new MicroKernelImpl("./target/mk1/" + random.nextInt());
- store1 = new KernelNodeStore(mk1);
- mk1.commit("", "+\"/root\":{}", mk1.getHeadRevision(), "");
+ store1 = fixture.createNodeStore();
root1 = new SystemRoot(store1);
+ root1.getTree("/").addChild("root");
+ root1.commit();
- MicroKernel mk2 = new MicroKernelImpl("./target/mk2/" + random.nextInt());
- store2 = new KernelNodeStore(mk2);
- mk2.commit("", "+\"/root\":{}", mk2.getHeadRevision(), "");
+ store2 = fixture.createNodeStore();
root2 = new SystemRoot(store2);
+ root2.getTree("/").addChild("root");
+ root2.commit();
+ }
+
+ @After
+ public void teardown() {
+ fixture.dispose(store1);
+ fixture.dispose(store2);
}
@Test
public void fuzzTest() throws Exception {
+ assumeTrue(fixture != NodeStoreFixture.MONGO_MK);
+ assumeTrue(fixture != NodeStoreFixture.SEGMENT_MK);
+
for (Operation op : operations(OP_COUNT)) {
log.info("{}", op);
op.apply(root1);
@@ -94,7 +132,11 @@ public class RootFuzzIT {
checkEqual(root1.getTree("/"), root2.getTree("/"));
if (op instanceof Save) {
root2.commit();
- assertEquals("seed " + SEED, store1.getRoot(), store2.getRoot());
+ NodeState tree1 = store1.getRoot();
+ NodeState tree2 = store2.getRoot();
+ if (!tree1.equals(tree2)) {
+ fail("seed: " + SEED + ", " + JsopDiff.diffToJsop(tree1, tree2));
+ }
}
}
}