Skip to content

[libc] Migrate sys/ tests to ErrnoCheckingTest. #141871

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 1 commit into from
May 29, 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
1 change: 1 addition & 0 deletions libc/test/src/sys/auxv/linux/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ add_libc_unittest(
libc.include.sys_auxv
libc.src.errno.errno
libc.src.sys.auxv.getauxval
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
libc.src.string.strstr
)
6 changes: 4 additions & 2 deletions libc/test/src/sys/auxv/linux/getauxval_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "src/errno/libc_errno.h"

#include "src/sys/auxv/getauxval.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"
#include <src/string/strstr.h>
#include <sys/auxv.h>

using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
using LlvmLibcGetauxvalTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST(LlvmLibcGetauxvalTest, Basic) {
TEST_F(LlvmLibcGetauxvalTest, Basic) {
EXPECT_THAT(LIBC_NAMESPACE::getauxval(AT_PAGESZ),
returns(GT(0ul)).with_errno(EQ(0)));
const char *filename;
Expand Down
10 changes: 10 additions & 0 deletions libc/test/src/sys/mman/linux/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ add_libc_unittest(
libc.src.errno.errno
libc.src.sys.mman.mmap
libc.src.sys.mman.munmap
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -26,6 +27,7 @@ add_libc_unittest(
libc.src.sys.mman.mmap
libc.src.sys.mman.mremap
libc.src.sys.mman.munmap
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -43,6 +45,7 @@ if (NOT LLVM_USE_SANITIZER)
libc.src.sys.mman.mmap
libc.src.sys.mman.munmap
libc.src.sys.mman.mprotect
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)
endif()
Expand All @@ -59,6 +62,7 @@ add_libc_unittest(
libc.src.sys.mman.mmap
libc.src.sys.mman.munmap
libc.src.sys.mman.madvise
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -75,6 +79,7 @@ add_libc_unittest(
libc.src.sys.mman.mmap
libc.src.sys.mman.munmap
libc.src.sys.mman.posix_madvise
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -95,6 +100,7 @@ add_libc_unittest(
libc.src.sys.mman.mlock
libc.src.sys.mman.munlock
libc.src.unistd.sysconf
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -120,6 +126,7 @@ add_libc_unittest(
libc.src.sys.resource.getrlimit
libc.src.__support.OSUtil.osutil
libc.src.unistd.sysconf
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -140,6 +147,7 @@ add_libc_unittest(
libc.src.sys.mman.mlock
libc.src.sys.mman.munlock
libc.src.unistd.sysconf
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)

Expand All @@ -153,6 +161,7 @@ add_libc_unittest(
libc.include.sys_mman
libc.include.sys_stat
libc.src.unistd.sysconf
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
libc.src.sys.mman.remap_file_pages
libc.src.errno.errno
Expand All @@ -179,5 +188,6 @@ add_libc_unittest(
libc.src.unistd.close
libc.src.__support.OSUtil.osutil
libc.hdr.fcntl_macros
libc.test.UnitTest.ErrnoCheckingTest
libc.test.UnitTest.ErrnoSetterMatcher
)
9 changes: 4 additions & 5 deletions libc/test/src/sys/mman/linux/madvise_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/sys/mman/madvise.h"
#include "src/sys/mman/mmap.h"
#include "src/sys/mman/munmap.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

#include <sys/mman.h>

using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
using LlvmLibcMadviseTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST(LlvmLibcMadviseTest, NoError) {
TEST_F(LlvmLibcMadviseTest, NoError) {
size_t alloc_size = 128;
LIBC_NAMESPACE::libc_errno = 0;
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
ASSERT_ERRNO_SUCCESS();
Expand All @@ -37,8 +37,7 @@ TEST(LlvmLibcMadviseTest, NoError) {
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, alloc_size), Succeeds());
}

TEST(LlvmLibcMadviseTest, Error_BadPtr) {
LIBC_NAMESPACE::libc_errno = 0;
TEST_F(LlvmLibcMadviseTest, Error_BadPtr) {
EXPECT_THAT(LIBC_NAMESPACE::madvise(nullptr, 8, MADV_SEQUENTIAL),
Fails(ENOMEM));
}
22 changes: 8 additions & 14 deletions libc/test/src/sys/mman/linux/mincore_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
//===----------------------------------------------------------------------===//

#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
#include "src/errno/libc_errno.h"
#include "src/sys/mman/madvise.h"
#include "src/sys/mman/mincore.h"
#include "src/sys/mman/mlock.h"
#include "src/sys/mman/mmap.h"
#include "src/sys/mman/munlock.h"
#include "src/sys/mman/munmap.h"
#include "src/unistd/sysconf.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

Expand All @@ -24,64 +24,60 @@

using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
using LlvmLibcMincoreTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST(LlvmLibcMincoreTest, UnMappedMemory) {
LIBC_NAMESPACE::libc_errno = 0;
TEST_F(LlvmLibcMincoreTest, UnMappedMemory) {
unsigned char vec;
int res = LIBC_NAMESPACE::mincore(nullptr, 1, &vec);
EXPECT_THAT(res, Fails(ENOMEM, -1));
}

TEST(LlvmLibcMincoreTest, UnalignedAddr) {
TEST_F(LlvmLibcMincoreTest, UnalignedAddr) {
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
EXPECT_NE(addr, MAP_FAILED);
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
LIBC_NAMESPACE::libc_errno = 0;
int res = LIBC_NAMESPACE::mincore(static_cast<char *>(addr) + 1, 1, nullptr);
EXPECT_THAT(res, Fails(EINVAL, -1));
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, page_size), Succeeds());
}

TEST(LlvmLibcMincoreTest, InvalidVec) {
TEST_F(LlvmLibcMincoreTest, InvalidVec) {
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
void *addr = LIBC_NAMESPACE::mmap(nullptr, 4 * page_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
EXPECT_NE(addr, MAP_FAILED);
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
LIBC_NAMESPACE::libc_errno = 0;
int res = LIBC_NAMESPACE::mincore(addr, 1, nullptr);
EXPECT_THAT(res, Fails(EFAULT, -1));
}

TEST(LlvmLibcMincoreTest, NoError) {
TEST_F(LlvmLibcMincoreTest, NoError) {
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
EXPECT_NE(addr, MAP_FAILED);
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
unsigned char vec;
LIBC_NAMESPACE::libc_errno = 0;
int res = LIBC_NAMESPACE::mincore(addr, 1, &vec);
EXPECT_THAT(res, Succeeds());
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, page_size), Succeeds());
}

TEST(LlvmLibcMincoreTest, NegativeLength) {
TEST_F(LlvmLibcMincoreTest, NegativeLength) {
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
EXPECT_NE(addr, MAP_FAILED);
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
unsigned char vec;
LIBC_NAMESPACE::libc_errno = 0;
int res = LIBC_NAMESPACE::mincore(addr, -1, &vec);
EXPECT_THAT(res, Fails(ENOMEM, -1));
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, page_size), Succeeds());
}

TEST(LlvmLibcMincoreTest, PageOut) {
TEST_F(LlvmLibcMincoreTest, PageOut) {
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
unsigned char vec;
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ | PROT_WRITE,
Expand All @@ -101,11 +97,9 @@ TEST(LlvmLibcMincoreTest, PageOut) {

// page out the memory
{
LIBC_NAMESPACE::libc_errno = 0;
EXPECT_THAT(LIBC_NAMESPACE::madvise(addr, page_size, MADV_DONTNEED),
Succeeds());

LIBC_NAMESPACE::libc_errno = 0;
int res = LIBC_NAMESPACE::mincore(addr, page_size, &vec);
EXPECT_EQ(vec & 1u, 0u);
EXPECT_THAT(res, Succeeds());
Expand Down
13 changes: 7 additions & 6 deletions libc/test/src/sys/mman/linux/mlock_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "src/sys/mman/munmap.h"
#include "src/sys/resource/getrlimit.h"
#include "src/unistd/sysconf.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

Expand All @@ -29,6 +30,7 @@
#include <unistd.h>

using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
using LlvmLibcMlockTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

struct PageHolder {
size_t size;
Expand Down Expand Up @@ -72,12 +74,12 @@ static bool is_permitted_size(size_t size) {
get_capacity(CAP_IPC_LOCK);
}

TEST(LlvmLibcMlockTest, UnMappedMemory) {
TEST_F(LlvmLibcMlockTest, UnMappedMemory) {
EXPECT_THAT(LIBC_NAMESPACE::mlock(nullptr, 1024), Fails(ENOMEM));
EXPECT_THAT(LIBC_NAMESPACE::munlock(nullptr, 1024), Fails(ENOMEM));
}

TEST(LlvmLibcMlockTest, Overflow) {
TEST_F(LlvmLibcMlockTest, Overflow) {
PageHolder holder;
EXPECT_TRUE(holder.is_valid());
size_t negative_size = -holder.size;
Expand All @@ -89,7 +91,7 @@ TEST(LlvmLibcMlockTest, Overflow) {
}

#ifdef SYS_mlock2
TEST(LlvmLibcMlockTest, MLock2) {
TEST_F(LlvmLibcMlockTest, MLock2) {
PageHolder holder;
EXPECT_TRUE(holder.is_valid());
EXPECT_THAT(LIBC_NAMESPACE::madvise(holder.addr, holder.size, MADV_DONTNEED),
Expand All @@ -115,9 +117,8 @@ TEST(LlvmLibcMlockTest, MLock2) {
}
#endif

TEST(LlvmLibcMlockTest, InvalidFlag) {
TEST_F(LlvmLibcMlockTest, InvalidFlag) {
size_t alloc_size = 128; // page size
LIBC_NAMESPACE::libc_errno = 0;
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
ASSERT_ERRNO_SUCCESS();
Expand All @@ -139,7 +140,7 @@ TEST(LlvmLibcMlockTest, InvalidFlag) {
LIBC_NAMESPACE::munmap(addr, alloc_size);
}

TEST(LlvmLibcMlockTest, MLockAll) {
TEST_F(LlvmLibcMlockTest, MLockAll) {
{
PageHolder holder;
EXPECT_TRUE(holder.is_valid());
Expand Down
9 changes: 4 additions & 5 deletions libc/test/src/sys/mman/linux/mmap_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/sys/mman/mmap.h"
#include "src/sys/mman/munmap.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

#include <sys/mman.h>

using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
using LlvmLibcMMapTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST(LlvmLibcMMapTest, NoError) {
TEST_F(LlvmLibcMMapTest, NoError) {
size_t alloc_size = 128;
LIBC_NAMESPACE::libc_errno = 0;
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
ASSERT_ERRNO_SUCCESS();
Expand All @@ -33,8 +33,7 @@ TEST(LlvmLibcMMapTest, NoError) {
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, alloc_size), Succeeds());
}

TEST(LlvmLibcMMapTest, Error_InvalidSize) {
LIBC_NAMESPACE::libc_errno = 0;
TEST_F(LlvmLibcMMapTest, Error_InvalidSize) {
void *addr = LIBC_NAMESPACE::mmap(nullptr, 0, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
EXPECT_THAT(addr, Fails(EINVAL, MAP_FAILED));
Expand Down
8 changes: 4 additions & 4 deletions libc/test/src/sys/mman/linux/mprotect_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
//
//===----------------------------------------------------------------------===//

#include "src/errno/libc_errno.h"
#include "src/sys/mman/mmap.h"
#include "src/sys/mman/mprotect.h"
#include "src/sys/mman/munmap.h"
#include "test/UnitTest/ErrnoCheckingTest.h"
#include "test/UnitTest/ErrnoSetterMatcher.h"
#include "test/UnitTest/Test.h"

Expand All @@ -18,10 +18,10 @@

using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
using LlvmLibcMProtectTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;

TEST(LlvmLibcMProtectTest, NoError) {
TEST_F(LlvmLibcMProtectTest, NoError) {
size_t alloc_size = 128;
LIBC_NAMESPACE::libc_errno = 0;
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
ASSERT_ERRNO_SUCCESS();
Expand All @@ -47,7 +47,7 @@ TEST(LlvmLibcMProtectTest, NoError) {
// This test is disabled currently due to flakeyness. It will be re-enabled once
// it is less flakey.
/*
TEST(LlvmLibcMProtectTest, Error_InvalidWrite) {
TEST_F(LlvmLibcMProtectTest, Error_InvalidWrite) {
// attempting to write to a read-only protected part of memory should cause a
// segfault.
EXPECT_DEATH(
Expand Down
Loading
Loading