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()); }
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); }
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); }
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); }
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); }
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); }
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); }