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 ba...@apache.org on 2015/08/05 21:15:57 UTC

svn commit: r1694289 [2/2] - in /jackrabbit/oak/trunk/oak-upgrade/src: main/java/org/apache/jackrabbit/oak/upgrade/ main/java/org/apache/jackrabbit/oak/upgrade/nodestate/ test/java/org/apache/jackrabbit/oak/upgrade/ test/java/org/apache/jackrabbit/oak/...

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/NodeStateCopierTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/NodeStateCopierTest.java?rev=1694289&r1=1694288&r2=1694289&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/NodeStateCopierTest.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/NodeStateCopierTest.java Wed Aug  5 19:15:56 2015
@@ -18,7 +18,6 @@
  */
 package org.apache.jackrabbit.oak.upgrade.nodestate;
 
-import com.google.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
@@ -27,8 +26,8 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.junit.Test;
 
-import static com.google.common.collect.ImmutableSet.of;
 import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
+import static org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier.builder;
 import static org.apache.jackrabbit.oak.upgrade.util.NodeStateTestUtils.commit;
 import static org.apache.jackrabbit.oak.upgrade.util.NodeStateTestUtils.create;
 import static org.apache.jackrabbit.oak.upgrade.util.NodeStateTestUtils.createNodeStoreWithContent;
