CAMEL-10303 - Added MllpTcpServerConsumerTransactionTest

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

Branch: refs/heads/master
Commit: 404fae80bebc1ffcafdce96bee04f6d20749f16f
Parents: 53074f5
Author: Quinn Stevenson <qu...@pronoia-solutions.com>
Authored: Wed Sep 14 09:39:38 2016 -0600
Committer: Andrea Cosentino <anco...@gmail.com>
Committed: Thu Sep 15 09:23:23 2016 +0200

----------------------------------------------------------------------
 components/camel-mllp/pom.xml                   |  16 +++
 .../MllpTcpServerConsumerTransactionTest.java   | 144 +++++++++++++++++++
 2 files changed, 160 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/404fae80/components/camel-mllp/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-mllp/pom.xml b/components/camel-mllp/pom.xml
index 1e28332..7dc91ee 100644
--- a/components/camel-mllp/pom.xml
+++ b/components/camel-mllp/pom.xml
@@ -58,6 +58,22 @@
       <artifactId>camel-test-blueprint</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-sjms</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.activemq</groupId>
+      <artifactId>activemq-broker</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.activemq.tooling</groupId>
+      <artifactId>activemq-junit</artifactId>
+      <version>${activemq-version}</version>
+      <scope>test</scope>
+    </dependency>
 
     <!-- test logging -->   
     <dependency>

http://git-wip-us.apache.org/repos/asf/camel/blob/404fae80/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerTransactionTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerTransactionTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerTransactionTest.java
new file mode 100644
index 0000000..a343564
--- /dev/null
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerTransactionTest.java
@@ -0,0 +1,144 @@
+/**
+ * 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.mllp;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.activemq.junit.EmbeddedActiveMQBroker;
+import org.apache.camel.CamelContext;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.LoggingLevel;
+import org.apache.camel.builder.NotifyBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.sjms.SjmsComponent;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.camel.test.junit.rule.mllp.MllpClientResource;
+import org.apache.camel.test.junit.rule.mllp.MllpJUnitResourceException;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.apache.camel.test.mllp.Hl7MessageGenerator.generateMessage;
+
+public class MllpTcpServerConsumerTransactionTest extends CamelTestSupport {
+    @Rule
+    public EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker();
+
+    @Rule
+    public MllpClientResource mllpClient = new MllpClientResource();
+
+    @EndpointInject(uri = "mock://result")
+    MockEndpoint result;
+
+    @EndpointInject(uri = "mock://on-complete-only")
+    MockEndpoint complete;
+
+    @EndpointInject(uri = "mock://on-failure-only")
+    MockEndpoint failure;
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+
+        SjmsComponent target = new SjmsComponent();
+        target.setConnectionFactory(broker.createConnectionFactory());
+        registry.bind("target", target);
+
+        return registry;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        DefaultCamelContext context = (DefaultCamelContext) 
super.createCamelContext();
+
+        context.setUseMDCLogging(true);
+        context.setName(this.getClass().getSimpleName());
+
+        return context;
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+
+        mllpClient.setMllpHost("localhost");
+        mllpClient.setMllpPort(AvailablePortFinder.getNextAvailable());
+
+        return new RouteBuilder() {
+            int connectTimeout = 500;
+            int responseTimeout = 5000;
+
+            @Override
+            public void configure() throws Exception {
+                String routeId = "mllp-test-receiver-route";
+
+                onCompletion()
+                        .onCompleteOnly()
+                        .log(LoggingLevel.INFO, routeId, "Test route complete")
+                        .to(complete);
+
+                onCompletion()
+                        .onFailureOnly()
+                        .log(LoggingLevel.INFO, routeId, "Test route failed")
+                        .to(failure);
+
+                
fromF("mllp://%s:%d?autoAck=true&connectTimeout=%d&receiveTimeout=%d",
+                        mllpClient.getMllpHost(), mllpClient.getMllpPort(), 
connectTimeout, responseTimeout)
+                        .routeId(routeId)
+                        .log(LoggingLevel.INFO, routeId, "Test route received 
message")
+                        .to("target://test-queue?transacted=true");
+
+                from("target://test-queue")
+                        .routeId("jms-consumer")
+                        .log(LoggingLevel.INFO, routeId, "Test JMS Consumer 
received message")
+                        .to(result);
+
+            }
+        };
+    }
+
+    @Test
+    public void testReceiveSingleMessage() throws Exception {
+        result.expectedMessageCount(1);
+        complete.expectedMessageCount(1);
+        failure.expectedMessageCount(0);
+
+        mllpClient.connect();
+
+        mllpClient.sendMessageAndWaitForAcknowledgement(generateMessage(), 
10000);
+
+        assertMockEndpointsSatisfied(10, TimeUnit.SECONDS);
+    }
+
+    @Test
+    public void testAcknowledgementWriteFailure() throws Exception {
+        result.expectedMessageCount(0);
+        result.setAssertPeriod(1000);
+        complete.expectedMessageCount(0);
+        failure.expectedMessageCount(1);
+
+        mllpClient.connect();
+        
mllpClient.setDisconnectMethod(MllpClientResource.DisconnectMethod.RESET);
+
+        mllpClient.sendFramedData(generateMessage(), true);
+
+        assertMockEndpointsSatisfied(10, TimeUnit.SECONDS);
+    }
+}
+

Reply via email to