Author: davide
Date: Wed Oct 29 10:48:49 2014
New Revision: 1635094

URL: http://svn.apache.org/r1635094
Log:
OAK-2226 - Lucene no results for multiple jcr:contains

The @Ignore test case

Added:
    
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest2.java
    
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/
    
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/
    
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/
    
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/test_nodetypes.cnd

Added: 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest2.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest2.java?rev=1635094&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest2.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexAggregationTest2.java
 Wed Oct 29 10:48:49 2014
@@ -0,0 +1,222 @@
+/*
+ * 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.plugins.index.lucene;
+
+import static com.google.common.collect.Lists.newArrayList;
+import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.JcrConstants.NT_FILE;
+import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static 
org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.core.SystemRoot;
+import 
org.apache.jackrabbit.oak.plugins.index.aggregate.AggregateIndexProvider;
+import org.apache.jackrabbit.oak.plugins.index.aggregate.NodeAggregator;
+import org.apache.jackrabbit.oak.plugins.index.aggregate.SimpleNodeAggregator;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.plugins.name.NamespaceEditorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.TypeEditorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.NodeTypeRegistry;
+import org.apache.jackrabbit.oak.query.AbstractQueryTest;
+import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
+import org.apache.jackrabbit.oak.spi.commit.EditorHook;
+import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
+import org.apache.jackrabbit.oak.spi.state.ApplyDiff;
+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.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Lists;
+
+public class LuceneIndexAggregationTest2 extends AbstractQueryTest {
+    private static final Logger LOG = 
LoggerFactory.getLogger(LuceneIndexAggregationTest2.class);
+    
+    private static final String NT_TEST_PAGE = "test:Page";
+    private static final String NT_TEST_PAGECONTENT = "test:PageContent";
+    private static final String NT_TEST_ASSET = "test:Asset";
+    private static final String NT_TEST_ASSETCONTENT = "test:AssetContent";
+    
+    @Override
+    protected ContentRepository createRepository() {
+        LuceneIndexProvider provider = new LuceneIndexProvider();
+        
+        return new Oak()
+            .with(new InitialContent() {
+
+                @Override
+                public void initialize(NodeBuilder builder) {
+                    super.initialize(builder);
+
+                    // registering additional node types for wider testing
+                    InputStream stream = null;
+                    try {
+                        stream = LuceneIndexAggregationTest2.class
+                            .getResourceAsStream("test_nodetypes.cnd");
+                        NodeState base = builder.getNodeState();
+                        NodeStore store = new MemoryNodeStore(base);
+
+                        Root root = new SystemRoot(store, new EditorHook(
+                            new CompositeEditorProvider(new 
NamespaceEditorProvider(),
+                                new TypeEditorProvider())));
+
+                        NodeTypeRegistry.register(root, stream, "testing node 
types");
+
+                        NodeState target = store.getRoot();
+                        target.compareAgainstBaseState(base, new 
ApplyDiff(builder));
+                    } catch (Exception e) {
+                        LOG.error("Error while registering required node 
types. Failing here", e);
+                        fail("Error while registering required node types");
+                    } finally {
+                        printNodeTypes(builder);
+                        if (stream != null) {
+                            try {
+                                stream.close();
+                            } catch (IOException e) {
+                                LOG.debug("Ignoring exception on stream 
closing.", e);
+                            }
+                        }
+                    }
+
+                }
+
+            })
+            .with(new OpenSecurityProvider())
+            
.with(AggregateIndexProvider.wrap(provider.with(getNodeAggregator())))
+            .with((Observer) provider).with(new LuceneIndexEditorProvider())
+            .createContentRepository();
+    }
+    
+    /**
+     * convenience method for printing on logs the currently registered node 
types.
+     * 
+     * @param builder
+     */
+    private static void printNodeTypes(NodeBuilder builder) {
+        if (LOG.isDebugEnabled()) {
+            NodeBuilder namespace = 
builder.child(JCR_SYSTEM).child(JCR_NODE_TYPES);
+            List<String> nodes = 
Lists.newArrayList(namespace.getChildNodeNames());
+            Collections.sort(nodes);
+            for (String node : nodes) {
+                LOG.debug(node);
+            }        
+        }
+    }
+    
+    @Override
+    protected void createTestIndexNode() throws Exception {
+        Tree index = root.getTree("/");
+        createTestIndexNode(index, LuceneIndexConstants.TYPE_LUCENE);
+        root.commit();
+    }
+
+    private static NodeAggregator getNodeAggregator() {
+        return new SimpleNodeAggregator()
+            .newRuleWithName(NT_FILE, newArrayList("jcr:content"))
+            .newRuleWithName(NT_TEST_PAGE, newArrayList("jcr:content"))
+            .newRuleWithName(NT_TEST_PAGECONTENT, newArrayList("*", "*/*", 
"*/*/*", "*/*/*/*"))
+            .newRuleWithName(NT_TEST_ASSET, newArrayList("jcr:content"))
+            .newRuleWithName(
+                NT_TEST_ASSETCONTENT,
+                newArrayList("metadata", "renditions", "renditions/original", 
"comments",
+                    "renditions/original/jcr:content"))
+            .newRuleWithName("rep:User", newArrayList("profile"));
+    }
+        
+    @Ignore
+    @Test
+    public void oak2226() throws Exception {
+        setTraversalEnabled(false);
+        final String statement = "/jcr:root/content//element(*, test:Asset)[" +
+            "(jcr:contains(., 'mountain')) " +
+            "and (jcr:contains(jcr:content/metadata/@format, 'image'))]";
+        Tree content = root.getTree("/").addChild("content");
+        List<String> expected = Lists.newArrayList();
+        
+        /*
+         * creating structure
+         *  "/content" : {
+         *      "node" : {
+         *          "jcr:primaryType" : "test:Asset",
+         *          "jcr:content" : {
+         *              "jcr:primaryType" : "test:AssetContent",
+         *              "metadata" : {
+         *                  "jcr:primaryType" : "nt:unstructured",
+         *                  "title" : "Lorem mountain ipsum",
+         *                  "format" : "image/jpeg"
+         *              }
+         *          }
+         *      },
+         *      "mountain-node" : {
+         *          "jcr:primaryType" : "test:Asset",
+         *          "jcr:content" : {
+         *              "jcr:primaryType" : "test:AssetContent",
+         *              "metadata" : {
+         *                  "jcr:primaryType" : "nt:unstructured",
+         *                  "format" : "image/jpeg"
+         *              }
+         *          }
+         *      }
+         *  }
+         */
+        
+        
+        // adding a node with 'mountain' property
+        Tree node = content.addChild("node");
+        node.setProperty(JCR_PRIMARYTYPE, NT_TEST_ASSET, NAME);
+        expected.add(node.getPath());
+        node = node.addChild("jcr:content");
+        node.setProperty(JCR_PRIMARYTYPE, NT_TEST_ASSETCONTENT, NAME);
+        node = node.addChild("metadata");
+        node.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        node.setProperty("title", "Lorem mountain ipsum", STRING);
+        node.setProperty("format", "image/jpeg", STRING);
+        
+        // adding a node with 'mountain' name but not property
+        node = content.addChild("mountain-node");
+        node.setProperty(JCR_PRIMARYTYPE, NT_TEST_ASSET, NAME);
+        expected.add(node.getPath());
+        node = node.addChild("jcr:content");
+        node.setProperty(JCR_PRIMARYTYPE, NT_TEST_ASSETCONTENT, NAME);
+        node = node.addChild("metadata");
+        node.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
+        node.setProperty("format", "image/jpeg", STRING);
+        
+        root.commit();
+
+        assertQuery(statement, "xpath", expected);
+        setTraversalEnabled(true);
+    }
+
+}

Added: 
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/test_nodetypes.cnd
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/test_nodetypes.cnd?rev=1635094&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/test_nodetypes.cnd
 (added)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/test/resources/org/apache/jackrabbit/oak/plugins/index/lucene/test_nodetypes.cnd
 Wed Oct 29 10:48:49 2014
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+<test='http://jackrabbit.apache.org/oak-test/ns/1.0'>
+
+
+[test:PageContent] > nt:unstructured
+  orderable
+
+[test:Page] > nt:hierarchyNode
+  orderable primaryitem jcr:content
+  + jcr:content (nt:base) = nt:unstructured
+  + * (nt:base) = nt:base version
+
+[test:AssetContent] > nt:unstructured
+ + metadata (nt:unstructured)
+
+[test:Asset] > nt:hierarchyNode
+ + jcr:content (test:AssetContent) = test:AssetContent copy primary
+ + * (nt:base) = nt:base version


Reply via email to