test(sce-net): avoid adjacent PR insertion points
This commit is contained in:
parent
74defef675
commit
0eec3fd74a
|
|
@ -99,6 +99,63 @@ static bool Failed(std::int64_t result, int error) {
|
|||
return result == static_cast<int>(0x80410100u | static_cast<unsigned>(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<std::uint8_t, 28> destination{};
|
||||
destination[0] = static_cast<std::uint8_t>(addressSize);
|
||||
destination[1] = static_cast<std::uint8_t>(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<std::uint8_t, 28> 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<std::uint8_t, 28> 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<std::uint8_t, 28> destination{};
|
||||
destination[0] = static_cast<std::uint8_t>(addressSize);
|
||||
destination[1] = static_cast<std::uint8_t>(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<std::uint8_t, 28> 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<std::uint8_t, 28> 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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue