public void http_stream_disposing() { var under = Substitute.For<Stream>(); var subject = new HttpResponseStream(under, 0); subject.Dispose(); under.Received().Close(); }
public void a_zero_length_uncompressed_stream_should_result_in_an_empty_string() { var src = new MemoryStream(); var subject = new HttpResponseStream(src, 0); var result = subject.ReadStringToLength(); Assert.That(result, Is.EqualTo("")); }
/// <summary> /// Reads synchronously until headers are complete, then /// provides the remaining data in a stream /// </summary> public HttpResponse(Stream rawResponse, TimeSpan timeout) { _rawResponse = rawResponse; Headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); ReadStatusLine(NextLine(_rawResponse)); foreach (var headerLine in NonBlankLines(_rawResponse)) AddHeader(headerLine); HeadersComplete = true; _rawResponse.ReadByte(); // eat one spare byte if (_rawResponse is SocketStream) ((SocketStream)_rawResponse).ResetCounts(); RawBodyStream = _rawResponse; // I am scared of this code: var buffered = new PushbackInputStream(_rawResponse); var dechunked = IsChunked() ? (Stream)new HttpChunkedStreamWrapper(buffered, timeout) : buffered; var decompressed = RestOfStreamDecompressed(dechunked); BodyReader = new HttpResponseStream(decompressed, ReportedBodyLength()) {Timeout = timeout}; }