public void GraphInterpreter_should_implement_buffer() { WithTestSetup((setup, builder, lastEvents) => { var source = setup.NewUpstreamProbe <string>("source"); var sink = setup.NewDownstreamProbe <string>("sink"); var buffer = new PushPullGraphStage <string, string>( a => new Buffer <string>(2, OverflowStrategy.Backpressure), Attributes.None); builder(buffer) .Connect(source, buffer.Shape.Inlet) .Connect(buffer.Shape.Outlet, sink) .Init(); setup.StepAll(); lastEvents().Should().BeEquivalentTo(new RequestOne(source)); sink.RequestOne(); lastEvents().Should().BeEmpty(); source.OnNext("A"); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "A"), new RequestOne(source)); source.OnNext("B"); lastEvents().Should().BeEquivalentTo(new RequestOne(source)); source.OnNext("C", eventLimit: 0); sink.RequestOne(); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "B"), new RequestOne(source)); sink.RequestOne(eventLimit: 0); source.OnComplete(eventLimit: 3); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "C")); sink.RequestOne(); lastEvents().Should().BeEquivalentTo(new OnComplete(sink)); }); }
public void GraphInterpreter_should_implement_buffer() { WithTestSetup((setup, builder, lastEvents) => { var source = setup.NewUpstreamProbe<string>("source"); var sink = setup.NewDownstreamProbe<string>("sink"); var buffer = new PushPullGraphStage<string, string>( a => new Buffer<string>(2, OverflowStrategy.Backpressure), Attributes.None); builder(buffer) .Connect(source, buffer.Shape.Inlet) .Connect(buffer.Shape.Outlet, sink) .Init(); setup.StepAll(); lastEvents().Should().BeEquivalentTo(new RequestOne(source)); sink.RequestOne(); lastEvents().Should().BeEmpty(); source.OnNext("A"); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "A"), new RequestOne(source)); source.OnNext("B"); lastEvents().Should().BeEquivalentTo(new RequestOne(source)); source.OnNext("C", eventLimit: 0); sink.RequestOne(); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "B"), new RequestOne(source)); sink.RequestOne(eventLimit: 0); source.OnComplete(eventLimit: 3); lastEvents().Should().BeEquivalentTo(new OnNext(sink, "C")); sink.RequestOne(); lastEvents().Should().BeEquivalentTo(new OnComplete(sink)); }); }