| 317 | } |
| 318 | |
| 319 | void HttpParserTest::testRequest(HttpParser& parser, const StringView originalString, |
| 320 | const StringView expectedMethodView) |
| 321 | { |
| 322 | parser.type = HttpParser::Type::Request; |
| 323 | // Test the streaming parser sending a single character at time |
| 324 | size_t position = 0; |
| 325 | size_t readBytes = 0; |
| 326 | |
| 327 | int numMatches[9] = {0}; |
| 328 | |
| 329 | size_t length = 1; |
| 330 | Buffer currentField; |
| 331 | while (true) |
| 332 | { |
| 333 | length = min(length, originalString.sizeInBytes()); |
| 334 | |
| 335 | const StringView sv = { |
| 336 | {originalString.bytesWithoutTerminator() + position, length}, false, originalString.getEncoding()}; |
| 337 | Span<const char> parsedData; |
| 338 | SC_TEST_EXPECT(parser.parse(sv.toCharSpan(), readBytes, parsedData)); |
| 339 | position += readBytes; |
| 340 | if (parser.state == HttpParser::State::Finished) |
| 341 | break; |
| 342 | SC_TEST_EXPECT(currentField.append(parsedData)); |
| 343 | if (parser.state == HttpParser::State::Result) |
| 344 | { |
| 345 | const StringView parsed(currentField.toSpan(), false, StringEncoding::Ascii); |
| 346 | switch (parser.token) |
| 347 | { |
| 348 | case HttpParser::Token::Method: { |
| 349 | SC_TEST_EXPECT(parsed == expectedMethodView); |
| 350 | break; |
| 351 | } |
| 352 | case HttpParser::Token::Url: { |
| 353 | SC_TEST_EXPECT(parsed == "/asd"); |
| 354 | break; |
| 355 | } |
| 356 | case HttpParser::Token::Version: { |
| 357 | SC_TEST_EXPECT(parsed == "HTTP/1.1"); |
| 358 | break; |
| 359 | } |
| 360 | case HttpParser::Token::HeaderName: { |
| 361 | switch (numMatches[static_cast<int>(HttpParser::Token::HeaderName)]) |
| 362 | { |
| 363 | case 0: SC_TEST_EXPECT(parsed == "User-agent"); break; |
| 364 | case 1: SC_TEST_EXPECT(parsed == "Host"); break; |
| 365 | } |
| 366 | break; |
| 367 | } |
| 368 | case HttpParser::Token::HeaderValue: { |
| 369 | switch (numMatches[static_cast<int>(HttpParser::Token::HeaderValue)]) |
| 370 | { |
| 371 | case 0: SC_TEST_EXPECT(parsed == "Mozilla/1.1"); break; |
| 372 | case 1: SC_TEST_EXPECT(parsed == "github.com"); break; |
| 373 | } |
| 374 | break; |
| 375 | } |
| 376 | case HttpParser::Token::HeadersEnd: break; |
nothing calls this directly
no test coverage detected