public async Task SynchronousWritesThrowIfDisallowedByIHttpBodyControlFeature()
        {
            var allowSynchronousIO = false;
            var mockBodyControl    = new Mock <IHttpBodyControlFeature>();

            mockBodyControl.Setup(m => m.AllowSynchronousIO).Returns(() => allowSynchronousIO);
            var mockHttpResponseControl = new Mock <IHttpResponseControl>();

            mockHttpResponseControl.Setup(m => m.WriteAsync(It.IsAny <ArraySegment <byte> >(), CancellationToken.None)).Returns(Task.CompletedTask);

            var stream = new HttpResponseStream(mockBodyControl.Object, mockHttpResponseControl.Object);

            stream.StartAcceptingWrites();

            // WriteAsync doesn't throw.
            await stream.WriteAsync(new byte[1], 0, 1);

            var ioEx = Assert.Throws <InvalidOperationException>(() => stream.Write(new byte[1], 0, 1));

            Assert.Equal("Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead.", ioEx.Message);

            allowSynchronousIO = true;
            // If IHttpBodyControlFeature.AllowSynchronousIO is true, Write no longer throws.
            stream.Write(new byte[1], 0, 1);
        }
Exemplo n.º 2
0
        public void Write_TwoSegments_SetsLength()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            long len = stream.Length;

            Assert.AreEqual(20, len);
        }
Exemplo n.º 3
0
        public void Write_TwoSegments_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            long pos = stream.Position;

            Assert.AreEqual(20, pos);
        }
Exemplo n.º 4
0
        public void SetLength_MultiBuffer_AddsFiller()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.SetLength(25);

            long length = stream.Length;

            Assert.AreEqual(25, length);
        }
Exemplo n.º 5
0
        public void SetLength_EqualToCurrentLength_LengthStaysTheSame()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.SetLength(20);

            long length = stream.Length;

            Assert.AreEqual(20, length);
        }
Exemplo n.º 6
0
        public void Write_ShorterThanBufferInSingleBuffer_SetsCorrectLength()
        {
            var stream       = new HttpResponseStream();
            var write_buffer = new byte [5];

            stream.Write(write_buffer, 0, 5);

            stream.Position = 2;
            stream.Write(write_buffer, 0, 2);

            var length = stream.Length;

            Assert.AreEqual(5, length);
        }
Exemplo n.º 7
0
        public void Seek_FromCurrentBackwards_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(-5, SeekOrigin.Current);

            long pos = stream.Position;

            Assert.AreEqual(15, pos);
        }
Exemplo n.º 8
0
        public void Seek_FromEndLastIndexOfBuffer_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(-10, SeekOrigin.End);

            long pos = stream.Position;

            Assert.AreEqual(10, pos);
        }
Exemplo n.º 9
0
        public void Seek_FromEndMultipleBuffers_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);
            stream.Seek(-5, SeekOrigin.End);

            long pos = stream.Position;

            Assert.AreEqual(25, pos);
        }
Exemplo n.º 10
0
        public void Seek_FromBeginningLastIndexOfSegment_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(10, SeekOrigin.Begin);

            long pos = stream.Position;

            Assert.AreEqual(10, pos);
        }
Exemplo n.º 11
0
        public void Write_SeekedBackInLastSegment_SetsPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(-5, SeekOrigin.Current);
            stream.Write(buffer, 0, 10);

            long pos = stream.Position;

            Assert.AreEqual(25, pos);
        }
Exemplo n.º 12
0
        public void Write_InFirstBufferOfTwoBufferStream_SetsCorrectLength()
        {
            var stream       = new HttpResponseStream();
            var write_buffer = new byte [5];

            stream.Write(write_buffer, 0, 5);
            stream.Write(write_buffer, 0, 5);
            stream.Seek(-6, SeekOrigin.End);

            stream.Write(write_buffer, 0, 5);

            var length = stream.Length;

            Assert.AreEqual(10, length);
        }
Exemplo n.º 13
0
        public void Read_MultipleBuffers_UpdatesPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.Seek (15, SeekOrigin.Begin);
            stream.Read (buffer, 0, 5);

            long position = stream.Position;
            Assert.AreEqual (20, position);
        }
