public void Buffer_must_fail_upstream_if_buffer_is_full_and_configured_so()
{
this.AssertAllStagesStopped(() =>
{
var publisher = TestPublisher.CreateProbe<int>(this);
var subscriber = TestSubscriber.CreateManualProbe<int>(this);
Source.FromPublisher(publisher)
.Buffer(100, OverflowStrategy.Fail)
.To(Sink.FromSubscriber(subscriber))
.Run(Materializer);
var sub = subscriber.ExpectSubscription();
// Fill up buffer
Enumerable.Range(1, 100).ForEach(i => publisher.SendNext(i));
// drain
for (var i = 1; i <= 10; i++)
{
sub.Request(1);
subscriber.ExpectNext(i);
}
// overflow the buffer
for (var i = 101; i <= 111; i++)
publisher.SendNext(i);
publisher.ExpectCancellation();
var actualError = subscriber.ExpectError();
actualError.Should().BeOfType<BufferOverflowException>();
actualError.Message.Should().Be("Buffer overflow (max capacity was 100)");
}, Materializer);
}