public void FileSource_should_complete_only_when_all_contents_of_a_file_have_been_signalled()
{
this.AssertAllStagesStopped(() =>
{
var chunkSize = 512;
var bufferAttributes = Attributes.CreateInputBuffer(1, 2);
var demandAllButOnechunks = _testText.Length / chunkSize - 1;
var p = FileIO.FromFile(TestFile(), chunkSize)
.WithAttributes(bufferAttributes)
.RunWith(Sink.AsPublisher<ByteString>(false), _materializer);
var c = this.CreateManualProbe<ByteString>();
p.Subscribe(c);
var sub = c.ExpectSubscription();
var remaining = _testText;
var nextChunk = new Func<string>(() =>
{
string chunks;
if (remaining.Length <= chunkSize)
{
chunks = remaining;
remaining = string.Empty;
}
else
{
chunks = remaining.Substring(0, chunkSize);
remaining = remaining.Substring(chunkSize);
}
return chunks;
});
sub.Request(demandAllButOnechunks);
for (var i = 0; i < demandAllButOnechunks; i++)
c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
c.ExpectNoMsg(TimeSpan.FromMilliseconds(300));
sub.Request(1);
c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
c.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
sub.Request(1);
c.ExpectNext().DecodeString(Encoding.UTF8).Should().Be(nextChunk());
c.ExpectComplete();
}, _materializer);
}