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

Method writerRoundtrip

Tests/Libraries/Http/HttpWebSocketFrameTest.cpp:577–621  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

575}
576
577void SC::HttpWebSocketFrameTest::writerRoundtrip()
578{
579 HttpWebSocketFrameWriter writer;
580 writer.reset(HttpWebSocketEndpointRole::Client);
581
582 HttpWebSocketFrameHeaderView header;
583 header.fin = true;
584 header.opcode = HttpWebSocketOpcode::Binary;
585 header.masked = true;
586 header.payloadLength = 6;
587 header.maskKey[0] = 0xAA;
588 header.maskKey[1] = 0xBB;
589 header.maskKey[2] = 0xCC;
590 header.maskKey[3] = 0xDD;
591
592 char payload[] = {char(0x00), char(0x11), char(0x22), char(0x33), char(0x44), char(0x55)};
593 char encoded[32] = {0};
594
595 Span<const char> encodedHeader;
596 SC_TEST_EXPECT(writer.beginFrame(header, {encoded, sizeof(encoded)}, encodedHeader));
597
598 Span<char> payloadOut = {encoded + encodedHeader.sizeInBytes(), sizeof(payload)};
599 for (size_t idx = 0; idx < sizeof(payload); ++idx)
600 {
601 payloadOut[idx] = payload[idx];
602 }
603
604 SC_TEST_EXPECT(writer.writePayload({payloadOut.data(), 2}));
605 SC_TEST_EXPECT(writer.writePayload({payloadOut.data() + 2, 4}));
606 SC_TEST_EXPECT(writer.finishFrame());
607
608 ReaderCollector collector;
609 HttpWebSocketFrameReader reader;
610 reader.reset(HttpWebSocketEndpointRole::Server);
611 reader.onFrameHeader.bind<ReaderCollector, &ReaderCollector::onHeader>(collector);
612 reader.onFramePayload.bind<ReaderCollector, &ReaderCollector::onPayload>(collector);
613
614 size_t consumed = 0;
615 SC_TEST_EXPECT(reader.parse({encoded, encodedHeader.sizeInBytes() + sizeof(payload)}, consumed));
616 SC_TEST_EXPECT(consumed == encodedHeader.sizeInBytes() + sizeof(payload));
617 SC_TEST_EXPECT(collector.numHeaders == 1);
618 SC_TEST_EXPECT(collector.headers[0].opcode == HttpWebSocketOpcode::Binary);
619 SC_TEST_EXPECT(collector.headers[0].masked);
620 SC_TEST_EXPECT(spansEqual(collector.payload.toSpanConst(), {payload, sizeof(payload)}));
621}
622
623void SC::runHttpWebSocketFrameTest(SC::TestReport& report) { HttpWebSocketFrameTest test(report); }

Callers

nothing calls this directly

Calls 8

spansEqualFunction · 0.85
beginFrameMethod · 0.80
writePayloadMethod · 0.80
finishFrameMethod · 0.80
resetMethod · 0.45
sizeInBytesMethod · 0.45
dataMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected