You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2015/06/26 22:01:19 UTC

[2/3] camel git commit: CAMEL-8852 Added producer test related to different workspace URI param

CAMEL-8852 Added producer test related to different workspace URI param


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/73640069
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/73640069
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/73640069

Branch: refs/heads/master
Commit: 73640069e8d5368690b2929a3e54e28adc015f05
Parents: 0521060
Author: Andrea Cosentino <an...@gmail.com>
Authored: Fri Jun 26 15:37:19 2015 +0200
Committer: Andrea Cosentino <an...@gmail.com>
Committed: Fri Jun 26 21:58:41 2015 +0200

----------------------------------------------------------------------
 .../jcr/JcrConsumerDifferentWorkspaceTest.java  | 141 +++++++++++++++++++
 .../jcr/JcrProducerDifferentWorkspaceTest.java  |  64 +++++++++
 .../JcrRouteDifferentWorkspaceTestSupport.java  |  79 +++++++++++
 3 files changed, 284 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/73640069/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConsumerDifferentWorkspaceTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConsumerDifferentWorkspaceTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConsumerDifferentWorkspaceTest.java
new file mode 100644
index 0000000..cef11b8
--- /dev/null
+++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrConsumerDifferentWorkspaceTest.java
@@ -0,0 +1,141 @@
+/**
+ * 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.camel.component.jcr;
+
+import java.util.List;
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JcrConsumerDifferentWorkspaceTest extends JcrRouteDifferentWorkspaceTestSupport {
+
+    private static final Logger LOG = LoggerFactory.getLogger(JcrConsumerDifferentWorkspaceTest.class);
+
+    private String absPath = "/home/test";
+    private int eventTypes = Event.NODE_ADDED;
+    private boolean deep = true;
+    private boolean noLocal;
+
+    @Test
+    public void testJcrConsumer() throws Exception {
+        // start consumer thread first
+        JcrConsumerThread consumerThread = new JcrConsumerThread();
+        consumerThread.start();
+        // wait until the consumer thread has tried to receive event at least once
+        while (consumerThread.getReceiveTrialTimes() < 1) {
+            Thread.sleep(10L);
+        }
+
+        // now create a node under the specified event node path
+
+        Session session = openSession(CUSTOM_WORKSPACE_NAME);
+
+        try {
+            Node folderNode = session.getRootNode();
+
+            for (String folderNodeName : absPath.split("\\/")) {
+                if (!"".equals(folderNodeName)) {
+                    if (folderNode.hasNode(folderNodeName)) {
+                        folderNode.getNode(folderNodeName).remove();
+                    }
+
+                    folderNode = folderNode.addNode(folderNodeName, "nt:unstructured");
+                }
+            }
+
+            folderNode.addNode("node", "nt:unstructured");
+            session.save();
+        } finally {
+            if (session != null && session.isLive()) {
+                session.logout();
+            }
+        }
+
+        // wait until the consumer thread captures an event
+        consumerThread.join();
+
+        Exchange exchange = consumerThread.getExchange();
+        assertNotNull(exchange);
+
+        Message message = exchange.getIn();
+        assertNotNull(message);
+        assertTrue(message instanceof JcrMessage);
+        EventIterator eventIterator = ((JcrMessage)message).getEventIterator();
+        assertNotNull(eventIterator);
+        assertEquals(1, eventIterator.getSize());
+
+        List<?> eventList = message.getBody(List.class);
+        assertEquals(1, eventList.size());
+        Event event = (Event) eventList.get(0);
+        assertEquals(Event.NODE_ADDED, event.getType());
+        assertNotNull(event.getPath());
+        assertTrue(event.getPath().startsWith(absPath));
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                String uri = "jcr://user:pass@repository";
+                uri += absPath;
+                uri += "?eventTypes=" + eventTypes;
+                uri += "&deep=" + deep;
+                uri += "&noLocal=" + noLocal;
+                uri += "&workspaceName=" + CUSTOM_WORKSPACE_NAME;
+                from(uri).to("direct:a");
+            }
+        };
+    }
+
+    private class JcrConsumerThread extends Thread {
+
+        private Exchange exchange;
+        private int receiveTrialTimes;
+
+        public void run() {
+            while (exchange == null) {
+                exchange = consumer.receive("direct:a", 10L);
+                ++receiveTrialTimes;
+
+                try {
+                    Thread.sleep(10);
+                } catch (InterruptedException e) {
+                    break;
+                }
+            }
+
+            LOG.debug("JcrConsumerThread receive exchange, {} after {} trials", exchange, receiveTrialTimes);
+        }
+
+        public Exchange getExchange() {
+            return exchange;
+        }
+
+        public int getReceiveTrialTimes() {
+            return receiveTrialTimes;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/73640069/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerDifferentWorkspaceTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerDifferentWorkspaceTest.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerDifferentWorkspaceTest.java
new file mode 100644
index 0000000..a6d0ac6
--- /dev/null
+++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrProducerDifferentWorkspaceTest.java
@@ -0,0 +1,64 @@
+/**
+ * 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.camel.component.jcr;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.Workspace;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class JcrProducerDifferentWorkspaceTest extends JcrRouteDifferentWorkspaceTestSupport {
+    
+    @Test
+    public void testJcrProducer() throws Exception {
+        Exchange exchange = createExchangeWithBody("<hello>world!</hello>");
+        Exchange out = template.send("direct:a", exchange);
+        assertNotNull(out);
+        String uuid = out.getOut().getBody(String.class);
+        Session session = openSession(CUSTOM_WORKSPACE_NAME);
+        try {
+            Node node = session.getNodeByIdentifier(uuid);
+            Workspace workspace = session.getWorkspace();
+            assertEquals(CUSTOM_WORKSPACE_NAME, workspace.getName());
+            assertNotNull(node);
+            assertEquals("/home/test/node", node.getPath());
+            assertEquals("<hello>world!</hello>", node.getProperty("my.contents.property").getString());
+        } finally {
+            if (session != null && session.isLive()) {
+                session.logout();
+            }
+        }
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                // START SNIPPET: jcr-create-node
+                from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node"))
+                        .setHeader("my.contents.property", body())
+                        .to("jcr://user:pass@repository/home/test?workspaceName=" + CUSTOM_WORKSPACE_NAME);
+                // END SNIPPET: jcr-create-node
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/73640069/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteDifferentWorkspaceTestSupport.java
----------------------------------------------------------------------
diff --git a/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteDifferentWorkspaceTestSupport.java b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteDifferentWorkspaceTestSupport.java
new file mode 100644
index 0000000..2f81449
--- /dev/null
+++ b/components/camel-jcr/src/test/java/org/apache/camel/component/jcr/JcrRouteDifferentWorkspaceTestSupport.java
@@ -0,0 +1,79 @@
+/**
+ * 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.camel.component.jcr;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.Workspace;
+import javax.naming.Context;
+
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.jackrabbit.core.TransientRepository;
+import org.junit.Before;
+
+/**
+ * JcrRouteDifferentWorkspaceTestSupport
+ * 
+ */
+public abstract class JcrRouteDifferentWorkspaceTestSupport extends CamelTestSupport {
+
+    protected static final String CONFIG_FILE = "target/test-classes/repository-simple-security.xml";
+
+    protected static final String REPO_PATH = "target/repository-simple-diff-workspace";
+    
+    protected static final String CUSTOM_WORKSPACE_NAME = "testWorkspace";
+
+    private Repository repository;
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        deleteDirectory(REPO_PATH);
+        super.setUp();
+        Session session = getRepository().login(new SimpleCredentials("user", "pass".toCharArray()));
+        Workspace workspace = session.getWorkspace();
+        workspace.createWorkspace(CUSTOM_WORKSPACE_NAME);
+        session.save();
+        session.logout();
+    }
+
+    protected Repository getRepository() {
+        return repository;
+    }
+    
+    protected Session openSession(String workspaceName) throws RepositoryException {
+        return getRepository().login(new SimpleCredentials("user", "pass".toCharArray()), workspaceName);
+    }
+
+    @Override
+    protected Context createJndiContext() throws Exception {
+        File config = new File(CONFIG_FILE);
+        if (!config.exists()) {
+            throw new FileNotFoundException("Missing config file: " + config.getPath());
+        }
+        
+        Context context = super.createJndiContext();
+        repository = new TransientRepository(CONFIG_FILE, REPO_PATH);
+        context.bind("repository", repository);
+        return context;
+    }
+}