示例#1
0
        public void CopyToAsync_ThrowCustomExceptionInOverriddenAsyncMethod_ExceptionBubblesUp()
        {
            var content = new MockContent(new MockException(), MockOptions.ThrowInAsyncSerializeMethods);

            var m = new MemoryStream();
            Assert.Throws<MockException>(() => { Task t = content.CopyToAsync(m); });
        }
示例#2
0
        public async Task CopyToAsync_ThrowCustomExceptionInOverriddenMethod_ThrowsMockException()
        {
            var content = new MockContent(new MockException(), MockOptions.ThrowInSerializeMethods);

            var m = new MemoryStream();
            await Assert.ThrowsAsync <MockException>(() => content.CopyToAsync(m));
        }
示例#3
0
        public async Task CopyToAsync_ThrowCustomExceptionInOverriddenMethod_ThrowsMockException()
        {
            var content = new MockContent(new MockException(), MockOptions.ThrowInSerializeMethods);

            var m = new MemoryStream();
            await Assert.ThrowsAsync<MockException>(() => content.CopyToAsync(m));
        }
示例#4
0
        public async Task CopyToAsync_ThrowObjectDisposedExceptionInOverriddenAsyncMethod_ThrowsWrappedHttpRequestException()
        {
            var content = new MockContent(new ObjectDisposedException(""), MockOptions.ThrowInAsyncSerializeMethods);

            var m = new MemoryStream();
            HttpRequestException ex = await Assert.ThrowsAsync<HttpRequestException>(() => content.CopyToAsync(m));
            Assert.IsType<ObjectDisposedException>(ex.InnerException);
        }
示例#5
0
        public void CopyToAsync_ThrowCustomExceptionInOverriddenAsyncMethod_ExceptionBubblesUp()
        {
            var content = new MockContent(new MockException(), MockOptions.ThrowInAsyncSerializeMethods);

            var m = new MemoryStream();

            Assert.Throws <MockException>(() => { Task t = content.CopyToAsync(m); });
        }
示例#6
0
        public async Task CopyToAsync_ThrowIOExceptionInOverriddenMethod_ThrowsWrappedHttpRequestException()
        {
            var content = new MockContent(new IOException(), MockOptions.ThrowInSerializeMethods);

            Task t = content.CopyToAsync(new MemoryStream());
            HttpRequestException ex = await Assert.ThrowsAsync<HttpRequestException>(() => t);
            Assert.IsType<IOException>(ex.InnerException);
        }
示例#7
0
        public async Task CopyToAsync_ThrowIOExceptionInOverriddenAsyncMethod_ThrowsWrappedHttpRequestException()
        {
            var content = new MockContent(new IOException(), MockOptions.ThrowInAsyncSerializeMethods);

            Task t = content.CopyToAsync(new MemoryStream());
            HttpRequestException ex = await Assert.ThrowsAsync <HttpRequestException>(() => t);

            Assert.IsType <IOException>(ex.InnerException);
        }
示例#8
0
        public async Task CopyToAsync_CallWithMockContent_MockContentMethodCalled()
        {
            var content = new MockContent(MockOptions.CanCalculateLength);
            var m       = new MemoryStream();

            await content.CopyToAsync(m);

            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            Assert.Equal(content.GetMockData(), m.ToArray());
        }
示例#9
0
        public void CopyToAsync_MockContentReturnsNull_ThrowsInvalidOperationException()
        {
            // return 'null' when CopyToAsync() is called.
            var content = new MockContent(MockOptions.ReturnNullInCopyToAsync);
            var m       = new MemoryStream();

            // The HttpContent derived class (MockContent in our case) must return a Task object when WriteToAsync()
            // is called. If not, HttpContent will throw.
            Assert.Throws <InvalidOperationException>(() => { Task t = content.CopyToAsync(m); });
        }
示例#10
0
        public async Task CopyToAsync_CallWithMockContent_MockContentMethodCalled()
        {
            var content = new MockContent(MockOptions.CanCalculateLength);
            var m = new MemoryStream();

            await content.CopyToAsync(m);

            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            Assert.Equal(content.GetMockData(), m.ToArray());
        }
示例#11
0
        public async Task CopyToAsync_Unbuffered_CanBeCanceled()
        {
            // Unbuffered CopyToAsync will pass the CT to the SerializeToStreamAsync
            var content = new MockContent();

            var cts = new CancellationTokenSource();

            cts.Cancel();

            using var ms = new MemoryStream();
            await Assert.ThrowsAsync <TaskCanceledException>(() => content.CopyToAsync(ms, cts.Token));

            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            Assert.Equal(0, content.CreateContentReadStreamCount);
        }
