| 265 | } |
| 266 | |
| 267 | void SC::HttpWebSocketLifecycleTest::automaticPong() |
| 268 | { |
| 269 | const uint8_t maskKey[4] = {1, 2, 3, 4}; |
| 270 | |
| 271 | HttpWebSocketEndpoint client; |
| 272 | client.reset(HttpWebSocketEndpointRole::Client); |
| 273 | char pingStorage[64] = {0}; |
| 274 | Span<const char> pingFrame; |
| 275 | SC_TEST_EXPECT(client.sendPing("hi"_a8.toCharSpan(), maskKey, pingStorage, pingFrame)); |
| 276 | |
| 277 | HttpWebSocketEndpoint server; |
| 278 | server.reset(HttpWebSocketEndpointRole::Server); |
| 279 | |
| 280 | size_t consumed = 0; |
| 281 | SC_TEST_EXPECT(server.receive({pingStorage, pingFrame.sizeInBytes()}, consumed)); |
| 282 | SC_TEST_EXPECT(consumed == pingFrame.sizeInBytes()); |
| 283 | SC_TEST_EXPECT(server.hasPendingControlFrame()); |
| 284 | |
| 285 | Span<const char> pongFrame; |
| 286 | SC_TEST_EXPECT(server.getPendingControlFrame(pongFrame)); |
| 287 | |
| 288 | FrameCollector collector; |
| 289 | HttpWebSocketFrameReader reader; |
| 290 | reader.reset(HttpWebSocketEndpointRole::Client); |
| 291 | reader.onFrameHeader.bind<FrameCollector, &FrameCollector::onHeader>(collector); |
| 292 | reader.onFramePayload.bind<FrameCollector, &FrameCollector::onPayload>(collector); |
| 293 | |
| 294 | size_t pongConsumed = 0; |
| 295 | SC_TEST_EXPECT(reader.parse({const_cast<char*>(pongFrame.data()), pongFrame.sizeInBytes()}, pongConsumed)); |
| 296 | SC_TEST_EXPECT(collector.headers == 1); |
| 297 | SC_TEST_EXPECT(collector.header.opcode == HttpWebSocketOpcode::Pong); |
| 298 | SC_TEST_EXPECT(bytesEqual({collector.payload, collector.payloadSize}, "hi")); |
| 299 | } |
| 300 | |
| 301 | void SC::HttpWebSocketLifecycleTest::closeEcho() |
| 302 | { |
nothing calls this directly
no test coverage detected