public void Expand_musst_backpressure_publisher_when_subscriber_is_slower()
{
var publisher = TestPublisher.CreateProbe<int>(this);
var subscriber = TestSubscriber.CreateProbe<int>(this);
// Simply repeat the last element as an extrapolation step
Source.FromPublisher(publisher)
.Expand(i => Enumerable.Repeat(i, 200).GetEnumerator())
.To(Sink.FromSubscriber(subscriber))
.Run(Materializer);
publisher.SendNext(1);
subscriber.RequestNext(1);
subscriber.RequestNext(1);
var pending = publisher.Pending;
// Deplete pending requests coming from input buffer
while (pending > 0)
{
publisher.UnsafeSendNext(2);
pending--;
}
// The above sends are absorbed in the input buffer, and will result in two one-sized batch requests
pending += publisher.ExpectRequest();
pending += publisher.ExpectRequest();
while (pending > 0)
{
publisher.UnsafeSendNext(2);
pending--;
}
publisher.ExpectNoMsg(TimeSpan.FromSeconds(1));
subscriber.Request(2);
subscriber.ExpectNext(2);
subscriber.ExpectNext(2);
//now production is resumed
publisher.ExpectRequest();
}