Skip to content

[libc] Migrate unistd tests to use ErrnoCheckingTest. #132067

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions libc/test/UnitTest/Test.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,16 @@
// they all provide.

#define ASSERT_ERRNO_EQ(VAL) \
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno))
do { \
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
LIBC_NAMESPACE::libc_errno = 0; \
} while (0)
#define ASSERT_ERRNO_SUCCESS() \
ASSERT_EQ(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
#define ASSERT_ERRNO_FAILURE() \
ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
do { \
ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
LIBC_NAMESPACE::libc_errno = 0; \
} while (0)

#endif // LLVM_LIBC_TEST_UNITTEST_TEST_H
42 changes: 42 additions & 0 deletions libc/test/src/unistd/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ add_libc_unittest(
libc.src.unistd.access
libc.src.unistd.close
libc.src.unistd.unlink
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -30,6 +32,7 @@ add_libc_unittest(
libc.src.unistd.chdir
libc.src.unistd.close
libc.src.fcntl.open
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -48,6 +51,7 @@ add_libc_unittest(
libc.src.unistd.read
libc.src.unistd.unlink
libc.src.unistd.write
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -66,6 +70,7 @@ add_libc_unittest(
libc.src.unistd.read
libc.src.unistd.unlink
libc.src.unistd.write
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -84,6 +89,7 @@ add_libc_unittest(
libc.src.unistd.read
libc.src.unistd.unlink
libc.src.unistd.write
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -99,6 +105,7 @@ add_libc_unittest(
libc.src.fcntl.open
libc.src.unistd.fchdir
libc.src.unistd.close
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -118,6 +125,8 @@ add_libc_unittest(
libc.src.unistd.unlink
libc.src.unistd.write
libc.src.__support.CPP.string_view
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -136,6 +145,7 @@ add_libc_unittest(
libc.src.unistd.pwrite
libc.src.unistd.unlink
libc.src.unistd.write
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -154,6 +164,7 @@ add_libc_unittest(
libc.src.unistd.read
libc.src.unistd.write
libc.src.stdio.remove
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -170,6 +181,8 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.unistd.link
libc.src.unistd.unlink
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -185,6 +198,8 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.unistd.linkat
libc.src.unistd.unlink
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -200,6 +215,7 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.unistd.lseek
libc.src.unistd.read
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -214,6 +230,7 @@ add_libc_unittest(
libc.src.errno.errno
libc.src.unistd.close
libc.src.unistd.pipe
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -228,6 +245,7 @@ add_libc_unittest(
libc.src.errno.errno
libc.src.unistd.close
libc.src.unistd.pipe2
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -242,6 +260,8 @@ add_libc_unittest(
libc.src.errno.errno
libc.src.sys.stat.mkdir
libc.src.unistd.rmdir
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -268,6 +288,8 @@ add_libc_unittest(
libc.src.unistd.symlink
libc.src.unistd.unlink
libc.src.__support.CPP.string_view
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -285,6 +307,8 @@ add_libc_unittest(
libc.src.unistd.symlink
libc.src.unistd.unlink
libc.src.__support.CPP.string_view
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -310,6 +334,8 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.unistd.symlink
libc.src.unistd.unlink
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -325,6 +351,8 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.unistd.symlinkat
libc.src.unistd.unlink
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -343,6 +371,8 @@ add_libc_unittest(
libc.src.unistd.unlink
libc.src.unistd.write
libc.src.__support.CPP.string_view
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand Down Expand Up @@ -374,6 +404,8 @@ add_libc_unittest(
libc.src.fcntl.openat
libc.src.unistd.close
libc.src.unistd.unlinkat
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand Down Expand Up @@ -404,6 +436,8 @@ add_libc_unittest(
getsid_test.cpp
DEPENDS
libc.src.unistd.getsid
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -427,6 +461,8 @@ add_libc_unittest(
libc.src.fcntl.open
libc.src.unistd.close
libc.src.errno.errno
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -451,6 +487,7 @@ add_libc_unittest(
libc.include.sys_syscall
libc.src.errno.errno
libc.src.unistd.__llvm_libc_syscall
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand Down Expand Up @@ -479,6 +516,8 @@ add_libc_unittest(
libc.src.unistd.fpathconf
libc.src.fcntl.open
libc.src.unistd.close
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_unittest(
Expand All @@ -494,6 +533,8 @@ add_libc_unittest(
libc.src.unistd.pathconf
libc.src.fcntl.open
libc.src.unistd.close
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

add_libc_test(
Expand All @@ -519,6 +560,7 @@ add_libc_test(
DEPENDS
libc.src.unistd.getentropy
libc.src.errno.errno
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand Down
31 changes: 13 additions & 18 deletions libc/test/src/unistd/access_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,23 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/fcntl/open.h"
#include "src/unistd/access.h"
#include "src/unistd/close.h"
#include "src/unistd/unlink.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

#include <sys/stat.h>
#include <unistd.h>

TEST(LlvmLibcAccessTest, CreateAndTest) {
using LlvmLibcAccessTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST_F(LlvmLibcAccessTest, CreateAndTest) {
// The test strategy is to repeatedly create a file in different modes and
// test that it is accessable in those modes but not in others.
LIBC_NAMESPACE::libc_errno = 0;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
constexpr const char *FILENAME = "access.test";
auto TEST_FILE = libc_make_test_file_path(FILENAME);
Expand All @@ -29,30 +31,23 @@ TEST(LlvmLibcAccessTest, CreateAndTest) {
ASSERT_GT(fd, 0);
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));

ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, F_OK), 0);
ASSERT_ERRNO_SUCCESS();
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, X_OK | W_OK | R_OK), 0);
ASSERT_ERRNO_SUCCESS();
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, F_OK), Succeeds(0));
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, X_OK | W_OK | R_OK),
Succeeds(0));
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));

fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IXUSR);
ASSERT_ERRNO_SUCCESS();
ASSERT_GT(fd, 0);
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, F_OK), 0);
ASSERT_ERRNO_SUCCESS();
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, X_OK), 0);
ASSERT_ERRNO_SUCCESS();
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, R_OK), -1);
ASSERT_ERRNO_EQ(EACCES);
LIBC_NAMESPACE::libc_errno = 0;
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, W_OK), -1);
ASSERT_ERRNO_EQ(EACCES);
LIBC_NAMESPACE::libc_errno = 0;
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, F_OK), Succeeds(0));
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, X_OK), Succeeds(0));
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, R_OK), Fails(EACCES));
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, W_OK), Fails(EACCES));
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
}

