public async Task UsePipe_Stream_Disposal() { var ms = new HalfDuplexStream(); IDuplexPipe pipe = ms.UsePipe(cancellationToken: this.TimeoutToken); pipe.Output.Complete(); pipe.Input.Complete(); await this.AssertStreamClosesAsync(ms); }
public async Task UsePipe_Stream() { var ms = new HalfDuplexStream(); IDuplexPipe pipe = ms.UsePipe(cancellationToken: this.TimeoutToken); await pipe.Output.WriteAsync(new byte[] { 1, 2, 3 }, this.TimeoutToken); var readResult = await pipe.Input.ReadAsync(this.TimeoutToken); Assert.Equal(3, readResult.Buffer.Length); pipe.Input.AdvanceTo(readResult.Buffer.End); }
public async Task UsePipe_Stream_Disposal() { var ms = new HalfDuplexStream(); IDuplexPipe pipe = ms.UsePipe(cancellationToken: this.TimeoutToken); pipe.Output.Complete(); pipe.Input.Complete(); while (!ms.IsDisposed && !this.TimeoutToken.IsCancellationRequested) { await Task.Yield(); } Assert.True(ms.IsDisposed); }
public async Task UsePipe_Stream_OneDirectionDoesNotDispose(bool completeOutput) { var ms = new HalfDuplexStream(); IDuplexPipe pipe = ms.UsePipe(cancellationToken: this.TimeoutToken); if (completeOutput) { pipe.Output.Complete(); } else { pipe.Input.Complete(); } var timeout = ExpectedTimeoutToken; while (!ms.IsDisposed && !timeout.IsCancellationRequested) { await Task.Yield(); } Assert.False(ms.IsDisposed); }