Skip to content

Commit 1279244

Browse files
authored
Merge pull request #3408 from typelevel/topic/udp-suite-retry
Add retries to UdpSuite
2 parents ee70b2a + ce52e21 commit 1279244

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

io/js-jvm/src/test/scala/fs2/io/net/udp/UdpSuite.scala

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,13 @@ import cats.syntax.all._
2929

3030
import com.comcast.ip4s._
3131

32+
import scala.concurrent.duration._
33+
3234
class UdpSuite extends Fs2Suite with UdpSuitePlatform {
35+
def sendAndReceive(socket: DatagramSocket[IO], toSend: Datagram): IO[Datagram] =
36+
socket
37+
.write(toSend) >> socket.read.timeoutTo(1.second, IO.defer(sendAndReceive(socket, toSend)))
38+
3339
group("udp") {
3440
test("echo one") {
3541
val msg = Chunk.array("Hello, world!".getBytes)
@@ -38,15 +44,11 @@ class UdpSuite extends Fs2Suite with UdpSuitePlatform {
3844
.flatMap { serverSocket =>
3945
Stream.eval(serverSocket.localAddress).map(_.port).flatMap { serverPort =>
4046
val serverAddress = SocketAddress(ip"127.0.0.1", serverPort)
41-
val server = serverSocket.reads
42-
.evalMap(packet => serverSocket.write(packet))
43-
.drain
44-
val client = Stream.resource(Network[IO].openDatagramSocket()).flatMap { clientSocket =>
45-
Stream(Datagram(serverAddress, msg))
46-
.through(clientSocket.writes)
47-
.drain ++ Stream.eval(clientSocket.read)
47+
val server = serverSocket.reads.foreach(packet => serverSocket.write(packet))
48+
val client = Stream.resource(Network[IO].openDatagramSocket()).evalMap { clientSocket =>
49+
sendAndReceive(clientSocket, Datagram(serverAddress, msg))
4850
}
49-
server.mergeHaltBoth(client)
51+
client.concurrently(server)
5052
}
5153
}
5254
.compile
@@ -69,21 +71,17 @@ class UdpSuite extends Fs2Suite with UdpSuitePlatform {
6971
.flatMap { serverSocket =>
7072
Stream.eval(serverSocket.localAddress).map(_.port).flatMap { serverPort =>
7173
val serverAddress = SocketAddress(ip"127.0.0.1", serverPort)
72-
val server = serverSocket.reads
73-
.evalMap(packet => serverSocket.write(packet))
74-
.drain
74+
val server = serverSocket.reads.foreach(packet => serverSocket.write(packet))
7575
val client = Stream.resource(Network[IO].openDatagramSocket()).flatMap { clientSocket =>
7676
Stream
7777
.emits(msgs.map(msg => Datagram(serverAddress, msg)))
78-
.flatMap { msg =>
79-
Stream.exec(clientSocket.write(msg)) ++ Stream.eval(clientSocket.read)
80-
}
78+
.evalMap(msg => sendAndReceive(clientSocket, msg))
8179
}
8280
val clients = Stream
8381
.constant(client)
8482
.take(numClients.toLong)
8583
.parJoin(numParallelClients)
86-
server.mergeHaltBoth(clients)
84+
clients.concurrently(server)
8785
}
8886
}
8987
.compile
@@ -110,15 +108,13 @@ class UdpSuite extends Fs2Suite with UdpSuitePlatform {
110108
.exec(
111109
v4Interfaces.traverse_(interface => serverSocket.join(groupJoin, interface))
112110
) ++
113-
serverSocket.reads
114-
.evalMap(packet => serverSocket.write(packet))
115-
.drain
111+
serverSocket.reads.foreach(packet => serverSocket.write(packet))
116112
val client = Stream.resource(Network[IO].openDatagramSocket()).flatMap { clientSocket =>
117113
Stream(Datagram(SocketAddress(group.address, serverPort), msg))
118114
.through(clientSocket.writes)
119115
.drain ++ Stream.eval(clientSocket.read)
120116
}
121-
server.mergeHaltBoth(client)
117+
client.concurrently(server)
122118
}
123119
}
124120
.compile

0 commit comments

Comments
 (0)