Exemplo n.º 14
0
        public void SetLength_LessThanMultiBuffer_Truncates()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.SetLength(5);

            long length = stream.Length;

            Assert.AreEqual(5, length);
        }
Exemplo n.º 15
0
        public void Read_MultipleBuffers_UpdatesPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(15, SeekOrigin.Begin);
            stream.Read(buffer, 0, 5);

            long position = stream.Position;

            Assert.AreEqual(20, position);
        }
Exemplo n.º 16
0
        public void Write_AcrossEntireMiddleBufferOfThreeBufferStream_SetsCorrectLength()
        {
            var stream        = new HttpResponseStream();
            var write_buffer  = new byte [5];
            var write_buffer2 = new byte [6];

            stream.Write(write_buffer, 0, 5);
            stream.Write(write_buffer, 0, 5);
            stream.Write(write_buffer, 0, 5);
            stream.Seek(2, SeekOrigin.Begin);

            stream.Write(write_buffer2, 0, 6);

            var length = stream.Length;

            Assert.AreEqual(15, length);
        }
Exemplo n.º 17
0
        public void Write_SeekedBackPastLastSegmentWriteOverAll_SetsPosition()
        {
            var stream     = new HttpResponseStream();
            var buffer     = new byte [10];
            var buffer_big = new byte [25];

            stream.Write(buffer, 0, 10);
            stream.Write(buffer, 0, 10);

            stream.Seek(-15, SeekOrigin.Current);
            Assert.AreEqual(5, stream.Position);

            stream.Write(buffer_big, 0, 25);

            long pos = stream.Position;

            Assert.AreEqual(30, pos);
        }
Exemplo n.º 18
0
        public void SeekOrigin_PositivePastEnd_Throws()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);

            Should.Throw <ArgumentException> (() => stream.Seek(11, SeekOrigin.Begin));
        }
Exemplo n.º 19
0
        public void Read_MultipleBuffers_CorrectData()
        {
            var stream = new HttpResponseStream ();
            var write_buffer1 = new byte [3];
            var write_buffer2 = new byte [3];
            var read_buffer = new byte [6];

            stream.Write (write_buffer1, 0, 3);

            write_buffer2 [0] = 0xFA;
            stream.Write (write_buffer2, 0, 3);

            stream.Seek (0, SeekOrigin.Begin);
            stream.Read (read_buffer, 0, 6);

            byte read_byte = read_buffer [3];
            Assert.AreEqual (0xFA, read_byte);
        }
Exemplo n.º 20
0
        public void Read_MultipleBuffers_CorrectData()
        {
            var stream        = new HttpResponseStream();
            var write_buffer1 = new byte [3];
            var write_buffer2 = new byte [3];
            var read_buffer   = new byte [6];

            stream.Write(write_buffer1, 0, 3);

            write_buffer2 [0] = 0xFA;
            stream.Write(write_buffer2, 0, 3);

            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(read_buffer, 0, 6);

            byte read_byte = read_buffer [3];

            Assert.AreEqual(0xFA, read_byte);
        }
Exemplo n.º 21
0
        public void Write_TruncatedSegment_SetsLength()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 5);

            long len = stream.Length;

            Assert.AreEqual(5, len);
        }
Exemplo n.º 22
0
        public void Read_PastEndOfStream_ReturnsAmountRead()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);

            stream.Seek (-1, SeekOrigin.End);
            int amount_read = stream.Read (buffer, 0, 2);

            Assert.AreEqual (1, amount_read);
        }
Exemplo n.º 23
0
        public void Read_PastEndOfStream_ReturnsAmountRead()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);

            stream.Seek(-1, SeekOrigin.End);
            int amount_read = stream.Read(buffer, 0, 2);

            Assert.AreEqual(1, amount_read);
        }
Exemplo n.º 24
0
        public void Read_ReadLastItem_UpdatesPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);

            stream.Seek (-1, SeekOrigin.End);
            stream.Read (buffer, 0, 1);

            long position = stream.Position;
            Assert.AreEqual (10, position);
        }
