From 3b41eaa1f7b84937fca2dc10b8ffeaf365fabbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Mon, 22 Apr 2013 11:43:38 +0200 Subject: [PATCH] Udp tests now use port acquired from a DatagramSocket #3245 --- .../src/test/scala/akka/TestUtils.scala | 27 ++++++++++++------- .../akka/io/UdpConnectedIntegrationSpec.scala | 2 +- .../scala/akka/io/UdpIntegrationSpec.scala | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/TestUtils.scala b/akka-actor-tests/src/test/scala/akka/TestUtils.scala index eb79aeb4ef..9cf777ddb5 100644 --- a/akka-actor-tests/src/test/scala/akka/TestUtils.scala +++ b/akka-actor-tests/src/test/scala/akka/TestUtils.scala @@ -5,22 +5,31 @@ package akka import scala.collection.immutable -import java.net.InetSocketAddress -import java.nio.channels.ServerSocketChannel +import java.net.{ SocketAddress, ServerSocket, DatagramSocket, InetSocketAddress } +import java.nio.channels.{ DatagramChannel, ServerSocketChannel } import akka.actor.{ Terminated, ActorSystem, ActorRef } import akka.testkit.TestProbe object TestUtils { - def temporaryServerAddress(address: String = "127.0.0.1"): InetSocketAddress = - temporaryServerAddresses(1, address).head + // Structural type needed since DatagramSocket and ServerSocket has no common ancestor apart from Object + type GeneralSocket = { + def bind(sa: SocketAddress): Unit + def close(): Unit + def getLocalPort(): Int + } - def temporaryServerAddresses(numberOfAddresses: Int, hostname: String = "127.0.0.1"): immutable.IndexedSeq[InetSocketAddress] = { + def temporaryServerAddress(address: String = "127.0.0.1", udp: Boolean = false): InetSocketAddress = + temporaryServerAddresses(1, address, udp).head + + def temporaryServerAddresses(numberOfAddresses: Int, hostname: String = "127.0.0.1", udp: Boolean = false): immutable.IndexedSeq[InetSocketAddress] = { val sockets = for (_ ← 1 to numberOfAddresses) yield { - val serverSocket = ServerSocketChannel.open() - serverSocket.socket.bind(new InetSocketAddress(hostname, 0)) - val port = serverSocket.socket.getLocalPort - (serverSocket, new InetSocketAddress(hostname, port)) + val serverSocket: GeneralSocket = + if (udp) DatagramChannel.open().socket() + else ServerSocketChannel.open().socket() + + serverSocket.bind(new InetSocketAddress(hostname, 0)) + (serverSocket, new InetSocketAddress(hostname, serverSocket.getLocalPort)) } sockets collect { case (socket, address) ⇒ socket.close(); address } diff --git a/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala index 04f973ed16..b6365b7008 100644 --- a/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/UdpConnectedIntegrationSpec.scala @@ -12,7 +12,7 @@ import akka.actor.ActorRef class UdpConnectedIntegrationSpec extends AkkaSpec("akka.loglevel = INFO") with ImplicitSender { - val addresses = temporaryServerAddresses(3) + val addresses = temporaryServerAddresses(3, udp = true) def bindUdp(address: InetSocketAddress, handler: ActorRef): ActorRef = { val commander = TestProbe() diff --git a/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala b/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala index 080cc8fbad..31e103a82f 100644 --- a/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/UdpIntegrationSpec.scala @@ -12,7 +12,7 @@ import akka.actor.ActorRef class UdpIntegrationSpec extends AkkaSpec("akka.loglevel = INFO") with ImplicitSender { - val addresses = temporaryServerAddresses(3) + val addresses = temporaryServerAddresses(3, udp = true) def bindUdp(address: InetSocketAddress, handler: ActorRef): ActorRef = { val commander = TestProbe()