Updated tests to use localhost, and added bind retry in MllpServerResource

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

Branch: refs/heads/master
Commit: 97ca16847ecf6bf7f017931dfdaa6c3bd50cd52b
Parents: 8f09e4b
Author: Quinn Stevenson <qu...@pronoia-solutions.com>
Authored: Wed Jan 27 11:19:42 2016 -0700
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Jan 28 09:11:37 2016 +0100

----------------------------------------------------------------------
 .../mllp/MllpProducerConsumerLoopbackTest.java  |  7 +--
 ...llpTcpClientProducerAcknowledgementTest.java | 11 ++--
 .../mllp/MllpTcpClientProducerTest.java         |  4 +-
 .../MllpTcpServerConsumerBlueprintTest.java     |  4 ++
 .../MllpTcpServerConsumerConnectionTest.java    | 11 ++--
 .../junit/rule/mllp/MllpServerResource.java     | 63 ++++++++++++++++++--
 .../blueprint/mllp-tcp-client-producer-test.xml |  3 +-
 .../blueprint/mllp-tcp-server-consumer-test.xml |  3 +-
 8 files changed, 80 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
index 027de7c..8a392b5 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpProducerConsumerLoopbackTest.java
@@ -37,6 +37,7 @@ import static 
org.apache.camel.test.mllp.Hl7MessageGenerator.generateMessage;
 
 public class MllpProducerConsumerLoopbackTest extends CamelTestSupport {
     int mllpPort = AvailablePortFinder.getNextAvailable();
+    String mllpHost = "localhost";
 
     @EndpointInject(uri = "direct://source")
     ProducerTemplate source;
@@ -65,7 +66,7 @@ public class MllpProducerConsumerLoopbackTest extends 
CamelTestSupport {
             String routeId = "mllp-receiver";
 
             public void configure() {
-                fromF("mllp:%d?autoAck=true", mllpPort)
+                fromF("mllp://%s:%d?autoAck=true", mllpHost, mllpPort)
                         .convertBodyTo(String.class)
                         .to(acknowledged)
                         .process(new PassthroughProcessor("after send to 
result"))
@@ -77,12 +78,10 @@ public class MllpProducerConsumerLoopbackTest extends 
CamelTestSupport {
         builders[1] = new RouteBuilder() {
             String routeId = "mllp-sender";
 
-            String host = "0.0.0.0";
-
             public void configure() {
                 from(source.getDefaultEndpoint()).routeId(routeId)
                         .log(LoggingLevel.DEBUG, routeId, "Sending: ${body}")
-                        .toF("mllp://%s:%d", host, mllpPort)
+                        .toF("mllp://%s:%d", mllpHost, mllpPort)
                         .setBody(header(MllpConstants.MLLP_ACKNOWLEDGEMENT))
                         
.toF("log://%s?level=INFO&groupInterval=%d&groupActiveOnly=%b", routeId, 
groupInterval, groupActiveOnly);
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerAcknowledgementTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerAcknowledgementTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerAcknowledgementTest.java
index af41550..38838ae 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerAcknowledgementTest.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerAcknowledgementTest.java
@@ -35,8 +35,10 @@ import static 
org.apache.camel.test.mllp.Hl7MessageGenerator.generateMessage;
 
 
 public class MllpTcpClientProducerAcknowledgementTest extends CamelTestSupport 
{
+    String mllpHost = "localhost";
+
     @Rule
-    public MllpServerResource mllpServer = new 
MllpServerResource(AvailablePortFinder.getNextAvailable());
+    public MllpServerResource mllpServer = new MllpServerResource(mllpHost, 
AvailablePortFinder.getNextAvailable());
 
     @EndpointInject(uri = "direct://source")
     ProducerTemplate source;
@@ -67,14 +69,11 @@ public class MllpTcpClientProducerAcknowledgementTest 
extends CamelTestSupport {
         return new RouteBuilder() {
             String routeId = "mllp-sender";
 
-            String host = "0.0.0.0";
-            int port = mllpServer.getListenPort();
-
             public void configure() {
                 
onException(MllpApplicationRejectAcknowledgementException.class)
                         .handled(true)
                         .to(reject)
-                        .log(LoggingLevel.ERROR, routeId, "AR 
Acknowledgemnet");
+                        .log(LoggingLevel.ERROR, routeId, "AR 
Acknowledgement");
 
                 onException(MllpApplicationErrorAcknowledgementException.class)
                         .handled(true)
@@ -88,7 +87,7 @@ public class MllpTcpClientProducerAcknowledgementTest extends 
CamelTestSupport {
 
                 from(source.getDefaultEndpoint()).routeId(routeId)
                         .log(LoggingLevel.INFO, routeId, "Sending Message")
-                        .toF("mllp://%s:%d", host, port)
+                        .toF("mllp://%s:%d", mllpServer.getListenHost(), 
mllpServer.getListenPort())
                         .log(LoggingLevel.INFO, routeId, "Received 
Acknowledgement")
                         .to(accept);
             }

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerTest.java
index dc8d594..2dcd40b 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerTest.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpClientProducerTest.java
@@ -36,7 +36,7 @@ import static 
org.apache.camel.test.mllp.Hl7MessageGenerator.generateMessage;
 
 public class MllpTcpClientProducerTest extends CamelTestSupport {
     @Rule
-    public MllpServerResource mllpServer = new 
MllpServerResource(AvailablePortFinder.getNextAvailable());
+    public MllpServerResource mllpServer = new MllpServerResource("localhost", 
AvailablePortFinder.getNextAvailable());
 
     @EndpointInject(uri = "direct://source")
     ProducerTemplate source;
@@ -94,7 +94,7 @@ public class MllpTcpClientProducerTest extends 
CamelTestSupport {
                         .routeId("mllp-sender-test-route")
                         .log(LoggingLevel.INFO, "Sending Message: 
$simple{header[CamelHL7MessageControl]}")
                         
.toF("mllp://%s:%d?connectTimeout=%d&receiveTimeout=%d",
-                                "0.0.0.0", mllpServer.getListenPort(), 
connectTimeout, responseTimeout)
+                                mllpServer.getListenHost(), 
mllpServer.getListenPort(), connectTimeout, responseTimeout)
                         .to(acknowledged);
 
                 from("direct://handle-timeout")

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBlueprintTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBlueprintTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBlueprintTest.java
index c7dd2c9..4cc8110 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBlueprintTest.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerBlueprintTest.java
@@ -35,6 +35,8 @@ import org.junit.Test;
 import static org.apache.camel.test.mllp.Hl7MessageGenerator.generateMessage;
 
 public class MllpTcpServerConsumerBlueprintTest extends 
CamelBlueprintTestSupport {
+    String mllpHost = "localhost";
+
     @Rule
     public MllpClientResource mllpClient = new MllpClientResource();
 
@@ -59,11 +61,13 @@ public class MllpTcpServerConsumerBlueprintTest extends 
CamelBlueprintTestSuppor
 
     @Override
     protected Properties useOverridePropertiesWithPropertiesComponent() {
+        mllpClient.setMllpHost(mllpHost);
         mllpClient.setMllpPort(AvailablePortFinder.getNextAvailable());
 
         Properties props = new Properties();
 
         props.setProperty("receivedUri", receivedUri);
+        props.setProperty( "mllp.host", mllpClient.getMllpHost());
         props.setProperty("mllp.port", 
Integer.toString(mllpClient.getMllpPort()));
 
         return props;

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
index fab33a5..99667b2 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/component/mllp/MllpTcpServerConsumerConnectionTest.java
@@ -30,7 +30,9 @@ import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
 public class MllpTcpServerConsumerConnectionTest extends CamelTestSupport {
-    int mllpPort;
+    String mllpHost = "localhost";
+    int mllpPort = AvailablePortFinder.getNextAvailable();
+
     @EndpointInject(uri = "mock://result")
     MockEndpoint result;
 
@@ -41,11 +43,8 @@ public class MllpTcpServerConsumerConnectionTest extends 
CamelTestSupport {
         return new RouteBuilder() {
             String routeId = "mllp-receiver";
 
-            String host = "0.0.0.0";
-            int port = mllpPort;
-
             public void configure() {
-                fromF("mllp:%d?autoAck=false", port)
+                fromF("mllp://%s:%d?autoAck=false", mllpHost, mllpPort)
                         .log(LoggingLevel.INFO, routeId, "Receiving: ${body}")
                         .to(result);
             }
@@ -74,7 +73,7 @@ public class MllpTcpServerConsumerConnectionTest extends 
CamelTestSupport {
         int connectionCount = 10;
 
         Socket dummyLoadBalancerSocket = null;
-        SocketAddress address = new InetSocketAddress("localhost", mllpPort);
+        SocketAddress address = new InetSocketAddress(mllpHost, mllpPort);
         int connectTimeout = 5000;
         try {
             for (int i = 1; i <= connectionCount; ++i) {

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpServerResource.java
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpServerResource.java
 
b/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpServerResource.java
index 8215d1b..dc68fbb 100644
--- 
a/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpServerResource.java
+++ 
b/components/camel-mllp/src/test/java/org/apache/camel/test/junit/rule/mllp/MllpServerResource.java
@@ -19,6 +19,7 @@ package org.apache.camel.test.junit.rule.mllp;
 import java.io.BufferedOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.BindException;
 import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
@@ -49,6 +50,7 @@ import static  
org.apache.camel.component.mllp.MllpEndpoint.START_OF_BLOCK;
 public class MllpServerResource extends ExternalResource {
     Logger log = LoggerFactory.getLogger(this.getClass());
 
+    String listenHost;
     int listenPort;
     int backlog = 5;
 
@@ -87,6 +89,25 @@ public class MllpServerResource extends ExternalResource {
         this.backlog = backlog;
     }
 
+    public MllpServerResource(String listenHost, int listenPort) {
+        this.listenHost = listenHost;
+        this.listenPort = listenPort;
+    }
+
+    public MllpServerResource(String listenHost, int listenPort, int backlog) {
+        this.listenHost = listenHost;
+        this.listenPort = listenPort;
+        this.backlog = backlog;
+    }
+
+    public String getListenHost() {
+        return listenHost;
+    }
+
+    public void setListenHost(String listenHost) {
+        this.listenHost = listenHost;
+    }
+
     public int getListenPort() {
         return listenPort;
     }
@@ -105,10 +126,18 @@ public class MllpServerResource extends ExternalResource {
 
     public void startup() throws IOException {
         this.active = true;
-        serverSocketThread = new ServerSocketThread(listenPort, backlog);
+
+        if ( null != listenHost ) {
+            serverSocketThread = new ServerSocketThread(listenHost, 
listenPort, backlog);
+        } else {
+            serverSocketThread = new ServerSocketThread(listenPort, backlog);
+            listenHost = serverSocketThread.getListenHost();
+        }
+
         if (0 >= listenPort) {
             listenPort = serverSocketThread.listenPort;
         }
+
         serverSocketThread.setDaemon(true);
         serverSocketThread.start();
     }
@@ -456,10 +485,14 @@ public class MllpServerResource extends ExternalResource {
     class ServerSocketThread extends Thread {
         Logger log = LoggerFactory.getLogger(this.getClass());
 
+        final long bindTimeout = 30000;
+        final long bindRetryDelay = 1000;
+
+
         ServerSocket serverSocket;
         List<ClientSocketThread> clientSocketThreads = new LinkedList<>();
 
-        String listenHost = "0.0.0.0";
+        String listenHost;
         int listenPort;
         int backlog = 5;
 
@@ -500,12 +533,30 @@ public class MllpServerResource extends ExternalResource {
 
             // Set TCP Parameters
             serverSocket.setSoTimeout(acceptTimeout);
-            serverSocket.setReuseAddress(false);
+            serverSocket.setReuseAddress(true);
 
-            if (0 >= listenPort) {
-                serverSocket.bind(null, backlog);
+            InetSocketAddress listenAddress;
+            if ( null != this.listenHost ) {
+                listenAddress = new InetSocketAddress(this.listenHost, 
this.listenPort);
             } else {
-                serverSocket.bind(new InetSocketAddress(this.listenHost, 
this.listenPort), backlog);
+                listenAddress = new InetSocketAddress( this.listenPort );
+            }
+
+            long startTicks = System.currentTimeMillis();
+            while (!serverSocket.isBound()) {
+                try {
+                    serverSocket.bind(listenAddress, backlog);
+                } catch ( BindException bindEx ) {
+                    if ( System.currentTimeMillis() < startTicks + 
bindTimeout) {
+                        log.warn( "Unable to bind to {} - retrying in {} 
milliseconds", listenAddress.toString(), bindRetryDelay);
+                        try {
+                            Thread.sleep(bindRetryDelay);
+                        } catch (InterruptedException interruptedEx) {
+                            log.error( "Wait for bind retry was interrupted - 
rethrowing BindException");
+                            throw bindEx;
+                        }
+                    }
+                }
             }
 
             if (0 >= this.listenPort) {

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-client-producer-test.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-client-producer-test.xml
 
b/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-client-producer-test.xml
index 627ed03..261d62f 100644
--- 
a/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-client-producer-test.xml
+++ 
b/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-client-producer-test.xml
@@ -32,6 +32,7 @@
             <property name="frameErrorUri" value="mock://frame-ex" />
             <property name="errorAcknowledgementUri" value="mock://ae-ack" />
             <property name="rejectAcknowledgementUri" value="mock://ar-ack" />
+            <property name="mllp.host" value="localhost" />
             <property name="mllp.port" value="7777" />
         </default-properties>
     </property-placeholder>
@@ -104,7 +105,7 @@
         <route id="direct-to-mllp">
             <from uri="{{sourceUri}}" />
             <log loggingLevel="DEBUG" message="sending message: 
$simple{header[CamelMllpMessageControlId]}" />
-            <to uri="mllp://{{mllp.port}}"/>
+            <to uri="mllp://{{mllp.host}}:{{mllp.port}}"/>
             <to uri="{{acknowledgedUri}}"/>
             <log loggingLevel="DEBUG" message="message sent: 
$simple{header[CamelMllpMessageControlId]}" />
             <to uri="log:direct-to-mllp?level=INFO&amp;groupSize=50" />

http://git-wip-us.apache.org/repos/asf/camel/blob/97ca1684/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-server-consumer-test.xml
----------------------------------------------------------------------
diff --git 
a/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-server-consumer-test.xml
 
b/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-server-consumer-test.xml
index f90ef63..dda70da 100644
--- 
a/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-server-consumer-test.xml
+++ 
b/components/camel-mllp/src/test/resources/OSGI-INF/blueprint/mllp-tcp-server-consumer-test.xml
@@ -27,6 +27,7 @@
     <property-placeholder persistent-id="MllpTcpServerConsumerBlueprintTest" 
update-strategy="reload" 
xmlns="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"; >
         <default-properties>
             <property name="receivedUri" value="mock://received" />
+            <property name="mllp.host" value="localhost" />
             <property name="mllp.port" value="7777" />
         </default-properties>
     </property-placeholder>
@@ -36,7 +37,7 @@
     <camelContext id="tcp-server-consumer-context" useMDCLogging="true" 
xmlns="http://camel.apache.org/schema/blueprint";>
         <!-- TODO:  Add exception handlers -->
         <route>
-            <from uri="mllp://{{mllp.port}}" />
+            <from uri="mllp://{{mllp.host}}:{{mllp.port}}" />
             <to uri="{{receivedUri}}" />
         </route>
     </camelContext>

Reply via email to