static void AssertRequest(TestRequest[] expected, TestRequest[] actual, HttpParser machine) { for (int i = 0; i < expected.Length; i++) { Assert.IsTrue(i <= actual.Length - 1, "Expected more requests than received"); var expectedRequest = expected[i]; var actualRequest = actual[i]; //Console.WriteLine("Asserting request " + expectedRequest.Name); Assert.AreEqual(expectedRequest.Method, actualRequest.Method, "Unexpected method."); Assert.AreEqual(expectedRequest.RequestUri, actualRequest.RequestUri, "Unexpected request URI."); Assert.AreEqual(expectedRequest.VersionMajor, actualRequest.VersionMajor, "Unexpected major version."); Assert.AreEqual(expectedRequest.VersionMinor, actualRequest.VersionMinor, "Unexpected minor version."); Assert.AreEqual(expectedRequest.RequestPath, actualRequest.RequestPath, "Unexpected request path."); Assert.AreEqual(expectedRequest.QueryString, actualRequest.QueryString, "Unexpected query string."); Assert.AreEqual(expectedRequest.Fragment, actualRequest.Fragment, "Unexpected fragment."); //Assert.AreEqual(expected.RequestPath, test.RequestPath, "Unexpected path."); Assert.IsTrue(actualRequest.OnHeadersEndCalled, "OnHeadersEnd was not called."); Assert.AreEqual(expectedRequest.ShouldKeepAlive, actualRequest.ShouldKeepAlive, "Wrong value for ShouldKeepAlive"); foreach (var pair in expectedRequest.Headers) { Assert.IsTrue(actualRequest.Headers.ContainsKey(pair.Key), "Actual headers did not contain key '" + pair.Key + "'"); Assert.AreEqual(pair.Value, actualRequest.Headers[pair.Key], "Actual headers had wrong value for key '" + pair.Key + "'"); } foreach (var pair in actualRequest.Headers) { Assert.IsTrue(expectedRequest.Headers.ContainsKey(pair.Key), "Unexpected header named '" + pair.Key + "'"); } if (expectedRequest.Body != null) { var expectedBody = Encoding.UTF8.GetString(expectedRequest.Body); Assert.IsNotNull(actualRequest.Body, "Expected non-null request body"); var actualBody = Encoding.UTF8.GetString(actualRequest.Body); Assert.AreEqual(expectedBody, actualBody, "Body differs"); } else Assert.IsNull(actualRequest.Body); } }
static void AssertRequest(TestRequest[] expected, IHttpMessage[] actual) { for (int i = 0; i < expected.Length; i++) { Assert.IsTrue(i <= actual.Length - 1, "Expected more requests than received"); var expectedRequest = expected[i]; var actualRequest = actual[i]; //Console.WriteLine("Asserting request " + expectedRequest.Name); Assert.AreEqual(expectedRequest.Method, actualRequest.Method, "Unexpected method."); Assert.AreEqual(expectedRequest.RequestUri, actualRequest.RequestUri, "Unexpected request URI."); Assert.AreEqual(expectedRequest.VersionMajor, actualRequest.HttpVersion.Major, "Unexpected major version."); Assert.AreEqual(expectedRequest.VersionMinor, actualRequest.HttpVersion.Minor, "Unexpected minor version."); Assert.AreEqual(expectedRequest.RequestPath, actualRequest.RequestPath, "Unexpected request path."); Assert.AreEqual(expectedRequest.QueryString, actualRequest.QueryString, "Unexpected query string."); Assert.AreEqual(expectedRequest.Fragment, actualRequest.Fragment, "Unexpected fragment."); //Assert.AreEqual(expected.RequestPath, test.RequestPath, "Unexpected path."); Assert.AreEqual(expectedRequest.ShouldKeepAlive, actualRequest.ShouldKeepAlive, "Wrong value for ShouldKeepAlive"); foreach (var pair in expectedRequest.Headers) { Assert.IsTrue(actualRequest.Headers.Any(h => string.Equals(h.Key, pair.Key, StringComparison.OrdinalIgnoreCase)), "Actual headers did not contain key '" + pair.Key + "'"); Assert.AreEqual(pair.Value, actualRequest.Headers.Where(h => string.Equals(h.Key, pair.Key, StringComparison.OrdinalIgnoreCase)).Select(h => h.Value).First(), "Actual headers had wrong value for key '" + pair.Key + "'"); } foreach (var pair in actualRequest.Headers) { Assert.IsTrue(expectedRequest.Headers.ContainsKey(pair.Key), "Unexpected header named '" + pair.Key + "'"); } if (expectedRequest.Body != null) { var expectedBody = Encoding.UTF8.GetString(expectedRequest.Body); Assert.IsNotNull(actualRequest.Body, "Expected non-null request body"); StreamReader sr = new StreamReader(actualRequest.Body, Encoding.UTF8); var actualBody = sr.ReadToEnd(); Assert.AreEqual(expectedBody, actualBody, "Body differs"); } else Assert.AreEqual(0, actualRequest.Body.Length); } }
public async Task OnMessageEnd(HttpParser parser) { //Console.WriteLine("OnMessageEnd"); Assert.AreEqual(shouldKeepAlive, parser.ShouldKeepAlive, "Differing values for parser.ShouldKeepAlive between OnHeadersEnd and OnMessageEnd"); TestRequest request = new TestRequest(); request.VersionMajor = versionMajor; request.VersionMinor = versionMinor; request.ShouldKeepAlive = shouldKeepAlive; request.Method = method; request.RequestUri = requestUri; request.RequestPath = path; request.QueryString = queryString; request.Fragment = fragment; request.Headers = headers; request.OnHeadersEndCalled = onHeadersEndCalled; // aggregate body chunks into one big chunk var length = body.Aggregate(0, (s, b) => s + b.Count); if (length > 0) { request.Body = new byte[length]; int where = 0; foreach (var buf in body) { Buffer.BlockCopy(buf.Array, buf.Offset, request.Body, where, buf.Count); where += buf.Count; } } // add it to the list of requests recieved. Requests.Add(request); // reset our internal state versionMajor = versionMinor = -1; method = requestUri = queryString = fragment = headerName = headerValue = null; headers = null; body = null; shouldKeepAlive = false; onHeadersEndCalled = false; }