Ejemplo n.º 1
0
        public void ParseRequestStream_AllHeaderTypes_AllHeadersParsed()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: 4",
                "Accept: application/json,text/xml",
                "Accept-Charset: utf-7;q=0.2, utf-8;q=0.1,*;q=0",
                "Content-Type: text/xml;charset=utf-8",
                "UnknownHeader: some:value",
                "",
                "data"
            };

            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(true, request.IsComplete);
            Assert.IsTrue(request.Headers.Any(h => h.Name == "UnknownHeader" && h.Value == "some:value"));
            Assert.AreEqual(4, request.ContentLength);
            Assert.AreEqual("utf-8", request.ContentTypeCharset);
            Assert.AreEqual(MediaType.XML, request.ContentType);
            Assert.AreEqual("utf-7", request.AcceptCharsets.First());
            Assert.AreEqual(MediaType.JSON, request.AcceptMediaTypes.First());
        }
Ejemplo n.º 2
0
        public void ParseRequestStream_ThreeEmptyResponses_EmptyRequestString()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: 4\r\n", //to force double /r/n on string.Join
                ""
            };

            var content = "data";
            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));
            byteStreamParts.Add(new byte[] { });
            byteStreamParts.Add(new byte[] { });
            byteStreamParts.Add(new byte[] { });
            byteStreamParts.Add(new byte[] { });
            byteStreamParts.Add(Encoding.UTF8.GetBytes(content));

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(false, request.IsComplete);
        }
Ejemplo n.º 3
0
        public void ParseRequestStream_WithoutDataAndHeaders_CompleteRequest()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1\r\n", //to force double /r/n on string.Join
                ""
            };

            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(true, request.IsComplete);
        }
Ejemplo n.º 4
0
        public void ParseRequestStream_PartedDataWithEmptyReponseInBetween_ValidRequest()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: 4\r\n", //to force double /r/n on string.Join
                ""
            };

            var content = Encoding.UTF8.GetBytes("data");
            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));
            byteStreamParts.Add(new byte[] { });
            byteStreamParts.Add(content);

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(true, request.IsComplete);
            CollectionAssert.AreEqual(content, request.Content);
        }
Ejemplo n.º 5
0
        public void ParseRequestStream_DataOverflowSecondStream_ValidRequest()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: 4",
                "",
                "data"
            };

            var extraData = "plusanotherextrafewbytes";
            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));
            byteStreamParts.Add(Encoding.UTF8.GetBytes(extraData));

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(true, request.IsComplete);
        }
Ejemplo n.º 6
0
        public void ParseRequestStream_ContentLengthNumberMissing_RequestIncomplete()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: four",
                "",
                "data"
            };

            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest)));

            var request = HttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(false, request.IsComplete);
        }
Ejemplo n.º 7
0
        public void ParseRequestStream_TooMuchData_RequestIncomplete()
        {
            var streamedRequest = new[] {
                "GET /api/data HTTP/1.1",
                "Content-Length: 4",
                "",
                "data"
            };

            var extraData = "plusanotherextrafewbytes";
            var byteStreamParts = new List<byte[]>();
            byteStreamParts.Add(Encoding.UTF8.GetBytes(string.Join("\r\n", streamedRequest) + extraData));

            var request = MutableHttpServerRequest.Parse(new TestStream(byteStreamParts)).Result;

            Assert.AreEqual(false, request.IsComplete);
        }