From 0eec3fd74a317afb0b6e31f4809ab86c2f9880a9 Mon Sep 17 00:00:00 2001 From: Aarav <211792885+AaravMehta-07@users.noreply.github.com> Date: Mon, 12 Oct 2026 15:22:31 +0530 Subject: [PATCH] test(sce-net): avoid adjacent PR insertion points --- core/libs/tests/GuestSceNet.cpp | 119 ++++++++++++++++---------------- 1 file changed, 60 insertions(+), 59 deletions(-) diff --git a/core/libs/tests/GuestSceNet.cpp b/core/libs/tests/GuestSceNet.cpp index e54ece035..2fb993d14 100644 --- a/core/libs/tests/GuestSceNet.cpp +++ b/core/libs/tests/GuestSceNet.cpp @@ -99,6 +99,63 @@ static bool Failed(std::int64_t result, int error) { return result == static_cast(0x80410100u | static_cast(error)) && *sceNetErrnoLoc() == error; } +static void CheckStreamSender(int family) { + const auto addressSize = family == 2 ? 16u : 28u; + const int listener = sceNetSocket(nullptr, family, 1, 6); + Require(listener >= 0); + std::array destination{}; + destination[0] = static_cast(addressSize); + destination[1] = static_cast(family); + if (family == 2) { destination[4] = 127; destination[7] = 1; } + else destination[23] = 1; + Require(sceNetBind_nid_postfix(listener, destination.data(), addressSize) == 0 && sceNetListen(listener, 1) == 0); + std::uint32_t size = destination.size(); + Require(sceNetGetsockname(listener, destination.data(), &size) == 0 && size == addressSize); + const int client = sceNetSocket(nullptr, family, 1, 6); + Require(client >= 0 && sceNetConnect(client, destination.data(), addressSize) == 0); + const int accepted = sceNetAccept(listener, nullptr, nullptr); + Require(accepted >= 0); + const char payload[] = "stream"; + for (const auto endpoints : {std::array{accepted, client}, std::array{client, accepted}}) { + const auto receiver = endpoints[0], sender = endpoints[1]; + for (const std::uint32_t capacity : {0u, 1u, 16u, 28u, UINT32_MAX}) { + Require(sceNetSend(sender, payload, sizeof(payload), 0) == sizeof(payload)); + std::array address; + address.fill(0xa5); + char received[sizeof(payload)]{}; + size = capacity; + *sceNetErrnoLoc() = 123; + Require(sceNetRecvfrom(receiver, received, 0, 2, address.data(), &size) == 0); + Require(size == 0 && received[0] == 0 && *sceNetErrnoLoc() == 123); + Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); + for (const int flags : {2, 0}) { + size = capacity; + *sceNetErrnoLoc() = 123; + Require(sceNetRecvfrom(receiver, received, sizeof(received), flags, address.data(), &size) == sizeof(payload)); + Require(size == 0 && std::memcmp(received, payload, sizeof(payload)) == 0 && *sceNetErrnoLoc() == 123); + Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); + } + } + Require(sceNetSend(sender, payload, sizeof(payload), 0) == sizeof(payload)); + std::array address; + address.fill(0xa5); + char received[sizeof(payload)]{}; + Require(Failed(sceNetRecvfrom(receiver, received, sizeof(received), 0, address.data(), nullptr), 22)); + size = 123; + Require(sceNetRecvfrom(receiver, received, sizeof(received), 0, nullptr, &size) == sizeof(payload)); + Require(size == 123 && std::memcmp(received, payload, sizeof(payload)) == 0); + Require(sceNetShutdown(sender, 1) == 0); + for (const int flags : {2, 0}) { + size = address.size(); + *sceNetErrnoLoc() = 123; + Require(sceNetRecvfrom(receiver, received, sizeof(received), flags, address.data(), &size) == 0); + Require(size == 0 && *sceNetErrnoLoc() == 123); + Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); + } + } + for (const int descriptor : {client, accepted, listener}) Require(sceNetSocketClose(descriptor) == 0); +} + static void CheckPoolStats() { const int pool = sceNetPoolCreate("stats", 0x4000, 0); Require(pool > 0); @@ -319,63 +376,6 @@ static void CheckUnspecifiedIpv6() { Require(sceNetSocketClose(receiver) == 0); } -static void CheckStreamSender(int family) { - const auto addressSize = family == 2 ? 16u : 28u; - const int listener = sceNetSocket(nullptr, family, 1, 6); - Require(listener >= 0); - std::array destination{}; - destination[0] = static_cast(addressSize); - destination[1] = static_cast(family); - if (family == 2) { destination[4] = 127; destination[7] = 1; } - else destination[23] = 1; - Require(sceNetBind_nid_postfix(listener, destination.data(), addressSize) == 0 && sceNetListen(listener, 1) == 0); - std::uint32_t size = destination.size(); - Require(sceNetGetsockname(listener, destination.data(), &size) == 0 && size == addressSize); - const int client = sceNetSocket(nullptr, family, 1, 6); - Require(client >= 0 && sceNetConnect(client, destination.data(), addressSize) == 0); - const int accepted = sceNetAccept(listener, nullptr, nullptr); - Require(accepted >= 0); - const char payload[] = "stream"; - for (const auto endpoints : {std::array{accepted, client}, std::array{client, accepted}}) { - const auto receiver = endpoints[0], sender = endpoints[1]; - for (const std::uint32_t capacity : {0u, 1u, 16u, 28u, UINT32_MAX}) { - Require(sceNetSend(sender, payload, sizeof(payload), 0) == sizeof(payload)); - std::array address; - address.fill(0xa5); - char received[sizeof(payload)]{}; - size = capacity; - *sceNetErrnoLoc() = 123; - Require(sceNetRecvfrom(receiver, received, 0, 2, address.data(), &size) == 0); - Require(size == 0 && received[0] == 0 && *sceNetErrnoLoc() == 123); - Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); - for (const int flags : {2, 0}) { - size = capacity; - *sceNetErrnoLoc() = 123; - Require(sceNetRecvfrom(receiver, received, sizeof(received), flags, address.data(), &size) == sizeof(payload)); - Require(size == 0 && std::memcmp(received, payload, sizeof(payload)) == 0 && *sceNetErrnoLoc() == 123); - Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); - } - } - Require(sceNetSend(sender, payload, sizeof(payload), 0) == sizeof(payload)); - std::array address; - address.fill(0xa5); - char received[sizeof(payload)]{}; - Require(Failed(sceNetRecvfrom(receiver, received, sizeof(received), 0, address.data(), nullptr), 22)); - size = 123; - Require(sceNetRecvfrom(receiver, received, sizeof(received), 0, nullptr, &size) == sizeof(payload)); - Require(size == 123 && std::memcmp(received, payload, sizeof(payload)) == 0); - Require(sceNetShutdown(sender, 1) == 0); - for (const int flags : {2, 0}) { - size = address.size(); - *sceNetErrnoLoc() = 123; - Require(sceNetRecvfrom(receiver, received, sizeof(received), flags, address.data(), &size) == 0); - Require(size == 0 && *sceNetErrnoLoc() == 123); - Require(std::all_of(address.begin(), address.end(), [](auto byte) { return byte == 0xa5; })); - } - } - for (const int descriptor : {client, accepted, listener}) Require(sceNetSocketClose(descriptor) == 0); -} - int main() { const auto epoch = std::chrono::steady_clock::time_point{}; Require(KernelSocketSelect::DeadlineAfter(epoch, 2, 250000) == epoch + std::chrono::milliseconds(2250)); @@ -397,8 +397,6 @@ int main() { CheckAddressText(28, "1234:5678:9abc:def0:1234:5678:9abc:def0"); CheckLinkLocalAllNodesIpv6(); CheckUnspecifiedIpv6(); - CheckStreamSender(2); - if (!ipv6Unavailable) CheckStreamSender(28); const int listener = sceNetSocket(nullptr, 2, 1, 6); Require(listener >= 0); @@ -583,6 +581,9 @@ int main() { Require(sceNetInetNtop(28, ipv6.data(), text, sizeof(text)) == text); Require(std::strcmp(text, "::1") == 0); + CheckStreamSender(2); + if (!ipv6Unavailable) CheckStreamSender(28); + int state = -1; Require(sceNetCtlGetState(&state) == 0); Require(state == 0 || state == 3);