@@ -40,6 +39,39 @@ public class NodeStateCopierTest {
             createProperty("jcr:primaryType", "nt:unstructured", Type.NAME);
 
     @Test
+    public void shouldCreateMissingAncestors() throws CommitFailedException {
+        final NodeStore source = createPrefilledNodeStore();
+        final NodeStore target = createNodeStoreWithContent();
+
+        builder()
+                .include("/a/b/c")
+                .copy(source, target);
+
+        expectDifference()
+                .childNodeChanged("/a", "/a/b")
+                .childNodeDeleted("/excluded", "/a/b/excluded")
+                .strict()
+                .verify(source.getRoot(), target.getRoot());
+    }
+
+    @Test
+    public void shouldIncludeMultiplePaths() throws CommitFailedException {
+        final NodeStore source = createPrefilledNodeStore();
+        final NodeStore target = createNodeStoreWithContent();
+
+        builder()
+                .include("/a/b/c/d", "/a/b/c/e")
+                .copy(source, target);
+
+        expectDifference()
+                .propertyDeleted("/a/b/c/f/jcr:primaryType")
+                .childNodeChanged("/a", "/a/b", "/a/b/c")
+                .childNodeDeleted("/excluded", "/a/b/excluded", "/a/b/c/f")
+                .strict()
+                .verify(source.getRoot(), target.getRoot());
+    }
+
+    @Test
     public void shouldMergeIdenticalContent() throws CommitFailedException {
         final NodeStore source = createPrefilledNodeStore();
         final NodeStore target = createPrefilledNodeStore();
@@ -68,13 +100,63 @@ public class NodeStateCopierTest {
     }
 
     @Test
+    public void shouldSkipNonMatchingIncludes() throws CommitFailedException {
+        final NodeStore source = createNodeStoreWithContent();
+        final NodeBuilder builder = source.getRoot().builder();
+        create(builder, "/a", primaryType);
+        create(builder, "/a/b", primaryType);
+        create(builder, "/a/b/c", primaryType);
+        commit(source, builder);
+
+        final NodeStore target = createNodeStoreWithContent();
+        builder()
+                .include("/a", "/z")
+                .copy(source, target);
+
+        expectDifference()
+                .strict()
+                .verify(source.getRoot(), target.getRoot());
+    }
+
+    @Test
+    public void shouldCopyFromMultipleSources() throws CommitFailedException {
+        final NodeStore source1 = createNodeStoreWithContent(
+                "/content/foo/en", "/content/foo/de");
+        final NodeStore source2 = createNodeStoreWithContent(
+                "/content/bar/en", "/content/bar/de", "/content/baz/en");
+        final NodeStore target = createNodeStoreWithContent();
+
+        final NodeState before = target.getRoot();
+        builder()
+                .include("/content/foo")
+                .copy(source1, target);
+        builder()
+                .include("/content/bar")
+                .exclude("/content/bar/de")
+                .copy(source2, target);
+        final NodeState after = target.getRoot();
+
+        expectDifference()
+                .strict()
+                .childNodeAdded(
+                        "/content",
+                        "/content/foo",
+                        "/content/foo/en",
+                        "/content/foo/de",
+                        "/content/bar",
+                        "/content/bar/en"
+                )
+                .verify(before, after);
+    }
+
+    @Test
     public void shouldRespectMergePaths() throws CommitFailedException {
         final NodeStore source = createNodeStoreWithContent("/content/foo/en", "/content/bar/en");
         final NodeStore target = createNodeStoreWithContent("/content/foo/de");
 
-        final NodeBuilder builder = target.getRoot().builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", of("/content"));
-        commit(target, builder);
+        builder()
+                .merge("/content")
+                .copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()
@@ -84,6 +166,23 @@ public class NodeStateCopierTest {
                 .verify(source.getRoot(), after);
     }
 
+    @Test
+    public void shouldNotDeleteMergedExcludedPaths() throws CommitFailedException {
+        final NodeStore source = createNodeStoreWithContent("/content/foo/en", "/jcr:system");
+        final NodeStore target = createNodeStoreWithContent("/jcr:system/jcr:versionStorage");
+
+        final NodeState before = target.getRoot();
+        builder()
+                .merge("/jcr:system")
+                .exclude("/jcr:system")
+                .copy(source, target);
+        final NodeState after = target.getRoot();
+
+        expectDifference()
+                .strict()
+                .childNodeAdded("/content", "/content/foo", "/content/foo/en")
+                .verify(before, after);
+    }
 
     @Test
     public void shouldDeleteExistingNodes() throws CommitFailedException {
@@ -91,9 +190,7 @@ public class NodeStateCopierTest {
         final NodeStore target = createNodeStoreWithContent("/content/bar");
 
         final NodeState before = target.getRoot();
-        final NodeBuilder builder = before.builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", ImmutableSet.<String>of());
-        commit(target, builder);
+        builder().copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()
@@ -108,14 +205,12 @@ public class NodeStateCopierTest {
     public void shouldDeleteExistingPropertyIfMissingInSource() throws CommitFailedException {
         final NodeStore source = createNodeStoreWithContent("/a");
         final NodeStore target = createNodeStoreWithContent();
-        NodeBuilder builder = target.getRoot().builder();
+        final NodeBuilder builder = target.getRoot().builder();
         create(builder, "/a", primaryType);
         commit(target, builder);
 
         final NodeState before = target.getRoot();
-        builder = before.builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", ImmutableSet.<String>of());
-        commit(target, builder);
+        builder().copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()
@@ -131,9 +226,9 @@ public class NodeStateCopierTest {
         final NodeStore target = createNodeStoreWithContent("/content/bar");
 
         final NodeState before = target.getRoot();
-        final NodeBuilder builder = before.builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", of("/content/bar"));
-        commit(target, builder);
+        builder()
+                .merge("/content/bar")
+                .copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()
@@ -149,9 +244,9 @@ public class NodeStateCopierTest {
         final NodeStore target = createNodeStoreWithContent("/content/bar");
 
         final NodeState before = target.getRoot();
-        final NodeBuilder builder = before.builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", of("/content"));
-        commit(target, builder);
+        builder()
+                .merge("/content")
+                .copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()
@@ -161,15 +256,16 @@ public class NodeStateCopierTest {
                 .verify(before, after);
     }
 
+
     @Test
     public void shouldIgnoreNonMatchingMergePaths() throws CommitFailedException {
         final NodeStore source = createNodeStoreWithContent("/content/foo");
         final NodeStore target = createNodeStoreWithContent("/content/bar");
 
         final NodeState before = target.getRoot();
-        final NodeBuilder builder = before.builder();
-        NodeStateCopier.copyNodeState(source.getRoot(), builder, "/", of("/con"));
-        commit(target, builder);
+        builder()
+                .merge("/con")
+                .copy(source, target);
         final NodeState after = target.getRoot();
 
         expectDifference()

Modified: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/util/NodeStateTestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/util/NodeStateTestUtils.java?rev=1694289&r1=1694288&r2=1694289&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/util/NodeStateTestUtils.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/util/NodeStateTestUtils.java Wed Aug  5 19:15:56 2015
@@ -38,6 +38,8 @@ import java.util.Set;
 import java.util.TreeSet;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 public class NodeStateTestUtils {
 
@@ -66,6 +68,14 @@ public class NodeStateTestUtils {
         store.merge(rootBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
     }
 
+    public static NodeState getNodeState(NodeState state, String path) {
+        NodeState current = state;
+        for (final String name : PathUtils.elements(path)) {
+            current = current.getChildNode(name);
+        }
+        return current;
+    }
+
     public static NodeBuilder createOrGetBuilder(NodeBuilder builder, String path) {
         NodeBuilder current = builder;
         for (final String name : PathUtils.elements(path)) {
@@ -74,6 +84,14 @@ public class NodeStateTestUtils {
         return current;
     }
 
+    public static void assertExists(NodeState state, String relPath) {
+        assertTrue(relPath + " should exist", getNodeState(state, relPath).exists());
+    }
+
+    public static void assertMissing(NodeState state, String relPath) {
+        assertFalse(relPath + " should not exist", getNodeState(state, relPath).exists());
+    }
+
     public static ExpectedDifference expectDifference() {
         return new ExpectedDifference();
     }