示例#12
0
        public async Task CopyToAsync_BufferContentFirst_UseBufferedStreamAsSource()
        {
            var data    = new byte[10];
            var content = new MockContent(data);
            await content.LoadIntoBufferAsync();

            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            var destination = new MemoryStream();
            await content.CopyToAsync(destination);

            // Our MockContent should not be called for the CopyTo() operation since the buffered stream should be
            // used.
            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            Assert.Equal(data.Length, destination.Length);
        }
示例#13
0
        public void Dispose_DisposedObjectThenAccessMembers_ThrowsObjectDisposedException()
        {
            var content = new MockContent();

            content.Dispose();

            var m = new MemoryStream();

            Assert.Throws <ObjectDisposedException>(() => { content.CopyToAsync(m); });
            Assert.Throws <ObjectDisposedException>(() => { content.ReadAsByteArrayAsync(); });
            Assert.Throws <ObjectDisposedException>(() => { content.ReadAsStringAsync(); });
            Assert.Throws <ObjectDisposedException>(() => { content.ReadAsStreamAsync(); });
            Assert.Throws <ObjectDisposedException>(() => { content.LoadIntoBufferAsync(); });

            // Note that we don't throw when users access the Headers property. This is useful e.g. to be able to
            // read the headers of a content, even though the content is already disposed. Note that the .NET guidelines
            // only require members to throw ObjectDisposedExcpetion for members "that cannot be used after the object
            // has been disposed of".
            _output.WriteLine(content.Headers.ToString());
        }
示例#14
0
 public void CopyToAsync_MockContentReturnsNull_ThrowsInvalidOperationException()
 {
     // return 'null' when CopyToAsync() is called.
     var content = new MockContent(MockOptions.ReturnNullInCopyToAsync); 
     var m = new MemoryStream();
     
     // The HttpContent derived class (MockContent in our case) must return a Task object when WriteToAsync()
     // is called. If not, HttpContent will throw.
     Assert.Throws<InvalidOperationException>(() => { Task t = content.CopyToAsync(m); });
 }
示例#15
0
        public async Task CopyToAsync_BufferContentFirst_UseBufferedStreamAsSource()
        {
            var data = new byte[10];
            var content = new MockContent(data);
            content.LoadIntoBufferAsync().Wait();

            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            var destination = new MemoryStream();
            await content.CopyToAsync(destination);

            // Our MockContent should not be called for the CopyTo() operation since the buffered stream should be 
            // used.
            Assert.Equal(1, content.SerializeToStreamAsyncCount);
            Assert.Equal(data.Length, destination.Length);
        }
示例#16
0
        public async Task CopyToAsync_ThrowObjectDisposedExceptionInOverriddenAsyncMethod_ThrowsWrappedHttpRequestException()
        {
            var content = new MockContent(new ObjectDisposedException(""), MockOptions.ThrowInAsyncSerializeMethods);

            var m = new MemoryStream();
            HttpRequestException ex = await Assert.ThrowsAsync <HttpRequestException>(() => content.CopyToAsync(m));

            Assert.IsType <ObjectDisposedException>(ex.InnerException);
        }
示例#17
0
        public async Task Dispose_DisposedObjectThenAccessMembers_ThrowsObjectDisposedException()
        {
            var content = new MockContent();
            content.Dispose();

            var m = new MemoryStream();

            await Assert.ThrowsAsync<ObjectDisposedException>(() => content.CopyToAsync(m));
            await Assert.ThrowsAsync<ObjectDisposedException>(() => content.ReadAsByteArrayAsync());
            await Assert.ThrowsAsync<ObjectDisposedException>(() => content.ReadAsStringAsync());
            await Assert.ThrowsAsync<ObjectDisposedException>(() => content.ReadAsStreamAsync());
            await Assert.ThrowsAsync<ObjectDisposedException>(() => content.LoadIntoBufferAsync());

            // Note that we don't throw when users access the Headers property. This is useful e.g. to be able to 
            // read the headers of a content, even though the content is already disposed. Note that the .NET guidelines
            // only require members to throw ObjectDisposedExcpetion for members "that cannot be used after the object 
            // has been disposed of".
            _output.WriteLine(content.Headers.ToString());
        }