TEST(LlvmLibcAccessTest, AccessNonExistentFile) {
TEST_F(LlvmLibcAccessTest, AccessNonExistentFile) {
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
ASSERT_THAT(LIBC_NAMESPACE::access("testdata/non-existent-file", F_OK),
Fails(ENOENT));
Expand Down
11 changes: 5 additions & 6 deletions libc/test/src/unistd/chdir_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,18 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/fcntl/open.h"
#include "src/unistd/chdir.h"
#include "src/unistd/close.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

#include "hdr/fcntl_macros.h"

TEST(LlvmLibcChdirTest, ChangeAndOpen) {
using LlvmLibcChdirTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST_F(LlvmLibcChdirTest, ChangeAndOpen) {
// The idea of this test is that we will first open an existing test file
// without changing the directory to make sure it exists. Next, we change
// directory and open the same file to make sure that the "chdir" operation
Expand All @@ -27,7 +29,6 @@ TEST(LlvmLibcChdirTest, ChangeAndOpen) {
auto TEST_FILE = libc_make_test_file_path(FILENAME2);
constexpr const char *FILENAME3 = "chdir.test";
auto TEST_FILE_BASE = libc_make_test_file_path(FILENAME3);
LIBC_NAMESPACE::libc_errno = 0;

int fd = LIBC_NAMESPACE::open(TEST_FILE, O_PATH);
ASSERT_GT(fd, 0);
Expand All @@ -41,9 +42,7 @@ TEST(LlvmLibcChdirTest, ChangeAndOpen) {
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
}

TEST(LlvmLibcChdirTest, ChangeToNonExistentDir) {
LIBC_NAMESPACE::libc_errno = 0;
TEST_F(LlvmLibcChdirTest, ChangeToNonExistentDir) {
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
ASSERT_THAT(LIBC_NAMESPACE::chdir("non-existent-dir"), Fails(ENOENT));
LIBC_NAMESPACE::libc_errno = 0;
}
9 changes: 5 additions & 4 deletions libc/test/src/unistd/dup2_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,22 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/fcntl/open.h"
#include "src/unistd/close.h"
#include "src/unistd/dup2.h"
#include "src/unistd/read.h"
#include "src/unistd/unlink.h"
#include "src/unistd/write.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

#include <sys/stat.h>

TEST(LlvmLibcdupTest, ReadAndWriteViaDup) {
using LlvmLibcdupTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST_F(LlvmLibcdupTest, ReadAndWriteViaDup) {
constexpr int DUPFD = 0xD0;
LIBC_NAMESPACE::libc_errno = 0;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
constexpr const char *FILENAME = "dup2.test";
auto TEST_FILE = libc_make_test_file_path(FILENAME);
Expand Down Expand Up @@ -59,7 +60,7 @@ TEST(LlvmLibcdupTest, ReadAndWriteViaDup) {
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
}

TEST(LlvmLibcdupTest, DupBadFD) {
TEST_F(LlvmLibcdupTest, DupBadFD) {
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
ASSERT_THAT(LIBC_NAMESPACE::dup2(-1, 123), Fails(EBADF));
}
Loading
Loading