From 9bcca4003a967b1acab3474081e6026f8c505e90 Mon Sep 17 00:00:00 2001 From: Johannes Rudolph Date: Thu, 17 Jan 2013 15:07:00 +0100 Subject: [PATCH] in tests make sure to get a server address that is highly probable to be currently unbound --- .../src/test/scala/akka/io/TcpConnectionSpec.scala | 11 ++++------- .../src/test/scala/akka/io/TcpListenerSpec.scala | 12 +++++------- .../scala/akka/io/TemporaryServerAddress.scala | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 akka-io/src/test/scala/akka/io/TemporaryServerAddress.scala diff --git a/akka-io/src/test/scala/akka/io/TcpConnectionSpec.scala b/akka-io/src/test/scala/akka/io/TcpConnectionSpec.scala index 6dd5810e17..0265781c90 100644 --- a/akka-io/src/test/scala/akka/io/TcpConnectionSpec.scala +++ b/akka-io/src/test/scala/akka/io/TcpConnectionSpec.scala @@ -14,16 +14,13 @@ import java.net._ import scala.collection.immutable import scala.concurrent.duration._ import scala.util.control.NonFatal -import akka.actor.{ ActorRef, Props, Actor, Terminated } +import akka.actor.{ ActorRef, Terminated } import akka.testkit.{ TestProbe, TestActorRef, AkkaSpec } import akka.util.ByteString import Tcp._ -import java.util.concurrent.CountDownLatch class TcpConnectionSpec extends AkkaSpec("akka.io.tcp.register-timeout = 500ms") { - val port = 45679 - val localhost = InetAddress.getLocalHost - val serverAddress = new InetSocketAddress(localhost, port) + val serverAddress = TemporaryServerAddress.get("127.0.0.1") "An outgoing connection" must { // common behavior @@ -248,9 +245,9 @@ class TcpConnectionSpec extends AkkaSpec("akka.io.tcp.register-timeout = 500ms") assertActorTerminated(connectionActor) } - val UnknownAddress = new InetSocketAddress("127.0.0.1", 63186) + val UnboundAddress = TemporaryServerAddress.get("127.0.0.1") "report failed connection attempt when target is unreachable" in - withUnacceptedConnection(connectionActorCons = createConnectionActor(serverAddress = UnknownAddress)) { setup ⇒ + withUnacceptedConnection(connectionActorCons = createConnectionActor(serverAddress = UnboundAddress)) { setup ⇒ import setup._ val sel = SelectorProvider.provider().openSelector() diff --git a/akka-io/src/test/scala/akka/io/TcpListenerSpec.scala b/akka-io/src/test/scala/akka/io/TcpListenerSpec.scala index addf9f7f16..0619038c54 100644 --- a/akka-io/src/test/scala/akka/io/TcpListenerSpec.scala +++ b/akka-io/src/test/scala/akka/io/TcpListenerSpec.scala @@ -14,15 +14,13 @@ import akka.pattern.ask import Tcp._ class TcpListenerSpec extends AkkaSpec("akka.io.tcp.batch-accept-limit = 2") { - val port = 47323 - "A TcpListener" must { val manager = TestProbe() val selector = TestProbe() val handler = TestProbe() val handlerRef = handler.ref val bindCommander = TestProbe() - val endpoint = new InetSocketAddress("localhost", port) + val endpoint = TemporaryServerAddress.get("127.0.0.1") val listener = TestActorRef(new TcpListener(manager.ref, selector.ref, handler.ref, endpoint, 100, bindCommander.ref, Nil)) var serverSocketChannel: Option[ServerSocketChannel] = None @@ -38,9 +36,9 @@ class TcpListenerSpec extends AkkaSpec("akka.io.tcp.batch-accept-limit = 2") { } "accept two acceptable connections at once and register them with the manager" in { - new Socket("localhost", port) - new Socket("localhost", port) - new Socket("localhost", port) + new Socket("localhost", endpoint.getPort) + new Socket("localhost", endpoint.getPort) + new Socket("localhost", endpoint.getPort) listener ! ChannelAcceptable val RegisterIncomingConnection(_, `handlerRef`, Nil) = manager.receiveOne(Duration.Zero) val RegisterIncomingConnection(_, `handlerRef`, Nil) = manager.receiveOne(Duration.Zero) @@ -59,4 +57,4 @@ class TcpListenerSpec extends AkkaSpec("akka.io.tcp.batch-accept-limit = 2") { } } -} \ No newline at end of file +} diff --git a/akka-io/src/test/scala/akka/io/TemporaryServerAddress.scala b/akka-io/src/test/scala/akka/io/TemporaryServerAddress.scala new file mode 100644 index 0000000000..f006ed70e5 --- /dev/null +++ b/akka-io/src/test/scala/akka/io/TemporaryServerAddress.scala @@ -0,0 +1,14 @@ +package akka.io + +import java.nio.channels.ServerSocketChannel +import java.net.InetSocketAddress + +object TemporaryServerAddress { + def get(address: String): InetSocketAddress = { + val serverSocket = ServerSocketChannel.open() + serverSocket.socket.bind(new InetSocketAddress(address, 0)) + val port = serverSocket.socket.getLocalPort + serverSocket.close() + new InetSocketAddress(address, port) + } +}