aboutsummaryrefslogtreecommitdiff
path: root/src/zenhttp/servers/wstest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenhttp/servers/wstest.cpp')
-rw-r--r--src/zenhttp/servers/wstest.cpp37
1 files changed, 28 insertions, 9 deletions
diff --git a/src/zenhttp/servers/wstest.cpp b/src/zenhttp/servers/wstest.cpp
index 59c46a418..a58037fec 100644
--- a/src/zenhttp/servers/wstest.cpp
+++ b/src/zenhttp/servers/wstest.cpp
@@ -5,6 +5,7 @@
# include <zencore/scopeguard.h>
# include <zencore/testing.h>
# include <zencore/testutils.h>
+# include <zencore/timer.h>
# include <zenhttp/httpserver.h>
# include <zenhttp/httpwsclient.h>
@@ -59,7 +60,7 @@ TEST_CASE("websocket.framecodec")
std::vector<uint8_t> Frame = WsFrameCodec::BuildFrame(WebSocketOpcode::kText, Payload);
- // Server frames are unmasked — TryParseFrame should handle them
+ // Server frames are unmasked - TryParseFrame should handle them
WsFrameParseResult Result = WsFrameCodec::TryParseFrame(Frame.data(), Frame.size());
CHECK(Result.IsValid);
@@ -129,7 +130,7 @@ TEST_CASE("websocket.framecodec")
{
std::vector<uint8_t> Frame = WsFrameCodec::BuildFrame(WebSocketOpcode::kText, std::span<const uint8_t>{});
- // Pass only 1 byte — not enough for a frame header
+ // Pass only 1 byte - not enough for a frame header
WsFrameParseResult Result = WsFrameCodec::TryParseFrame(Frame.data(), 1);
CHECK_FALSE(Result.IsValid);
CHECK_EQ(Result.BytesConsumed, 0u);
@@ -335,8 +336,9 @@ namespace {
}
// IWebSocketHandler
- void OnWebSocketOpen(Ref<WebSocketConnection> Connection) override
+ void OnWebSocketOpen(Ref<WebSocketConnection> Connection, std::string_view RelativeUri) override
{
+ ZEN_UNUSED(RelativeUri);
m_OpenCount.fetch_add(1);
m_ConnectionsLock.WithExclusiveLock([&] { m_Connections.push_back(Connection); });
@@ -463,7 +465,7 @@ namespace {
if (!Done.load())
{
- // Timeout — cancel the read
+ // Timeout - cancel the read
asio::error_code Ec;
Sock.cancel(Ec);
}
@@ -476,6 +478,23 @@ namespace {
return Result;
}
+ static void WaitForServerListening(int Port)
+ {
+ Stopwatch Timer;
+ while (Timer.GetElapsedTimeMs() < 5'000)
+ {
+ asio::io_context IoCtx;
+ asio::ip::tcp::socket Probe(IoCtx);
+ asio::error_code Ec;
+ Probe.connect(asio::ip::tcp::endpoint(asio::ip::make_address("127.0.0.1"), static_cast<uint16_t>(Port)), Ec);
+ if (!Ec)
+ {
+ return;
+ }
+ Sleep(10);
+ }
+ }
+
} // anonymous namespace
TEST_CASE("websocket.integration")
@@ -501,8 +520,8 @@ TEST_CASE("websocket.integration")
Server->Close();
});
- // Give server a moment to start accepting
- Sleep(100);
+ // Wait for server to start accepting
+ WaitForServerListening(Port);
SUBCASE("handshake succeeds with 101")
{
@@ -692,7 +711,7 @@ TEST_CASE("websocket.integration")
std::string Response(asio::buffers_begin(ResponseBuf.data()), asio::buffers_end(ResponseBuf.data()));
- // Should NOT get 101 — should fall through to normal request handling
+ // Should NOT get 101 - should fall through to normal request handling
CHECK(Response.find("101") == std::string::npos);
Sock.close();
@@ -813,7 +832,7 @@ TEST_CASE("websocket.client")
Server->Close();
});
- Sleep(100);
+ WaitForServerListening(Port);
SUBCASE("connect, echo, close")
{
@@ -937,7 +956,7 @@ TEST_CASE("websocket.client.unixsocket")
Server->Close();
});
- Sleep(100);
+ WaitForServerListening(Port);
SUBCASE("connect, echo, close over unix socket")
{