예제 #1
0
        public async Task DataIsCorrectlyWrittenToResponse()
        {
            // Arrange
            var responseMsg = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ByteArrayContent(new byte[] { 1, 2, 3, 4 })
            };

            responseMsg.Content.Headers.ContentType   = new System.Net.Http.Headers.MediaTypeHeaderValue("video/mp4");
            responseMsg.Content.Headers.ContentLength = 4;

            var client = new Mock <IHttpClient>();

            client.Setup(c => c.GetAsync(new Uri("https://example.com"), null)).Returns(Task.FromResult(responseMsg));
            var proxy = new MediaProxyServer(client.Object);

            var request = new Mock <IHttpRequest>();

            request.Setup(c => c.GetQueryParameter("stream")).Returns("https://example.com");
            var responseStream = new MemoryStream();
            var response       = new Mock <IHttpResponse>();

            response.SetupGet(c => c.OutputStream).Returns(responseStream);
            response.Setup(c => c.SetContentInfo(4, "video/mp4", It.IsAny <byte[]>()));

            // Act
            await proxy.HandleRequest(request.Object, response.Object);

            // Assert
            CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, responseStream.ToArray());
            response.Verify(c => c.SetContentInfo(4, "video/mp4", It.IsAny <byte[]>()), Times.Once());
        }
예제 #2
0
        public async Task NotFoundIsPropagatedCorrectly()
        {
            // Arrange
            var responseMsg = new HttpResponseMessage(HttpStatusCode.NotFound);
            var client      = new Mock <IHttpClient>();

            client.Setup(c => c.GetAsync(new Uri("https://example.com"), null)).Returns(Task.FromResult(responseMsg));

            var proxy = new MediaProxyServer(client.Object);

            var request = new Mock <IHttpRequest>();

            request.Setup(c => c.GetQueryParameter("stream")).Returns("https://example.com");
            request.Setup(c => c.GetQueryParameter("user")).Returns(string.Empty);

            var response = new Mock <IHttpResponse>();

            response.Setup(c => c.SetStatus(404, It.IsAny <string>())).Verifiable();
            response.SetupGet(c => c.OutputStream).Returns(new MemoryStream());

            // Act
            await proxy.HandleRequest(request.Object, response.Object);

            // Assert
            response.Verify(c => c.SetStatus(404, It.IsAny <string>()), Times.Once());
        }
예제 #3
0
        public async Task MissingQueryParameterIsIgnored()
        {
            // Arrange
            var client = new Mock <IHttpClient>();

            client.Setup(c => c.GetAsync(It.IsAny <Uri>(), null)).Verifiable();
            var proxy = new MediaProxyServer(client.Object);

            var request = new Mock <IHttpRequest>();

            request.Setup(c => c.GetQueryParameter("stream")).Returns <string>(null);

            var response = new Mock <IHttpResponse>();

            response.SetupGet(c => c.OutputStream).Returns(new MemoryStream());

            // Act
            await proxy.HandleRequest(request.Object, response.Object);

            // Assert
            client.Verify(c => c.GetAsync(It.IsAny <Uri>(), null), Times.Never());
        }
예제 #4
0
        public async Task MissingArgumentThrowsException()
        {
            // Arrange
            var client = new Mock <IHttpClient>();
            var proxy  = new MediaProxyServer(client.Object);

            var request  = new Mock <IHttpRequest>();
            var response = new Mock <IHttpResponse>();

            // Act
            var respEx = await ExceptionAssert.CatchAsync <ArgumentNullException>(() => proxy.HandleRequest(request.Object, null));

            var reqEx = await ExceptionAssert.CatchAsync <ArgumentNullException>(() => proxy.HandleRequest(null, response.Object));

            // Assert
            Assert.IsNotNull(respEx);
            Assert.IsNotNull(reqEx);
            Assert.AreEqual("response", respEx.ParamName);
            Assert.AreEqual("request", reqEx.ParamName);
        }