Exemplo n.º 25
0
        public void Insert_BeginningOfStream_SetsCorrectPosition()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [10];

            stream.Write (write_buffer, 0, 10);
            stream.Position = 0;

            stream.Insert (write_buffer, 0, 5);

            var position = stream.Position;
            Assert.AreEqual (5, position);
        }
Exemplo n.º 26
0
        public void Insert_BeginningOfStream_SetsCorrectLength()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [10];

            stream.Write (write_buffer, 0, 10);
            stream.Position = 0;

            stream.Insert (write_buffer, 0, 10);

            var length = stream.Length;
            Assert.AreEqual (20, length);
        }
Exemplo n.º 27
0
        public void Read_ReadLastItem_UpdatesPosition()
        {
            var stream = new HttpResponseStream();
            var buffer = new byte [10];

            stream.Write(buffer, 0, 10);

            stream.Seek(-1, SeekOrigin.End);
            stream.Read(buffer, 0, 1);

            long position = stream.Position;

            Assert.AreEqual(10, position);
        }
Exemplo n.º 28
0
        public void Insert_BeginningOfStream_SetsCorrectLength()
        {
            var stream       = new HttpResponseStream();
            var write_buffer = new byte [10];

            stream.Write(write_buffer, 0, 10);
            stream.Position = 0;

            stream.Insert(write_buffer, 0, 10);

            var length = stream.Length;

            Assert.AreEqual(20, length);
        }
Exemplo n.º 29
0
        public void Insert_BeginningOfStream_SetsCorrectPosition()
        {
            var stream       = new HttpResponseStream();
            var write_buffer = new byte [10];

            stream.Write(write_buffer, 0, 10);
            stream.Position = 0;

            stream.Insert(write_buffer, 0, 5);

            var position = stream.Position;

            Assert.AreEqual(5, position);
        }
Exemplo n.º 30
0
        public void Insert_BeginningOfStream_SetsCorrectData()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [10];
            var write_buffer2 = new byte [10];

            stream.Write (write_buffer, 0, 10);
            stream.Position = 0;

            write_buffer2 [2] = 0xFA;
            stream.Insert (write_buffer2, 0, 10);

            stream.Position = 2;
            var data = stream.ReadByte ();
            Assert.AreEqual (0xFA, data);
        }
Exemplo n.º 31
0
        public void Read_SingleBuffer_CorrectData()
        {
            var stream       = new HttpResponseStream();
            var write_buffer = new byte [3];
            var read_buffer  = new byte [1];

            write_buffer [2] = 0xFA;

            stream.Write(write_buffer, 0, 3);

            stream.Seek(-1, SeekOrigin.End);
            stream.Read(read_buffer, 0, 1);

            byte read_byte = read_buffer [0];

            Assert.AreEqual(0xFA, read_byte);
        }
Exemplo n.º 32
0
        public void Insert_BeginningOfStream_SetsCorrectData()
        {
            var stream        = new HttpResponseStream();
            var write_buffer  = new byte [10];
            var write_buffer2 = new byte [10];


            stream.Write(write_buffer, 0, 10);
            stream.Position = 0;

            write_buffer2 [2] = 0xFA;
            stream.Insert(write_buffer2, 0, 10);

            stream.Position = 2;
            var data = stream.ReadByte();

            Assert.AreEqual(0xFA, data);
        }
Exemplo n.º 33
0
        public void Write_TwoSegments_SetsLength()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            long len = stream.Length;
            Assert.AreEqual (20, len);
        }
Exemplo n.º 34
0
        public void Write_TwoSegments_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            long pos = stream.Position;
            Assert.AreEqual (20, pos);
        }
Exemplo n.º 35
0
        public void Write_ShorterThanBufferInSingleBuffer_SetsCorrectLength()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [5];

            stream.Write (write_buffer, 0, 5);

            stream.Position = 2;
            stream.Write (write_buffer, 0, 2);

            var length = stream.Length;
            Assert.AreEqual (5, length);
        }
