| 575 | } |
| 576 | |
| 577 | void 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 | |
| 623 | void SC::runHttpWebSocketFrameTest(SC::TestReport& report) { HttpWebSocketFrameTest test(report); } |
nothing calls this directly
no test coverage detected