Exemplo n.º 1
0
 public void ActorSubscriberSpec_should_should_work_with_WatermarkRequestStrategy()
 {
     Source.From(Enumerable.Range(1, 17))
     .RunWith(Sink.ActorSubscriber <int>(RequestStrategySubscriber.Props(TestActor, new WatermarkRequestStrategy(highWatermark: 10))), Sys.Materializer());
     Enumerable.Range(1, 17).ForEach(n => ExpectMsg <OnNext>().Element.Should().Be(n));
     ExpectMsg <OnComplete>();
 }
Exemplo n.º 2
0
        public void ActorSubscriberSpec_should_support_custom_max_in_flight_request_strategy_with_child_workers()
        {
            var n = 117;

            Source.From(Enumerable.Range(1, n))
            .Select(i => new Msg(i, TestActor))
            .RunWith(Sink.ActorSubscriber <Msg>(Streamer.Props), Sys.Materializer());
            ReceiveN(n).ShouldAllBeEquivalentTo(Enumerable.Range(1, n).Select(i => new Done(i)));
        }
Exemplo n.º 3
0
        public void ActorSubscriberSpec_should_terminate_after_cancel()
        {
            var actorRef = Source.From(Enumerable.Range(1, 5))
                           .RunWith(Sink.ActorSubscriber <int>(ManualSubscriber.Props(TestActor)), Sys.Materializer());

            Watch(actorRef);
            actorRef.Tell("requestAndCancel");
            ExpectTerminated(actorRef);
        }
Exemplo n.º 4
0
        public void ActorSubscriber_should_signal_error()
        {
            var e        = new Exception("simulated");
            var actorRef = Source.FromEnumerator <int>(() => { throw e; })
                           .RunWith(Sink.ActorSubscriber <int>(ManualSubscriber.Props(TestActor)), Sys.Materializer());

            actorRef.Tell("ready");

            ExpectMsg <OnError>().Cause.Should().Be(e);
        }
Exemplo n.º 5
0
        public void ActorSubscriberSpec_should_not_deliver_more_after_cancel()
        {
            var actorRef = Source.From(Enumerable.Range(1, 5))
                           .RunWith(Sink.ActorSubscriber <int>(ManualSubscriber.Props(TestActor)), Sys.Materializer());

            actorRef.Tell("ready");
            ExpectMsg <OnNext>().Element.Should().Be(1);
            ExpectMsg <OnNext>().Element.Should().Be(2);
            actorRef.Tell("requestAndCancel");
            ExpectNoMsg(200);
        }
Exemplo n.º 6
0
        public void ActorPublisher_should_work_in_a_GraphDsl()
        {
            var materializer = Sys.Materializer();
            var probe1       = CreateTestProbe();
            var probe2       = CreateTestProbe();

            var senderRef1 = ActorOf(Sender.Props);
            var source1    = Source.FromPublisher(ActorPublisher.Create <int>(senderRef1))
                             .MapMaterializedValue(_ => senderRef1);

            var sink1 = Sink.FromSubscriber(ActorSubscriber.Create <string>(ActorOf(Receiver.Props(probe1.Ref))))
                        .MapMaterializedValue(_ => probe1.Ref);
            var sink2 = Sink.ActorSubscriber <string>(Receiver.Props(probe2.Ref))
                        .MapMaterializedValue(_ => probe2.Ref);
            var senderRef2 = RunnableGraph.FromGraph(GraphDsl.Create(
                                                         Source.ActorPublisher <int>(Sender.Props),
                                                         (builder, source2) =>
            {
                var merge = builder.Add(new Merge <int, int>(2));
                var bcast = builder.Add(new Broadcast <string>(2));

                builder.From(source1).To(merge.In(0));
                builder.From(source2.Outlet).To(merge.In(1));

                builder.From(merge.Out).Via(Flow.Create <int>().Select(i => i.ToString())).To(bcast.In);

                builder.From(bcast.Out(0)).Via(Flow.Create <string>().Select(s => s + "mark")).To(sink1);
                builder.From(bcast.Out(1)).To(sink2);

                return(ClosedShape.Instance);
            })).Run(materializer);

            // the scala test is wrong
            const int noOfMessages = 10;

            for (var i = 0; i < noOfMessages; i++)
            {
                senderRef1.Tell(i);
                senderRef2.Tell(i + noOfMessages);
            }

            var probe1Messages = new List <string>(noOfMessages * 2);
            var probe2Messages = new List <string>(noOfMessages * 2);

            for (var i = 0; i < noOfMessages * 2; i++)
            {
                probe1Messages.Add(probe1.ExpectMsg <string>());
                probe2Messages.Add(probe2.ExpectMsg <string>());
            }
            probe1Messages.Should().BeEquivalentTo(Enumerable.Range(0, noOfMessages * 2).Select(i => i + "mark"));
            probe2Messages.Should().BeEquivalentTo(Enumerable.Range(0, noOfMessages * 2).Select(i => i.ToString()));
        }
Exemplo n.º 7
0
        public void ActorSubscriber_should_receive_requested_elements()
        {
            var actorRef = Source.From(new[] { 1, 2, 3 })
                           .RunWith(Sink.ActorSubscriber <int>(ManualSubscriber.Props(TestActor)), Sys.Materializer());

            ExpectNoMsg(200);
            actorRef.Tell("ready"); //requesting 2
            ExpectMsg <OnNext>().Element.Should().Be(1);
            ExpectMsg <OnNext>().Element.Should().Be(2);
            ExpectNoMsg(200);
            actorRef.Tell("ready");
            ExpectMsg <OnNext>().Element.Should().Be(3);
            ExpectMsg <OnComplete>();
        }
Exemplo n.º 8
0
        public void ActorPublisher_should_work_together_with_Flow_and_ActorSubscriber_using_old_Collect_behaviour()
        {
            var materializer = Sys.Materializer();

            this.AssertAllStagesStopped(() =>
            {
                var probe  = CreateTestProbe();
                var source = Source.ActorPublisher <int>(Sender.Props);
                var sink   = Sink.ActorSubscriber <string>(Receiver.Props(probe.Ref));

                var t = source.Collect(n =>
                {
                    if (n % 2 == 0)
                    {
                        return("elem-" + n);
                    }
                    return(null);
                }).ToMaterialized(sink, Keep.Both).Run(materializer);
                var snd = t.Item1;
                var rcv = t.Item2;

                for (var i = 1; i <= 3; i++)
                {
                    snd.Tell(i);
                }
                probe.ExpectMsg("elem-2", TimeSpan.FromMinutes(10));

                for (var n = 4; n <= 500; n++)
                {
                    if (n % 19 == 0)
                    {
                        Thread.Sleep(50); // simulate bursts
                    }
                    snd.Tell(n);
                }

                for (var n = 4; n <= 500; n += 2)
                {
                    probe.ExpectMsg("elem-" + n);
                }

                Watch(snd);
                rcv.Tell(PoisonPill.Instance);
                ExpectTerminated(snd);
            }, materializer);
        }