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 mr...@apache.org on 2013/06/13 21:44:02 UTC

svn commit: r1492831 - in /jackrabbit/oak/trunk: oak-core/src/test/java/org/apache/jackrabbit/oak/ oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/ oak-mk/src/main/java/org/apache/jackrabbit/mk/core/

Author: mreutegg
Date: Thu Jun 13 19:44:02 2013
New Revision: 1492831

URL: http://svn.apache.org/r1492831
Log:
OAK-868: KernelNodeState.processJsonDiff throws IAE on hidden items

Added:
    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/kernel/NodeStoreTest.java   (contents, props changed)
      - copied, changed from r1492804, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java
Removed:
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java
Modified:
    jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java

Added: 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=1492831&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/NodeStoreFixture.java Thu Jun 13 19:44:02 2013
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.mongomk.MongoMK;
+import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
+import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore;
+import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
+
+/**
+ * NodeStore fixture for parametrized tests.
+ */
+public abstract class NodeStoreFixture {
+
+    public static final NodeStoreFixture SEGMENT_MK = new NodeStoreFixture() {
+        @Override
+        public NodeStore createNodeStore() {
+            return new SegmentNodeStore(new MemoryStore());
+        }
+
+        @Override
+        public void dispose(NodeStore nodeStore) {
+        }
+    };
+
+    public static final NodeStoreFixture MONGO_MK = new NodeStoreFixture() {
+        @Override
+        public NodeStore createNodeStore() {
+            return new CloseableNodeStore(new MongoMK.Builder().open());
+        }
+
+        @Override
+        public void dispose(NodeStore nodeStore) {
+            if (nodeStore instanceof Closeable) {
+                try {
+                    ((Closeable) nodeStore).close();
+                } catch (IOException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+    };
+
+    public static final NodeStoreFixture MK_IMPL = new NodeStoreFixture() {
+        @Override
+        public NodeStore createNodeStore() {
+            return new KernelNodeStore(new MicroKernelImpl());
+        }
+
+        @Override
+        public void dispose(NodeStore nodeStore) {
+        }
+    };
+
+    public abstract NodeStore createNodeStore();
+
+    public abstract void dispose(NodeStore nodeStore);
+
+    private static class CloseableNodeStore
+            extends KernelNodeStore implements Closeable {
+
+        private final MongoMK kernel;
+
+        public CloseableNodeStore(MongoMK kernel) {
+            super(kernel);
+            this.kernel = kernel;
+        }
+
+        @Override
+        public void close() throws IOException {
+            kernel.dispose();
+        }
+    }
+}

Copied: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java (from r1492804, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java&p1=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java&r1=1492804&r2=1492831&rev=1492831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java Thu Jun 13 19:44:02 2013
@@ -23,13 +23,14 @@ import static org.apache.jackrabbit.oak.
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.runners.Parameterized.Parameters;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 
-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.plugins.memory.MultiStringPropertyState;
@@ -39,28 +40,60 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.spi.state.NodeStoreBranch;
+import org.junit.After;
+import org.junit.Assume;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
-public class KernelNodeStoreTest {
+@RunWith(value = Parameterized.class)
+public class NodeStoreTest {
 
-    private KernelNodeStore store;
+    @Parameters
+    public static Collection<Object[]> fixtures() {
+        Object[][] fixtures = new Object[][] {
+                {NodeStoreFixture.MK_IMPL},
+                {NodeStoreFixture.MONGO_MK},
+                {NodeStoreFixture.SEGMENT_MK},
+        };
+        return Arrays.asList(fixtures);
+    }
+
+    private NodeStore store;
 
     private NodeState root;
 
+    private NodeStoreFixture fixture;
+
+    public NodeStoreTest(NodeStoreFixture fixture) {
+        this.fixture = fixture;
+    }
+
     @Before
-    public void setUp() {
-        MicroKernel kernel = new MicroKernelImpl();
-        String jsop =
-                "+\"test\":{\"a\":1,\"b\":2,\"c\":3,"
-                + "\"x\":{},\"y\":{},\"z\":{}}";
-        kernel .commit("/", jsop, null, "test data");
-        store = new KernelNodeStore(kernel);
+    public void setUp() throws Exception {
+        store = fixture.createNodeStore();
+        NodeStoreBranch branch = store.branch();
+        NodeBuilder builder = branch.getHead().builder();
+        NodeBuilder test = builder.child("test");
+        test.setProperty("a", 1);
+        test.setProperty("b", 2);
+        test.setProperty("c", 3);
+        test.child("x");
+        test.child("y");
+        test.child("z");
+        branch.setRoot(builder.getNodeState());
+        branch.merge(EmptyHook.INSTANCE);
         root = store.getRoot();
     }
 
+    @After
+    public void tearDown() throws Exception {
+        fixture.dispose(store);
+    }
+
     @Test
     public void getRoot() {
         assertEquals(root, store.getRoot());
@@ -122,8 +155,10 @@ public class KernelNodeStoreTest {
 
     @Test
     public void afterCommitHook() throws CommitFailedException {
+        // this test only works with a KernelNodeStore
+        Assume.assumeTrue(store instanceof KernelNodeStore);
         final NodeState[] states = new NodeState[2]; // { before, after }
-        store.setObserver(new Observer() {
+        ((KernelNodeStore) store).setObserver(new Observer() {
             @Override
             public void contentChanged(NodeState before, NodeState after) {
                 states[0] = before;
@@ -194,6 +229,8 @@ public class KernelNodeStoreTest {
 
     @Test
     public void manyChildNodes() throws CommitFailedException {
+        // OAK-872
+        Assume.assumeTrue(fixture != NodeStoreFixture.MONGO_MK);
         NodeStoreBranch branch = store.branch();
         NodeBuilder root = branch.getHead().builder();
         NodeBuilder parent = root.child("parent");
@@ -296,8 +333,9 @@ public class KernelNodeStoreTest {
     }
 
     @Test
-    @Ignore
     public void compareAgainstBaseState100() throws CommitFailedException {
+        // OAK-872
+        Assume.assumeTrue(fixture != NodeStoreFixture.MONGO_MK);
         compareAgainstBaseState(KernelNodeState.MAX_CHILD_NODE_NAMES);
     }
 

Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/NodeStoreTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java?rev=1492831&r1=1492830&r2=1492831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java Thu Jun 13 19:44:02 2013
@@ -317,8 +317,8 @@ public class MicroKernelImpl implements 
         try {
             if ("/".equals(path)) {
                 StoredCommit toCommit = rep.getCommit(toRevisionId);
-                if (toCommit.getParentId().equals(fromRevisionId)) {
-                    // specified range spans a single commit:
+                if (toCommit.getParentId().equals(fromRevisionId) && depth == -1) {
+                    // specified range spans a single commit and depth is not limited:
                     // use diff stored in commit instead of building it dynamically
                     return toCommit.getChanges();
                 }