@@ -6,12 +6,12 @@ package akka.stream.scaladsl
66
77import scala .concurrent .Promise
88import scala .concurrent .duration ._
9-
109import akka .actor .{ Actor , ActorRef , Props }
1110import akka .stream .Attributes .inputBuffer
1211import akka .stream .Materializer
1312import akka .stream .testkit ._
1413import akka .stream .testkit .scaladsl ._
14+ import akka .testkit .EventFilter
1515import akka .testkit .TestProbe
1616
1717object ActorRefBackpressureSinkSpec {
@@ -49,7 +49,7 @@ object ActorRefBackpressureSinkSpec {
4949
5050}
5151
52- class ActorRefBackpressureSinkSpec extends StreamSpec {
52+ class ActorRefBackpressureSinkSpec extends StreamSpec ( " akka.loglevel=INFO " ) {
5353 import ActorRefBackpressureSinkSpec ._
5454
5555 def createActor [T ](c : Class [T ]) =
@@ -247,6 +247,41 @@ class ActorRefBackpressureSinkSpec extends StreamSpec {
247247 probe.reply(ackMessage)
248248 probe.expectMsg(completeMessage)
249249 }
250+
251+ " stay around until final ack is sent" in {
252+ val probe = TestProbe ()
253+
254+ EventFilter .info(pattern = " .*was not delivered.*" , occurrences = 0 ).intercept {
255+ val sourceProbe = TestSource [String ]()
256+ .toMat(
257+ Sink .actorRefWithBackpressure(
258+ probe.ref,
259+ initMessage,
260+ ackMessage,
261+ completeMessage,
262+ (_ : Throwable ) => failMessage))(Keep .left)
263+ .run()
264+ sourceProbe.ensureSubscription()
265+
266+ probe.expectMsg(initMessage)
267+ probe.reply(ackMessage)
268+
269+ sourceProbe.sendNext(" one" )
270+ probe.expectMsg(" one" )
271+ probe.reply(ackMessage)
272+
273+ sourceProbe.sendNext(" two" )
274+ probe.expectMsg(" two" )
275+ // buffer empty when complete is seen
276+ sourceProbe.sendComplete()
277+ Thread .sleep(100 )
278+ probe.reply(ackMessage)
279+ probe.expectMsg(completeMessage)
280+
281+ // logging takes a while to arrive
282+ Thread .sleep(100 )
283+ }
284+ }
250285 }
251286
252287}
0 commit comments