コード例 #1
0
ファイル: BugSpec.cs プロジェクト: yildizoglu/akka.net
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }