From a9d545bf2b8207b982c2f0b1b76c45bbdb81a232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Andr=C3=A9n?= Date: Tue, 26 Nov 2019 18:45:31 +0100 Subject: [PATCH] Re-enable multicast tests (#28252) * Re-enable multicast tests #28147 Some change on jenkins node a4 seems to have made the test pass again. --- .../java/jdocs/io/JavaUdpMulticastTest.java | 4 --- .../scala/docs/io/ScalaUdpMulticastSpec.scala | 35 +++++++++++++------ 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/akka-docs/src/test/java/jdocs/io/JavaUdpMulticastTest.java b/akka-docs/src/test/java/jdocs/io/JavaUdpMulticastTest.java index 89188beb40..7aa68683f1 100644 --- a/akka-docs/src/test/java/jdocs/io/JavaUdpMulticastTest.java +++ b/akka-docs/src/test/java/jdocs/io/JavaUdpMulticastTest.java @@ -31,10 +31,6 @@ public class JavaUdpMulticastTest extends AbstractJavaTest { } @Test - public void dummy() {} - - // disabled until we figure #28147 out - // @Test public void testUdpMulticast() throws Exception { new TestKit(system) { { diff --git a/akka-docs/src/test/scala/docs/io/ScalaUdpMulticastSpec.scala b/akka-docs/src/test/scala/docs/io/ScalaUdpMulticastSpec.scala index 44e9e82be9..4b81743366 100644 --- a/akka-docs/src/test/scala/docs/io/ScalaUdpMulticastSpec.scala +++ b/akka-docs/src/test/scala/docs/io/ScalaUdpMulticastSpec.scala @@ -4,20 +4,26 @@ package docs.io -import java.net.{ Inet6Address, InetSocketAddress, NetworkInterface, StandardProtocolFamily } -import java.nio.channels.DatagramChannel -import scala.util.Random -import akka.actor.{ ActorSystem, Props } +import java.net.Inet6Address +import java.net.NetworkInterface + +import akka.Done +import akka.actor.ActorSystem +import akka.actor.Props import akka.io.Udp -import akka.testkit.TestKit -import org.scalatest.{ BeforeAndAfter, WordSpecLike } -import org.scalatest.BeforeAndAfterAll import akka.testkit.SocketUtil +import akka.testkit.TestKit import akka.util.ccompat.JavaConverters._ +import org.scalatest.BeforeAndAfterAll +import org.scalatest.Matchers +import org.scalatest.WordSpecLike + +import scala.util.Random class ScalaUdpMulticastSpec extends TestKit(ActorSystem("ScalaUdpMulticastSpec")) with WordSpecLike + with Matchers with BeforeAndAfterAll { "listener" should { @@ -37,7 +43,11 @@ class ScalaUdpMulticastSpec // on the platform (awsdl0 can't be used on OSX, docker[0-9] can't be used in a docker machine etc.) // therefore: try hard to find an interface that _does_ work, and only fail if there was any potentially // working interfaces but all failed - ipv6ifaces.exists { ipv6iface => + var failures: List[AssertionError] = Nil + var foundOneThatWorked = false + val iterator = ipv6ifaces.iterator + while (!foundOneThatWorked && iterator.hasNext) { + val ipv6iface = iterator.next() // host assigned link local multicast address http://tools.ietf.org/html/rfc3307#section-4.3.2 // generate a random 32 bit multicast address with the high order bit set val randomAddress: String = (Random.nextInt().abs.toLong | (1L << 31)).toHexString.toUpperCase @@ -52,18 +62,21 @@ class ScalaUdpMulticastSpec val sender = system.actorOf(Props(classOf[Sender], iface, group, port, msg)) // fails here, so binding succeeds but sending a message does not expectMsg(msg) - true + foundOneThatWorked = true } catch { - case _: AssertionError => + case ex: AssertionError => system.log.info("Failed to run test on interface {}", ipv6iface.getDisplayName) - false + failures = ex :: failures } finally { // unbind system.stop(listener) } } + + if (failures.size == ipv6ifaces.size) + fail(s"Multicast failed on all available interfaces: ${failures}") } }