public void QueueSink_should_keep_on_sending_even_after_the_buffer_has_been_full()
{
this.AssertAllStagesStopped(() =>
{
const int bufferSize = 16;
const int streamElementCount = bufferSize + 4;
var sink = Sink.Queue<int>().WithAttributes(Attributes.CreateInputBuffer(bufferSize, bufferSize));
var tuple = Source.From(Enumerable.Range(1, streamElementCount))
.AlsoToMaterialized(
Flow.Create<int>().Take(bufferSize).WatchTermination(Keep.Right).To(Sink.Ignore<int>()),
Keep.Right)
.ToMaterialized(sink, Keep.Both)
.Run(_materializer);
var probe = tuple.Item1;
var queue = tuple.Item2;
probe.Wait(TimeSpan.FromMilliseconds(300)).Should().BeTrue();
for (var i = 1; i <= streamElementCount; i++)
{
queue.PullAsync().PipeTo(TestActor);
ExpectMsg(new Option<int>(i));
}
queue.PullAsync().PipeTo(TestActor);
ExpectMsg(Option<int>.None);
}, _materializer);
}