public void Can_send_ResponseStream_test_with_Custom_Header() { var mockResponse = new MockHttpResponse(); var customText = "<h1>Custom Stream</h1>"; var customTextBytes = customText.ToUtf8Bytes(); var ms = new MemoryStream(); ms.Write(customTextBytes, 0, customTextBytes.Length); var httpResult = new HttpResult(ms, MimeTypes.Html) { Headers = { {"X-Custom","Header"} } }; var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.That(reponseWasAutoHandled.Result, Is.True); var writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(customText)); Assert.That(mockResponse.Headers["X-Custom"], Is.EqualTo("Header")); }
public void Can_handle_null_HttpResult_StatusDescription() { var mockResponse = new MockHttpResponse(); var httpResult = new HttpResult { StatusDescription = null }; var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.That(reponseWasAutoHandled.Result, Is.True); Assert.IsNotNull(mockResponse.StatusDescription); }
public void Test_response_with_html_result() { var mockResponse = new MockHttpResponse(); const string url = "http://www.servicestack.net"; var htmlResult = Html.RedirectTo(url); var reponseWasAutoHandled = mockResponse.WriteToResponse(htmlResult, "text/xml"); Assert.That(reponseWasAutoHandled.Result, Is.True); var expectedOutput = string.Format( "<html><head><meta http-equiv=\"refresh\" content=\"0;url={0}\"></head></html>", url); var writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(expectedOutput)); Assert.That(mockResponse.Headers["Location"], Is.EqualTo(url)); }
public void Can_send_ResponseText_test_with_StatusDescription() { var mockRequest = new MockHttpRequest { ContentType = MimeTypes.Json }; var mockRequestContext = new HttpRequestContext(mockRequest, null, new object()); var mockResponse = new MockHttpResponse(); var customStatus = "Custom Status Description"; var httpResult = new HttpResult(System.Net.HttpStatusCode.Accepted, customStatus) { RequestContext = mockRequestContext }; var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.That(reponseWasAutoHandled.Result, Is.True); var statusDesc = mockResponse.StatusDescription; Assert.That(mockResponse.StatusCode, Is.EqualTo((int)System.Net.HttpStatusCode.Accepted)); Assert.That(statusDesc, Is.EqualTo(customStatus)); }
public void Can_send_ResponseText_test_with_Custom_Header() { var mockResponse = new MockHttpResponse(); var customText = "<h1>Custom Text</h1>"; var httpResult = new HttpResult(customText, MimeTypes.Html) { Headers = { {"X-Custom","Header"} } }; var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.That(reponseWasAutoHandled.Result, Is.True); var writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(customText)); Assert.That(mockResponse.Headers["X-Custom"], Is.EqualTo("Header")); }
public async Task Can_use_fileStream() { byte[] fileBytes = uploadedTextFile.ReadFully(); string fileText = Encoding.ASCII.GetString(fileBytes); "File content size {0}".Print(fileBytes.Length); "File content is {0}".Print(fileText); var mockRequest = new MockHttpRequest(); var mockResponse = new MockHttpResponse(mockRequest); mockRequest.Headers.Add("Range", "bytes=6-8"); var httpResult = new HttpResult(uploadedTextFile, "audio/mpeg"); bool reponseWasAutoHandled = await mockResponse.WriteToResponse(mockRequest, httpResult); Assert.That(reponseWasAutoHandled, Is.True); string writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(fileText.Substring(6, 3))); Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 6-8/33")); Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString())); Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes")); Assert.That(mockResponse.StatusCode, Is.EqualTo(206)); }
public async Task Can_seek_from_middle_to_middle() { var mockRequest = new MockHttpRequest(); mockRequest.Headers.Add("Range", "bytes=3-5"); var mockResponse = new MockHttpResponse(mockRequest); string customText = "1234567890"; byte[] customTextBytes = customText.ToUtf8Bytes(); var ms = new MemoryStream(); ms.Write(customTextBytes, 0, customTextBytes.Length); var httpResult = new HttpResult(ms, "audio/mpeg"); bool reponseWasAutoHandled = await mockResponse.WriteToResponse(mockRequest, httpResult); Assert.That(reponseWasAutoHandled, Is.True); string writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo("456")); Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 3-5/10")); Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString())); Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes")); Assert.That(mockResponse.StatusCode, Is.EqualTo(206)); }
public async Task Can_seek_from_beginning_to_further_than_end() { // Not sure if this would ever occur in real streaming scenarios, but it does occur // when some crawlers use range headers to specify a max size to return. // e.g. Facebook crawler always sends range header of 'bytes=0-524287'. var mockRequest = new MockHttpRequest(); var mockResponse = new MockHttpResponse(mockRequest); mockRequest.Headers[HttpHeaders.Range] = "bytes=0-524287"; string customText = "1234567890"; byte[] customTextBytes = customText.ToUtf8Bytes(); var ms = new MemoryStream(); ms.Write(customTextBytes, 0, customTextBytes.Length); var httpResult = new HttpResult(ms, "audio/mpeg"); bool reponseWasAutoHandled = await mockResponse.WriteToResponse(mockRequest, httpResult); Assert.That(reponseWasAutoHandled, Is.True); string writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(customText)); Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 0-9/10")); Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString())); Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes")); Assert.That(mockResponse.StatusCode, Is.EqualTo(206)); }
public async Task Can_respond_to_non_range_requests_with_200_OK_response() { var mockRequest = new MockHttpRequest(); var mockResponse = new MockHttpResponse(mockRequest); string customText = "1234567890"; byte[] customTextBytes = customText.ToUtf8Bytes(); var ms = new MemoryStream(); ms.Write(customTextBytes, 0, customTextBytes.Length); var httpResult = new HttpResult(ms, "audio/mpeg"); bool reponseWasAutoHandled = await mockResponse.WriteToResponse(mockRequest, httpResult); Assert.That(reponseWasAutoHandled, Is.True); string writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(customText)); Assert.That(mockResponse.Headers["Content-Range"], Is.Null); Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes")); Assert.That(mockResponse.StatusCode, Is.EqualTo(200)); }
public void Test_response_with_CompressedResult() { using (new BasicAppHost(typeof(CompressionTests).Assembly).Init()) { var mockResponse = new MockHttpResponse(); var simpleDto = new TestCompress(1, "name"); var simpleDtoXml = DataContractSerializer.Instance.Parse(simpleDto); const string expectedXml = "<TestCompress xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.ddnglobal.com/types/\"><Id>1</Id><Name>name</Name></TestCompress>"; Assert.That(simpleDtoXml, Is.EqualTo(expectedXml)); var simpleDtoZip = simpleDtoXml.Deflate(); Assert.That(simpleDtoZip.Length, Is.GreaterThan(0)); var compressedResult = new CompressedResult(simpleDtoZip); var reponseWasAutoHandled = mockResponse.WriteToResponse( compressedResult, CompressionTypes.Deflate); Assert.That(reponseWasAutoHandled, Is.True); //var bytesToWriteToResponseStream = new byte[simpleDtoZip.Length - 4]; //Array.Copy(simpleDtoZip, CompressedResult.Adler32ChecksumLength, bytesToWriteToResponseStream, 0, bytesToWriteToResponseStream.Length); var bytesToWriteToResponseStream = simpleDtoZip; var writtenBytes = mockResponse.ReadAsBytes(); Assert.That(writtenBytes, Is.EqualTo(bytesToWriteToResponseStream)); Assert.That(mockResponse.ContentType, Is.EqualTo(MimeTypes.Xml)); Assert.That(mockResponse.Headers[HttpHeaders.ContentEncoding], Is.EqualTo(CompressionTypes.Deflate)); Log.Debug("Content-length: " + writtenBytes.Length); Log.Debug(BitConverter.ToString(writtenBytes)); } }
public void Can_seek_from_beginning_to_end() { var mockRequest = new MockHttpRequest(); var mockResponse = new MockHttpResponse(); mockRequest.Headers[HttpHeaders.Range] = "bytes=0"; string customText = "1234567890"; byte[] customTextBytes = customText.ToUtf8Bytes(); var ms = new MemoryStream(); ms.Write(customTextBytes, 0, customTextBytes.Length); var httpResult = new HttpResult(ms, "audio/mpeg"); bool reponseWasAutoHandled = mockResponse.WriteToResponse(mockRequest, httpResult); Assert.That(reponseWasAutoHandled, Is.True); string writtenString = mockResponse.ReadAsString(); Assert.That(writtenString, Is.EqualTo(customText)); Assert.That(mockResponse.Headers["Content-Range"], Is.EqualTo("bytes 0-9/10")); Assert.That(mockResponse.Headers["Content-Length"], Is.EqualTo(writtenString.Length.ToString())); Assert.That(mockResponse.Headers["Accept-Ranges"], Is.EqualTo("bytes")); Assert.That(mockResponse.StatusCode, Is.EqualTo(206)); }
public void Can_change_serialization_options() { var mockResponse = new MockHttpResponse(); var dto = new Poco(); Assert.That(dto.ToJson(), Is.EqualTo("{}")); var httpResult = new HttpResult(dto) { ResultScope = () => JsConfig.With(includeNullValues:true) }; var reponseWasAutoHandled = mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.That(reponseWasAutoHandled.Result, Is.True); Assert.That(mockResponse.ReadAsString(), Is.EqualTo("{\"Text\":null}")); }
public void Can_handle_null_HttpResult_StatusDescription() { var mockResponse = new MockHttpResponse(); var httpResult = new HttpResult { StatusDescription = null }; mockResponse.WriteToResponse(httpResult, MimeTypes.Html); Assert.IsNotNull(mockResponse.StatusDescription); }