public void SendHeadersAndBody(int responseBodyLength) { var buffer = new ArraySegment <byte>(new byte[_64kb]); var response = CreateResponse(responseBodyLength); using (var socket = new HttpStreamSocket(response)) using (var message = new HttpMessage(buffer, _8kb)) { message.Socket = socket; message.WriteMessageStart("GET / HTTP/1.1"); message.WriteHeader("User-Agent", "curl/7.37.0"); message.WriteHeader("Host", "localhost"); message.Send(_100ms); const string expectedRequest = "GET / HTTP/1.1\r\n" + "User-Agent: curl/7.37.0\r\n" + "Host: localhost\r\n" + "\r\n"; var expectedRequestBytes = Encoding.ASCII.GetBytes(expectedRequest); var expectedResponseBytes = Encoding.ASCII.GetBytes(response); CollectionAssert.AreEqual(expectedRequestBytes, socket.InputBytes); CollectionAssert.AreEqual(expectedResponseBytes, socket.OutputBytes); } }
public void ReadResponseBody(int responseBodyLength) { var buffer = new ArraySegment <byte>(new byte[_64kb]); var response = CreateResponse(responseBodyLength); using (var socket = new HttpStreamSocket(response)) using (var message = new HttpMessage(buffer, _8kb)) { message.Socket = socket; message.Send(_100ms); using (var reader = new StreamReader(message.GetBodyStream())) { var responseBody = reader.ReadToEnd(); Assert.AreEqual(responseBodyLength, responseBody.Length); } } }
public void SendResponseMessageTooLarge() { var buffer = new ArraySegment <byte>(new byte[_64kb]); var response = CreateResponse(_64kb); using (var socket = new HttpStreamSocket(response)) using (var message = new HttpMessage(buffer, _8kb)) { message.Socket = socket; message.WriteMessageStart("GET / HTTP/1.1"); message.WriteHeader("User-Agent", "curl/7.37.0"); message.WriteHeader("Host", "localhost"); var exception = Assert.Throws <HttpParserException>(() => message.Send(_100ms)); Assert.AreEqual("stream ended at an unexpected time", exception.Message); } }