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