test(libkernel): termios calls on a Unix socket and a directory descriptor

This commit is contained in:
Yossi Yadgar 2026-10-11 19:39:34 +03:00 committed by Adrià Franch
parent 51b3e3ef38
commit 0c1fa50e8e
1 changed files with 22 additions and 0 deletions

View File

@ -20,6 +20,8 @@ int APS5_VABI tcsetpgrp_nid_postfix(int, int);
int APS5_VABI open_nid_postfix(const char*, int, int);
int APS5_VABI pipe_nid_postfix(int*);
int APS5_VABI socket_nid_postfix(int, int, int);
int APS5_VABI socketpair_nid_postfix(int, int, int, int*);
int APS5_VABI mkdir_nid_postfix(const char*, unsigned short);
int APS5_VABI close_nid_postfix(int);
int* APS5_VABI __error_nid_postfix();
}
@ -41,6 +43,7 @@ constexpr int BadDescriptor = 9;
constexpr int InvalidArgument = 22;
constexpr int BadAddress = 14;
constexpr int AddressNotAvailable = 49;
constexpr int OperationNotSupported = 45;
static bool Fails(int result, int error) { return result == -1 && *__error_nid_postfix() == error; }
@ -125,6 +128,25 @@ int main() {
RequireControlFails(socket, AddressNotAvailable);
RequireProcessGroupFails(socket, AddressNotAvailable);
int pair[2] = {-1, -1};
Require(socketpair_nid_postfix(1, 1, 0, pair) == 0);
for (const int end : pair) {
Require(Fails(tcgetattr_nid_postfix(end, probe), OperationNotSupported));
RequireControlFails(end, OperationNotSupported);
RequireProcessGroupFails(end, OperationNotSupported);
}
Require(close_nid_postfix(pair[0]) == 0 && close_nid_postfix(pair[1]) == 0);
const auto directoryName = name + "-directory";
Require(mkdir_nid_postfix(directoryName.c_str(), 0755) == 0);
const int directory = open_nid_postfix(directoryName.c_str(), 0x00020000, 0);
Require(directory >= 0);
RequireNotTerminal(directory);
RequireProcessGroupFails(directory, NotTerminal);
Require(close_nid_postfix(directory) == 0);
RequireControlFails(directory, BadDescriptor);
std::filesystem::remove(directoryName);
unsigned char attributes[44]{};
Require(Fails(tcsetattr_nid_postfix(file, 3, attributes), InvalidArgument));
Require(Fails(tcsetattr_nid_postfix(file, -1, attributes), InvalidArgument));