public async Task Issue_4580_EmptyByteStringCausesPipeToBeClosed() { var serverPipe = new NamedPipeServerStream("unique-pipe-name", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 20, 20); var serverPipeConnectionTask = serverPipe.WaitForConnectionAsync(); var clientPipe = new NamedPipeClientStream(".", "unique-pipe-name", PipeDirection.In, PipeOptions.Asynchronous); clientPipe.Connect(); await serverPipeConnectionTask; var cnt = 0; var writeToStreamTask = Source.From(Enumerable.Range(0, 100)) .Select(i => ByteString.FromString(i.ToString())) .Select(bs => cnt++ == 10 ? ByteString.Empty : bs) // ByteString.Empty.ToArray() failed in original bug .ToMaterialized(StreamConverters.FromOutputStream(() => serverPipe), Keep.Right) .Run(Materializer); var result = new List<string>(); var readFromStreamTask = StreamConverters.FromInputStream(() => clientPipe, 1) .RunForeach(bs => result.Add(bs.ToString(Encoding.ASCII)), Materializer); await Task.WhenAll(writeToStreamTask, readFromStreamTask); var expected = Enumerable.Range(0, 100) .SelectMany(i => i == 10 ? Array.Empty<string>() : i.ToString().Select(c => c.ToString())); expected.SequenceEqual(result).ShouldBeTrue(); }
public void OutputStreamSink_must_complete_materialized_value_with_the_error() { this.AssertAllStagesStopped(() => { var completion = Source.Failed <ByteString>(new Exception("Boom!")) .RunWith(StreamConverters.FromOutputStream(() => new OutputStream()), _materializer); AssertThrows <AbruptIOTerminationException>(completion.Wait); }, _materializer); }
public void OutputStreamSink_must_close_underlying_stream_when_completion_received() { this.AssertAllStagesStopped(() => { var p = CreateTestProbe(); Source.Empty <ByteString>() .RunWith(StreamConverters.FromOutputStream(() => new CompletionOutputStream(p)), _materializer); p.ExpectMsg("closed"); }, _materializer); }
public void OutputStreamSink_must_close_underlying_stream_when_error_received() { this.AssertAllStagesStopped(() => { var p = CreateTestProbe(); Source.Failed <ByteString>(new Exception("Boom!")) .RunWith(StreamConverters.FromOutputStream(() => new CloseOutputStream(p)), _materializer); p.ExpectMsg("closed"); }, _materializer); }
public void OutputStreamSink_must_write_bytes_to_void_OutputStream() { this.AssertAllStagesStopped(() => { var p = CreateTestProbe(); var datas = new List <ByteString> { ByteString.FromString("a"), ByteString.FromString("c"), ByteString.FromString("c") }; var completion = Source.From(datas) .RunWith(StreamConverters.FromOutputStream(() => new VoidOutputStream(p)), _materializer); p.ExpectMsg(datas[0].ToString()); p.ExpectMsg(datas[1].ToString()); p.ExpectMsg(datas[2].ToString()); completion.Wait(TimeSpan.FromSeconds(3)); }, _materializer); }