public async Task WritesCanBeCanceledViaProvidedCancellationToken()
 {
     var writeOnlyStream = new WriteOnlyPipeStream(new HangingPipeWriter());
     var pipeWriter      = new StreamPipeWriter(writeOnlyStream);
     var cts             = new CancellationTokenSource(1);
     await Assert.ThrowsAsync <TaskCanceledException>(async() => await pipeWriter.WriteAsync(new byte[1], cts.Token));
 }
        public async Task WriteCanBeCanceledViaCancelPendingFlushWhenFlushIsAsync()
        {
            var writeOnlyStream = new WriteOnlyPipeStream(new HangingPipeWriter());
            var pipeWriter      = new StreamPipeWriter(writeOnlyStream);

            FlushResult flushResult = new FlushResult();
            var         tcs         = new TaskCompletionSource <int>(TaskCreationOptions.RunContinuationsAsynchronously);

            var task = Task.Run(async() =>
            {
                try
                {
                    var writingTask = pipeWriter.WriteAsync(new byte[1]);
                    tcs.SetResult(0);
                    flushResult = await writingTask;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    throw ex;
                }
            });

            await tcs.Task;

            pipeWriter.CancelPendingFlush();

            await task;

            Assert.True(flushResult.IsCanceled);
        }
        public void FlushAsyncIsCalledFromCallingFlush()
        {
            var pipeWriter = new Mock <PipeWriter>();
            var stream     = new WriteOnlyPipeStream(pipeWriter.Object);

            stream.Flush();

            pipeWriter.Verify(m => m.FlushAsync(default));
        public async Task CheckBasicWritePipeApi()
        {
            var pipe            = new Pipe();
            var writeOnlyStream = new WriteOnlyPipeStream(pipe.Writer);
            var pipeWriter      = new StreamPipeWriter(writeOnlyStream);
            await pipeWriter.WriteAsync(new byte[10]);

            var res = await pipe.Reader.ReadAsync();

            Assert.Equal(new byte[10], res.Buffer.ToArray());
        }
        public async Task CheckBasicWriteStreamApi()
        {
            var stream          = new MemoryStream();
            var pipeWriter      = new StreamPipeWriter(stream);
            var writeOnlyStream = new WriteOnlyPipeStream(pipeWriter);

            await writeOnlyStream.WriteAsync(new byte[10]);

            stream.Position = 0;
            var res = await ReadFromStreamAsByteArrayAsync(10, stream);

            Assert.Equal(new byte[10], res);
        }
        public async Task CheckNestedPipeApi()
        {
            var pipe   = new Pipe();
            var writer = pipe.Writer;

            for (var i = 0; i < 3; i++)
            {
                var writeOnlyStream = new WriteOnlyPipeStream(writer);
                writer = new StreamPipeWriter(writeOnlyStream);
            }

            await writer.WriteAsync(new byte[10]);

            var res = await pipe.Reader.ReadAsync();

            Assert.Equal(new byte[10], res.Buffer.ToArray());
        }
        public async Task CheckNestedStreamApi()
        {
            var    stream          = new MemoryStream();
            Stream writeOnlyStream = stream;

            for (var i = 0; i < 3; i++)
            {
                var pipeWriter = new StreamPipeWriter(writeOnlyStream);
                writeOnlyStream = new WriteOnlyPipeStream(pipeWriter);
            }

            await writeOnlyStream.WriteAsync(new byte[10]);

            stream.Position = 0;
            var res = await ReadFromStreamAsByteArrayAsync(10, stream);

            Assert.Equal(new byte[10], res);
        }
Example #8
0
 public PipeStreamTest()
 {
     Pipe          = new Pipe();
     ReadingStream = new ReadOnlyPipeStream(Reader);
     WritingStream = new WriteOnlyPipeStream(Writer);
 }