public HttpStreamRouteObject(ISocketConnection socketConnection, HttpStreamRouter httpStreamRouter)
 {
     _socketConnection = socketConnection;
     _httpStreamRouter = httpStreamRouter;
     _socketConnection.DataReceived += SocketConnectionOnDataReceived;
     _httpRequestStream = new HttpRequestStream();
 }
        public void HttpRequestStream_Reads_Single_Header()
        {
            const string httpMessage = "GET http://localhost:9000/ HTTP/1.1\x0d\x0aTest:OK\x0d\x0a\x0d\x0a";
            var httpMessageBytes = Encoding.UTF8.GetBytes(httpMessage);

            var httpStream = new HttpRequestStream();
            httpStream.Write(httpMessageBytes, 0, httpMessageBytes.Length);

            Assert.AreEqual(1, httpStream.Headers.Count);
        }
        public void HttpRequestStream_Parses_Version()
        {
            const string methodAndUri = "bla bla Version";
            var methodAndUriBytes = Encoding.UTF8.GetBytes(methodAndUri);

            var httpStream = new HttpRequestStream();
            httpStream.Write(methodAndUriBytes, 0, methodAndUriBytes.Length);

            Assert.AreEqual("Version", httpStream.HttpVersion);
        }
        public void HttpRequestStream_Parses_Method()
        {
            const string methodAndUri = "Method";
            var methodAndUriBytes = Encoding.UTF8.GetBytes(methodAndUri);

            var httpStream = new HttpRequestStream();
            httpStream.Write(methodAndUriBytes, 0, methodAndUriBytes.Length);

            Assert.AreEqual("Method", httpStream.Method);
        }
        public void HttpRequestStream_Parses_Single_Header()
        {
            const string httpMessage = "GET http://localhost:9000/ HTTP/1.1\x0d\x0aTest:OK\x0d\x0a\x0d\x0a";
            var httpMessageBytes = Encoding.UTF8.GetBytes(httpMessage);

            var httpStream = new HttpRequestStream();
            httpStream.Write(httpMessageBytes, 0, httpMessageBytes.Length);

            Assert.IsTrue(httpStream.Headers.ContainsKey("Test"));
            Assert.AreEqual("OK", httpStream.Headers["Test"]);
        }
        public void HttpRequestStream_Skips_No_Data()
        {
            const string methodAndUri = "";
            var methodAndUriBytes = Encoding.UTF8.GetBytes(methodAndUri);

            var httpStream = new HttpRequestStream();
            httpStream.Write(methodAndUriBytes, 0, methodAndUriBytes.Length);

            Assert.AreEqual(null, httpStream.Method);
            Assert.AreEqual(null, httpStream.Uri);
            Assert.AreEqual(null, httpStream.HttpVersion);
        }
        public void HttpRequestStream_Streams_Body_On_Read()
        {
            const string httpMessage = "GET http://localhost:9000/ HTTP/1.1\x0d\x0a\x0d\x0aThis is the body";
            var httpMessageBytes = Encoding.UTF8.GetBytes(httpMessage);

            var httpStream = new HttpRequestStream();
            httpStream.Write(httpMessageBytes, 0, httpMessageBytes.Length);

            var bodyBuffer = new byte[1024];
            httpStream.Position = 0;
            var bytesRead = httpStream.Read(bodyBuffer, 0, bodyBuffer.Length);
            var body = Encoding.UTF8.GetString(bodyBuffer, 0, bytesRead);

            Assert.AreEqual("This is the body", body);
        }