MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / testRequest

Method testRequest

Tests/Libraries/Http/HttpParserTest.cpp:319–396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

317}
318
319void 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;

Callers

nothing calls this directly

Calls 5

toSpanMethod · 0.80
sizeInBytesMethod · 0.45
parseMethod · 0.45
appendMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected