You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuweni.apache.org by to...@apache.org on 2020/02/08 19:09:36 UTC

[incubator-tuweni] branch master updated: Use port zero more to make tests more resilient

This is an automated email from the ASF dual-hosted git repository.

toulmean pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git


The following commit(s) were added to refs/heads/master by this push:
     new 2606716  Use port zero more to make tests more resilient
2606716 is described below

commit 2606716df68f0e8898e9f241bc617970862c38aa
Author: Antoine Toulme <an...@lunar-ocean.com>
AuthorDate: Sat Feb 8 11:09:21 2020 -0800

    Use port zero more to make tests more resilient
---
 .../org/apache/tuweni/hobbits/HobbitsTransport.kt  | 37 ++++++++++++----
 .../apache/tuweni/hobbits/HobbitsTransportTest.kt  |  4 +-
 .../org/apache/tuweni/hobbits/InteractionTest.kt   | 51 +++++++++++++---------
 3 files changed, 61 insertions(+), 31 deletions(-)

diff --git a/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt b/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
index f31999c..7eee79f 100644
--- a/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
+++ b/hobbits/src/main/kotlin/org/apache/tuweni/hobbits/HobbitsTransport.kt
@@ -93,10 +93,11 @@ class HobbitsTransport(
     port: Int = 9337,
     requestURI: String? = null,
     tls: Boolean = false,
-    handler: (Message) -> Unit
+    handler: (Message) -> Unit,
+    portUpdateListener: (Int) -> Unit = {}
   ) {
     checkNotStarted()
-    httpEndpoints[id] = Endpoint(networkInterface, port, requestURI, tls, handler)
+    httpEndpoints[id] = Endpoint(networkInterface, port, requestURI, tls, handler, portUpdateListener)
   }
 
   /**
@@ -111,10 +112,11 @@ class HobbitsTransport(
     networkInterface: String = "0.0.0.0",
     port: Int = 9237,
     tls: Boolean = false,
-    handler: (Message) -> Unit
+    handler: (Message) -> Unit,
+    portUpdateListener: (Int) -> Unit = {}
   ) {
     checkNotStarted()
-    tcpEndpoints[id] = Endpoint(networkInterface, port, null, tls, handler)
+    tcpEndpoints[id] = Endpoint(networkInterface, port, null, tls, handler, portUpdateListener)
   }
 
   /**
@@ -148,10 +150,11 @@ class HobbitsTransport(
     port: Int = 9037,
     requestURI: String? = null,
     tls: Boolean = false,
-    handler: (Message) -> Unit
+    handler: (Message) -> Unit,
+    portUpdateListener: (Int) -> Unit = {}
   ) {
     checkNotStarted()
-    wsEndpoints[id] = Endpoint(networkInterface, port, requestURI, tls, handler)
+    wsEndpoints[id] = Endpoint(networkInterface, port, requestURI, tls, handler, portUpdateListener)
   }
 
   /**
@@ -280,6 +283,9 @@ class HobbitsTransport(
             completion.completeExceptionally(it.cause())
           } else {
             completion.complete()
+            if (endpoint.port == 0) {
+              endpoint.updatePort(it.result().actualPort())
+            }
           }
         }
         completions.add(completion)
@@ -302,6 +308,9 @@ class HobbitsTransport(
             completion.completeExceptionally(it.cause())
           } else {
             completion.complete()
+            if (endpoint.port == 0) {
+              endpoint.updatePort(it.result().actualPort())
+            }
           }
         }
         completions.add(completion)
@@ -359,6 +368,9 @@ class HobbitsTransport(
             completion.completeExceptionally(it.cause())
           } else {
             completion.complete()
+            if (endpoint.port == 0) {
+              endpoint.updatePort(it.result().actualPort())
+            }
           }
         }
         completions.add(completion)
@@ -402,11 +414,18 @@ class HobbitsTransport(
 
 internal data class Endpoint(
   val networkInterface: String,
-  val port: Int,
+  var port: Int,
   val requestURI: String?,
   val tls: Boolean,
-  val handler: (Message) -> Unit
-)
+  val handler: (Message) -> Unit,
+  val portUpdateListener: (Int) -> Unit = {}
+) {
+
+  fun updatePort(newPort: Int) {
+    port = newPort
+    portUpdateListener(newPort)
+  }
+}
 
 /**
  * Transport types supported.
diff --git a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
index db7ed30..c527a22 100644
--- a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
+++ b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/HobbitsTransportTest.kt
@@ -70,11 +70,11 @@ class HobbitsTransportTest {
       it.handler {
           completion.complete(Bytes.wrapBuffer(it))
       }
-    }.listen(10000, "localhost")
+    }.listen(0, "localhost")
     val server = HobbitsTransport(vertx)
     server.start()
     val msg = Message(protocol = Protocol.RPC, headers = Bytes.EMPTY, body = Bytes.EMPTY)
-    server.sendMessage(msg, Transport.TCP, "localhost", 10000)
+    server.sendMessage(msg, Transport.TCP, "localhost", listening.actualPort())
     val result = completion.await()
     assertEquals(msg.toBytes(), result)
   }
diff --git a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
index 4be3820..705538f 100644
--- a/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
+++ b/hobbits/src/test/kotlin/org/apache/tuweni/hobbits/InteractionTest.kt
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Disabled
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.extension.ExtendWith
+import java.util.concurrent.atomic.AtomicInteger
 import java.util.concurrent.atomic.AtomicReference
 
 @ExtendWith(VertxExtension::class)
@@ -33,17 +34,18 @@ class TCPPersistentTest {
   @Test
   fun testTwoTCPConnections(@VertxInstance vertx: Vertx) {
     val ref = AtomicReference<Message>()
+    val newPort = AtomicInteger()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 10000, handler = ref::set)
+      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
         "0.0.0.0",
-        10000
+        newPort.get()
       )
     }
     Thread.sleep(200)
@@ -56,17 +58,18 @@ class TCPPersistentTest {
   @Test
   fun testTwoTCPConnectionsWithTLS(@VertxInstance vertx: Vertx) {
     val ref = AtomicReference<Message>()
+    val newPort = AtomicInteger()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 11000, handler = ref::set, tls = true)
+      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, tls = true, portUpdateListener = newPort::set)
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
         "0.0.0.0",
-        11000
+        newPort.get()
       )
     }
     Thread.sleep(200)
@@ -79,24 +82,26 @@ class TCPPersistentTest {
   fun testTwoEndpoints(@VertxInstance vertx: Vertx) {
     val ref = AtomicReference<Message>()
     val ref2 = AtomicReference<Message>()
+    val newPort = AtomicInteger()
+    val newPort2 = AtomicInteger()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
     runBlocking {
-      client1.createTCPEndpoint("foo", port = 12000, handler = ref::set)
-      client1.createTCPEndpoint("bar", port = 12001, handler = ref2::set)
+      client1.createTCPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createTCPEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
         "0.0.0.0",
-        12000
+        newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.TCP,
         "0.0.0.0",
-        12001
+        newPort2.get()
       )
     }
     Thread.sleep(200)
@@ -114,13 +119,14 @@ class HTTPTest {
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
+    val newPort = AtomicInteger()
 
     runBlocking {
-      client1.createHTTPEndpoint("foo", port = 13000, handler = ref::set)
+      client1.createHTTPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
       client1.start()
       client2.start()
       client2.sendMessage(Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
-        headers = Bytes.random(16)), Transport.HTTP, "0.0.0.0", 13000)
+        headers = Bytes.random(16)), Transport.HTTP, "0.0.0.0", newPort.get())
     }
     Thread.sleep(200)
     assertEquals(Bytes.fromHexString("deadbeef"), ref.get().body)
@@ -134,22 +140,24 @@ class HTTPTest {
     val ref2 = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
+    val newPort = AtomicInteger()
+    val newPort2 = AtomicInteger()
     runBlocking {
-      client1.createHTTPEndpoint("foo", port = 14000, handler = ref::set)
-      client1.createHTTPEndpoint("bar", port = 14001, handler = ref2::set)
+      client1.createHTTPEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createHTTPEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.HTTP,
         "0.0.0.0",
-        14000
+        newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.HTTP,
         "0.0.0.0",
-        14001
+        newPort2.get()
       )
     }
     Thread.sleep(200)
@@ -221,13 +229,14 @@ class WebSocketTest {
     val ref = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
+    val newPort = AtomicInteger()
 
     runBlocking {
-      client1.createWSEndpoint("foo", port = 17000, handler = ref::set)
+      client1.createWSEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
       client1.start()
       client2.start()
       client2.sendMessage(Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"),
-        headers = Bytes.random(16)), Transport.WS, "0.0.0.0", 17000)
+        headers = Bytes.random(16)), Transport.WS, "0.0.0.0", newPort.get())
     }
     Thread.sleep(200)
     assertEquals(Bytes.fromHexString("deadbeef"), ref.get().body)
@@ -241,24 +250,26 @@ class WebSocketTest {
     val ref2 = AtomicReference<Message>()
     val client1 = HobbitsTransport(vertx)
     val client2 = HobbitsTransport(vertx)
+    val newPort = AtomicInteger()
+    val newPort2 = AtomicInteger()
     runBlocking {
       client1.exceptionHandler { it.printStackTrace() }
       client2.exceptionHandler { it.printStackTrace() }
-      client1.createWSEndpoint("foo", port = 18000, handler = ref::set)
-      client1.createWSEndpoint("bar", port = 18001, handler = ref2::set)
+      client1.createWSEndpoint("foo", port = 0, handler = ref::set, portUpdateListener = newPort::set)
+      client1.createWSEndpoint("bar", port = 0, handler = ref2::set, portUpdateListener = newPort2::set)
       client1.start()
       client2.start()
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.WS,
         "0.0.0.0",
-        18000
+        newPort.get()
       )
       client2.sendMessage(
         Message(protocol = Protocol.PING, body = Bytes.fromHexString("deadbeef"), headers = Bytes.random(16)),
         Transport.WS,
         "0.0.0.0",
-        18001
+        newPort2.get()
       )
     }
     Thread.sleep(200)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@tuweni.apache.org
For additional commands, e-mail: commits-help@tuweni.apache.org