pekko/akka-docs/src/test/scala/docs/stream/cookbook/RecipeMissedTicks.scala

63 lines
1.5 KiB
Scala
Raw Normal View History

/*
* Copyright (C) 2018 Lightbend Inc. <https://www.lightbend.com>
*/
2014-12-08 17:29:40 +01:00
package docs.stream.cookbook
import akka.NotUsed
2015-07-08 10:23:10 +03:00
import akka.stream.scaladsl._
2015-04-24 11:45:03 +03:00
import akka.stream.testkit._
2014-12-08 17:29:40 +01:00
import scala.concurrent.duration._
import akka.testkit.TestLatch
import scala.concurrent.Await
2014-12-08 17:29:40 +01:00
class RecipeMissedTicks extends RecipeSpec {
"Recipe for collecting missed ticks" must {
"work" in {
type Tick = Unit
2015-04-24 11:45:03 +03:00
val pub = TestPublisher.probe[Tick]()
val sub = TestSubscriber.manualProbe[Int]()
val tickStream = Source.fromPublisher(pub)
val sink = Sink.fromSubscriber(sub)
2014-12-08 17:29:40 +01:00
//#missed-ticks
val missedTicks: Flow[Tick, Int, NotUsed] =
2017-10-06 10:30:28 +02:00
Flow[Tick].conflateWithSeed(seed = (_) 0)(
(missedTicks, tick) missedTicks + 1)
2014-12-08 17:29:40 +01:00
//#missed-ticks
val latch = TestLatch(3)
val realMissedTicks: Flow[Tick, Int, NotUsed] =
2017-10-06 10:30:28 +02:00
Flow[Tick].conflateWithSeed(seed = (_) 0)(
(missedTicks, tick) { latch.countDown(); missedTicks + 1 })
2014-12-08 17:29:40 +01:00
tickStream.via(realMissedTicks).to(sink).run()
2014-12-08 17:29:40 +01:00
2015-04-24 11:45:03 +03:00
pub.sendNext(())
pub.sendNext(())
pub.sendNext(())
pub.sendNext(())
2014-12-08 17:29:40 +01:00
val subscription = sub.expectSubscription()
Await.ready(latch, 1.second)
2014-12-08 17:29:40 +01:00
subscription.request(1)
sub.expectNext(3)
subscription.request(1)
sub.expectNoMsg(100.millis)
2015-04-24 11:45:03 +03:00
pub.sendNext(())
2014-12-08 17:29:40 +01:00
sub.expectNext(0)
2015-04-24 11:45:03 +03:00
pub.sendComplete()
2014-12-08 17:29:40 +01:00
subscription.request(1)
sub.expectComplete()
}
}
}