aboutsummaryrefslogtreecommitdiff
path: root/src/tests/core/internal_network
diff options
context:
space:
mode:
authorcirakg <cirakg@cirakg.xyz>2026-11-03 01:39:55 +0100
committercirakg <cirakg@cirakg.xyz>2026-11-03 01:39:55 +0100
commitd8d16713b891245fd786b27d375f68d695c76d0e (patch)
tree2972f24f132a2ece0896438bbc8f2cfd47f3c579 /src/tests/core/internal_network
parent0b927d171c6d918a675c25f57b2bc0121b7f889d (diff)
tests: cover room packet matching and size-checked ZSTD decompression
Assisted-by: Claude Opus 5.5 (investigation and implementation)
Diffstat (limited to 'src/tests/core/internal_network')
-rw-r--r--src/tests/core/internal_network/socket_proxy.cpp37
1 files changed, 34 insertions, 3 deletions
diff --git a/src/tests/core/internal_network/socket_proxy.cpp b/src/tests/core/internal_network/socket_proxy.cpp
index 0ba5f2aa2b..137de5b421 100644
--- a/src/tests/core/internal_network/socket_proxy.cpp
+++ b/src/tests/core/internal_network/socket_proxy.cpp
@@ -21,9 +21,7 @@ void BindSocket(Network::ProxySocket& socket, Network::Protocol protocol) {
.portno = 35000}) == Network::Errno::SUCCESS);
}
-template <std::size_t N>
-void QueuePacket(Network::ProxySocket& socket, Network::Protocol protocol,
- const std::array<u8, N>& payload) {
+Network::ProxyPacket MakePacket(Network::Protocol protocol) {
Network::ProxyPacket packet{};
packet.local_endpoint = {.family = Network::Domain::INET,
.ip = {192, 168, 1, 2},
@@ -32,6 +30,13 @@ void QueuePacket(Network::ProxySocket& socket, Network::Protocol protocol,
.ip = {192, 168, 1, 1},
.portno = 35000};
packet.protocol = protocol;
+ return packet;
+}
+
+template <std::size_t N>
+void QueuePacket(Network::ProxySocket& socket, Network::Protocol protocol,
+ const std::array<u8, N>& payload) {
+ Network::ProxyPacket packet = MakePacket(protocol);
packet.data.assign(payload.begin(), payload.end());
socket.HandleProxyPacket(packet);
}
@@ -228,3 +233,29 @@ TEST_CASE("One room packet wakes every blocked peek reader", "[core][sockets]")
REQUIRE(finished[i] - queued < std::chrono::milliseconds{1000});
}
}
+
+TEST_CASE("Room sockets accept only packets for their port and protocol", "[core][sockets]") {
+ Network::ProxySocket socket;
+ BindSocket(socket, Network::Protocol::UDP);
+
+ REQUIRE(socket.AcceptsProxyPacket(MakePacket(Network::Protocol::UDP)));
+ REQUIRE_FALSE(socket.AcceptsProxyPacket(MakePacket(Network::Protocol::TCP)));
+
+ Network::ProxyPacket other_port = MakePacket(Network::Protocol::UDP);
+ other_port.remote_endpoint.portno = 35001;
+ REQUIRE_FALSE(socket.AcceptsProxyPacket(other_port));
+
+ Network::ProxyPacket broadcast = MakePacket(Network::Protocol::UDP);
+ broadcast.broadcast = true;
+ REQUIRE_FALSE(socket.AcceptsProxyPacket(broadcast));
+ REQUIRE(socket.SetBroadcast(true) == Network::Errno::SUCCESS);
+ REQUIRE(socket.AcceptsProxyPacket(broadcast));
+
+ REQUIRE(socket.Close() == Network::Errno::SUCCESS);
+ REQUIRE_FALSE(socket.AcceptsProxyPacket(MakePacket(Network::Protocol::UDP)));
+}
+
+TEST_CASE("Native sockets accept no room packets", "[core][sockets]") {
+ Network::Socket socket;
+ REQUIRE_FALSE(socket.AcceptsProxyPacket(MakePacket(Network::Protocol::UDP)));
+}