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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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));
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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));
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }
示例#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);
        }