Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
6 changes: 4 additions & 2 deletions libc/test/UnitTest/Test.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@
// they all provide.

#define ASSERT_ERRNO_EQ(VAL) \
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno))
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
LIBC_NAMESPACE::libc_errno = 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))
ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
LIBC_NAMESPACE::libc_errno = 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,53 +6,48 @@
//
//===----------------------------------------------------------------------===//

#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::Succeeds;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
constexpr const char *FILENAME = "access.test";
auto TEST_FILE = libc_make_test_file_path(FILENAME);
int fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IRWXU);
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 | 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