Exemplo n.º 36
0
        public void Write_TruncatedSegment_SetsLength()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 5);

            long len = stream.Length;
            Assert.AreEqual (5, len);
        }
Exemplo n.º 37
0
        public void Write_SeekedBackInLastSegment_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.Seek (-5, SeekOrigin.Current);
            stream.Write (buffer, 0, 10);

            long pos = stream.Position;
            Assert.AreEqual (25, pos);
        }
Exemplo n.º 38
0
        public void Write_SeekedBackPastLastSegmentWriteOverAll_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];
            var buffer_big = new byte [25];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.Seek (-15, SeekOrigin.Current);
                        Assert.AreEqual (5, stream.Position);

            stream.Write (buffer_big, 0, 25);

            long pos = stream.Position;
            Assert.AreEqual (30, pos);
        }
Exemplo n.º 39
0
        public void SeekOrigin_PositivePastEnd_Throws()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);

            Should.Throw<ArgumentException> (() => stream.Seek (11, SeekOrigin.Begin));
        }
Exemplo n.º 40
0
        public void Seek_FromEndMultipleBuffersAcrossBoundries_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);
            stream.Seek (-25, SeekOrigin.End);

            long pos = stream.Position;
            Assert.AreEqual (5, pos);
        }
Exemplo n.º 41
0
        public void Seek_FromBeginningMultipleSegments_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.Seek (25, SeekOrigin.Begin);

            long pos = stream.Position;
            Assert.AreEqual (25, pos);
        }
Exemplo n.º 42
0
        public void Write_AcrossEntireMiddleBufferOfThreeBufferStream_SetsCorrectLength()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [5];
            var write_buffer2 = new byte [6];

            stream.Write (write_buffer, 0, 5);
            stream.Write (write_buffer, 0, 5);
            stream.Write (write_buffer, 0, 5);
            stream.Seek (2, SeekOrigin.Begin);

            stream.Write (write_buffer2, 0, 6);

            var length = stream.Length;
            Assert.AreEqual (15, length);
        }
Exemplo n.º 43
0
        public void SetLength_LessThanSingleBuffer_Truncates()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.SetLength (5);

            long length = stream.Length;
            Assert.AreEqual (5, length);
        }
Exemplo n.º 44
0
        public void SetLength_EqualToCurrentLength_LengthStaysTheSame()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.SetLength (20);

            long length = stream.Length;
            Assert.AreEqual (20, length);
        }
Exemplo n.º 45
0
        public void Seek_FromEnd_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Seek (-3, SeekOrigin.End);

            long pos = stream.Position;
            Assert.AreEqual (7, pos);
        }
Exemplo n.º 46
0
        public void Read_SingleBuffer_CorrectData()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [3];
            var read_buffer = new byte [1];

            write_buffer [2] = 0xFA;

            stream.Write (write_buffer, 0, 3);

            stream.Seek (-1, SeekOrigin.End);
            stream.Read (read_buffer, 0, 1);

            byte read_byte = read_buffer [0];
            Assert.AreEqual (0xFA, read_byte);
        }
Exemplo n.º 47
0
        public void Write_InFirstBufferOfTwoBufferStream_SetsCorrectLength()
        {
            var stream = new HttpResponseStream ();
            var write_buffer = new byte [5];

            stream.Write (write_buffer, 0, 5);
            stream.Write (write_buffer, 0, 5);
            stream.Seek (-6, SeekOrigin.End);

            stream.Write (write_buffer, 0, 5);

            var length = stream.Length;
            Assert.AreEqual (10, length);
        }
Exemplo n.º 48
0
        public void SetLength_MultiBuffer_AddsFiller()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.SetLength (25);

            long length = stream.Length;
            Assert.AreEqual (25, length);
        }
Exemplo n.º 49
0
        public void Seek_FromCurrentBackwards_SetsPosition()
        {
            var stream = new HttpResponseStream ();
            var buffer = new byte [10];

            stream.Write (buffer, 0, 10);
            stream.Write (buffer, 0, 10);

            stream.Seek (-5, SeekOrigin.Current);

            long pos = stream.Position;
            Assert.AreEqual (15, pos);
        }