Skip to content

Commit 9a84070

Browse files
vonosmasgoogle-yfyang
authored andcommitted
[libc] Migrate sys/ tests to ErrnoCheckingTest. (llvm#141871)
See PR llvm#132823 for a previous change to sys/epoll tests, and prior changes before that. ErrnoCheckingTest ensures that errno is properly reset at the beginning of the test case, and is validated at the end of it. This change removes many instances of manual errno manipulation.
1 parent 6ebb107 commit 9a84070

39 files changed

+190
-172
lines changed

libc/test/src/sys/auxv/linux/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_libc_unittest(
99
libc.include.sys_auxv
1010
libc.src.errno.errno
1111
libc.src.sys.auxv.getauxval
12+
libc.test.UnitTest.ErrnoCheckingTest
1213
libc.test.UnitTest.ErrnoSetterMatcher
1314
libc.src.string.strstr
1415
)

libc/test/src/sys/auxv/linux/getauxval_test.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
66
//
77
//===----------------------------------------------------------------------===//
8-
#include "src/errno/libc_errno.h"
8+
99
#include "src/sys/auxv/getauxval.h"
10+
#include "test/UnitTest/ErrnoCheckingTest.h"
1011
#include "test/UnitTest/ErrnoSetterMatcher.h"
1112
#include "test/UnitTest/Test.h"
1213
#include <src/string/strstr.h>
1314
#include <sys/auxv.h>
1415

1516
using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
17+
using LlvmLibcGetauxvalTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
1618

17-
TEST(LlvmLibcGetauxvalTest, Basic) {
19+
TEST_F(LlvmLibcGetauxvalTest, Basic) {
1820
EXPECT_THAT(LIBC_NAMESPACE::getauxval(AT_PAGESZ),
1921
returns(GT(0ul)).with_errno(EQ(0)));
2022
const char *filename;

libc/test/src/sys/mman/linux/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ add_libc_unittest(
1111
libc.src.errno.errno
1212
libc.src.sys.mman.mmap
1313
libc.src.sys.mman.munmap
14+
libc.test.UnitTest.ErrnoCheckingTest
1415
libc.test.UnitTest.ErrnoSetterMatcher
1516
)
1617

@@ -26,6 +27,7 @@ add_libc_unittest(
2627
libc.src.sys.mman.mmap
2728
libc.src.sys.mman.mremap
2829
libc.src.sys.mman.munmap
30+
libc.test.UnitTest.ErrnoCheckingTest
2931
libc.test.UnitTest.ErrnoSetterMatcher
3032
)
3133

@@ -43,6 +45,7 @@ if (NOT LLVM_USE_SANITIZER)
4345
libc.src.sys.mman.mmap
4446
libc.src.sys.mman.munmap
4547
libc.src.sys.mman.mprotect
48+
libc.test.UnitTest.ErrnoCheckingTest
4649
libc.test.UnitTest.ErrnoSetterMatcher
4750
)
4851
endif()
@@ -59,6 +62,7 @@ add_libc_unittest(
5962
libc.src.sys.mman.mmap
6063
libc.src.sys.mman.munmap
6164
libc.src.sys.mman.madvise
65+
libc.test.UnitTest.ErrnoCheckingTest
6266
libc.test.UnitTest.ErrnoSetterMatcher
6367
)
6468

@@ -75,6 +79,7 @@ add_libc_unittest(
7579
libc.src.sys.mman.mmap
7680
libc.src.sys.mman.munmap
7781
libc.src.sys.mman.posix_madvise
82+
libc.test.UnitTest.ErrnoCheckingTest
7883
libc.test.UnitTest.ErrnoSetterMatcher
7984
)
8085

@@ -95,6 +100,7 @@ add_libc_unittest(
95100
libc.src.sys.mman.mlock
96101
libc.src.sys.mman.munlock
97102
libc.src.unistd.sysconf
103+
libc.test.UnitTest.ErrnoCheckingTest
98104
libc.test.UnitTest.ErrnoSetterMatcher
99105
)
100106

@@ -120,6 +126,7 @@ add_libc_unittest(
120126
libc.src.sys.resource.getrlimit
121127
libc.src.__support.OSUtil.osutil
122128
libc.src.unistd.sysconf
129+
libc.test.UnitTest.ErrnoCheckingTest
123130
libc.test.UnitTest.ErrnoSetterMatcher
124131
)
125132

@@ -140,6 +147,7 @@ add_libc_unittest(
140147
libc.src.sys.mman.mlock
141148
libc.src.sys.mman.munlock
142149
libc.src.unistd.sysconf
150+
libc.test.UnitTest.ErrnoCheckingTest
143151
libc.test.UnitTest.ErrnoSetterMatcher
144152
)
145153

@@ -153,6 +161,7 @@ add_libc_unittest(
153161
libc.include.sys_mman
154162
libc.include.sys_stat
155163
libc.src.unistd.sysconf
164+
libc.test.UnitTest.ErrnoCheckingTest
156165
libc.test.UnitTest.ErrnoSetterMatcher
157166
libc.src.sys.mman.remap_file_pages
158167
libc.src.errno.errno
@@ -179,5 +188,6 @@ add_libc_unittest(
179188
libc.src.unistd.close
180189
libc.src.__support.OSUtil.osutil
181190
libc.hdr.fcntl_macros
191+
libc.test.UnitTest.ErrnoCheckingTest
182192
libc.test.UnitTest.ErrnoSetterMatcher
183193
)

libc/test/src/sys/mman/linux/madvise_test.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "src/errno/libc_errno.h"
109
#include "src/sys/mman/madvise.h"
1110
#include "src/sys/mman/mmap.h"
1211
#include "src/sys/mman/munmap.h"
12+
#include "test/UnitTest/ErrnoCheckingTest.h"
1313
#include "test/UnitTest/ErrnoSetterMatcher.h"
1414
#include "test/UnitTest/Test.h"
1515

1616
#include <sys/mman.h>
1717

1818
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
1919
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
20+
using LlvmLibcMadviseTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
2021

21-
TEST(LlvmLibcMadviseTest, NoError) {
22+
TEST_F(LlvmLibcMadviseTest, NoError) {
2223
size_t alloc_size = 128;
23-
LIBC_NAMESPACE::libc_errno = 0;
2424
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
2525
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
2626
ASSERT_ERRNO_SUCCESS();
@@ -37,8 +37,7 @@ TEST(LlvmLibcMadviseTest, NoError) {
3737
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, alloc_size), Succeeds());
3838
}
3939

40-
TEST(LlvmLibcMadviseTest, Error_BadPtr) {
41-
LIBC_NAMESPACE::libc_errno = 0;
40+
TEST_F(LlvmLibcMadviseTest, Error_BadPtr) {
4241
EXPECT_THAT(LIBC_NAMESPACE::madvise(nullptr, 8, MADV_SEQUENTIAL),
4342
Fails(ENOMEM));
4443
}

libc/test/src/sys/mman/linux/mincore_test.cpp

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
//===----------------------------------------------------------------------===//
88

99
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
10-
#include "src/errno/libc_errno.h"
1110
#include "src/sys/mman/madvise.h"
1211
#include "src/sys/mman/mincore.h"
1312
#include "src/sys/mman/mlock.h"
1413
#include "src/sys/mman/mmap.h"
1514
#include "src/sys/mman/munlock.h"
1615
#include "src/sys/mman/munmap.h"
1716
#include "src/unistd/sysconf.h"
17+
#include "test/UnitTest/ErrnoCheckingTest.h"
1818
#include "test/UnitTest/ErrnoSetterMatcher.h"
1919
#include "test/UnitTest/Test.h"
2020

@@ -24,64 +24,60 @@
2424

2525
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
2626
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
27+
using LlvmLibcMincoreTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
2728

28-
TEST(LlvmLibcMincoreTest, UnMappedMemory) {
29-
LIBC_NAMESPACE::libc_errno = 0;
29+
TEST_F(LlvmLibcMincoreTest, UnMappedMemory) {
3030
unsigned char vec;
3131
int res = LIBC_NAMESPACE::mincore(nullptr, 1, &vec);
3232
EXPECT_THAT(res, Fails(ENOMEM, -1));
3333
}
3434

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

47-
TEST(LlvmLibcMincoreTest, InvalidVec) {
46+
TEST_F(LlvmLibcMincoreTest, InvalidVec) {
4847
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
4948
void *addr = LIBC_NAMESPACE::mmap(nullptr, 4 * page_size, PROT_READ,
5049
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
5150
EXPECT_NE(addr, MAP_FAILED);
5251
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
53-
LIBC_NAMESPACE::libc_errno = 0;
5452
int res = LIBC_NAMESPACE::mincore(addr, 1, nullptr);
5553
EXPECT_THAT(res, Fails(EFAULT, -1));
5654
}
5755

58-
TEST(LlvmLibcMincoreTest, NoError) {
56+
TEST_F(LlvmLibcMincoreTest, NoError) {
5957
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
6058
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ,
6159
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
6260
EXPECT_NE(addr, MAP_FAILED);
6361
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
6462
unsigned char vec;
65-
LIBC_NAMESPACE::libc_errno = 0;
6663
int res = LIBC_NAMESPACE::mincore(addr, 1, &vec);
6764
EXPECT_THAT(res, Succeeds());
6865
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, page_size), Succeeds());
6966
}
7067

71-
TEST(LlvmLibcMincoreTest, NegativeLength) {
68+
TEST_F(LlvmLibcMincoreTest, NegativeLength) {
7269
unsigned long page_size = LIBC_NAMESPACE::sysconf(_SC_PAGESIZE);
7370
void *addr = LIBC_NAMESPACE::mmap(nullptr, page_size, PROT_READ,
7471
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
7572
EXPECT_NE(addr, MAP_FAILED);
7673
EXPECT_EQ(reinterpret_cast<unsigned long>(addr) % page_size, 0ul);
7774
unsigned char vec;
78-
LIBC_NAMESPACE::libc_errno = 0;
7975
int res = LIBC_NAMESPACE::mincore(addr, -1, &vec);
8076
EXPECT_THAT(res, Fails(ENOMEM, -1));
8177
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, page_size), Succeeds());
8278
}
8379

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

10298
// page out the memory
10399
{
104-
LIBC_NAMESPACE::libc_errno = 0;
105100
EXPECT_THAT(LIBC_NAMESPACE::madvise(addr, page_size, MADV_DONTNEED),
106101
Succeeds());
107102

108-
LIBC_NAMESPACE::libc_errno = 0;
109103
int res = LIBC_NAMESPACE::mincore(addr, page_size, &vec);
110104
EXPECT_EQ(vec & 1u, 0u);
111105
EXPECT_THAT(res, Succeeds());

libc/test/src/sys/mman/linux/mlock_test.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "src/sys/mman/munmap.h"
2020
#include "src/sys/resource/getrlimit.h"
2121
#include "src/unistd/sysconf.h"
22+
#include "test/UnitTest/ErrnoCheckingTest.h"
2223
#include "test/UnitTest/ErrnoSetterMatcher.h"
2324
#include "test/UnitTest/Test.h"
2425

@@ -29,6 +30,7 @@
2930
#include <unistd.h>
3031

3132
using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
33+
using LlvmLibcMlockTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
3234

3335
struct PageHolder {
3436
size_t size;
@@ -72,12 +74,12 @@ static bool is_permitted_size(size_t size) {
7274
get_capacity(CAP_IPC_LOCK);
7375
}
7476

75-
TEST(LlvmLibcMlockTest, UnMappedMemory) {
77+
TEST_F(LlvmLibcMlockTest, UnMappedMemory) {
7678
EXPECT_THAT(LIBC_NAMESPACE::mlock(nullptr, 1024), Fails(ENOMEM));
7779
EXPECT_THAT(LIBC_NAMESPACE::munlock(nullptr, 1024), Fails(ENOMEM));
7880
}
7981

80-
TEST(LlvmLibcMlockTest, Overflow) {
82+
TEST_F(LlvmLibcMlockTest, Overflow) {
8183
PageHolder holder;
8284
EXPECT_TRUE(holder.is_valid());
8385
size_t negative_size = -holder.size;
@@ -89,7 +91,7 @@ TEST(LlvmLibcMlockTest, Overflow) {
8991
}
9092

9193
#ifdef SYS_mlock2
92-
TEST(LlvmLibcMlockTest, MLock2) {
94+
TEST_F(LlvmLibcMlockTest, MLock2) {
9395
PageHolder holder;
9496
EXPECT_TRUE(holder.is_valid());
9597
EXPECT_THAT(LIBC_NAMESPACE::madvise(holder.addr, holder.size, MADV_DONTNEED),
@@ -115,9 +117,8 @@ TEST(LlvmLibcMlockTest, MLock2) {
115117
}
116118
#endif
117119

118-
TEST(LlvmLibcMlockTest, InvalidFlag) {
120+
TEST_F(LlvmLibcMlockTest, InvalidFlag) {
119121
size_t alloc_size = 128; // page size
120-
LIBC_NAMESPACE::libc_errno = 0;
121122
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
122123
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
123124
ASSERT_ERRNO_SUCCESS();
@@ -139,7 +140,7 @@ TEST(LlvmLibcMlockTest, InvalidFlag) {
139140
LIBC_NAMESPACE::munmap(addr, alloc_size);
140141
}
141142

142-
TEST(LlvmLibcMlockTest, MLockAll) {
143+
TEST_F(LlvmLibcMlockTest, MLockAll) {
143144
{
144145
PageHolder holder;
145146
EXPECT_TRUE(holder.is_valid());

libc/test/src/sys/mman/linux/mmap_test.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "src/errno/libc_errno.h"
109
#include "src/sys/mman/mmap.h"
1110
#include "src/sys/mman/munmap.h"
11+
#include "test/UnitTest/ErrnoCheckingTest.h"
1212
#include "test/UnitTest/ErrnoSetterMatcher.h"
1313
#include "test/UnitTest/Test.h"
1414

1515
#include <sys/mman.h>
1616

1717
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
1818
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
19+
using LlvmLibcMMapTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
1920

20-
TEST(LlvmLibcMMapTest, NoError) {
21+
TEST_F(LlvmLibcMMapTest, NoError) {
2122
size_t alloc_size = 128;
22-
LIBC_NAMESPACE::libc_errno = 0;
2323
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
2424
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
2525
ASSERT_ERRNO_SUCCESS();
@@ -33,8 +33,7 @@ TEST(LlvmLibcMMapTest, NoError) {
3333
EXPECT_THAT(LIBC_NAMESPACE::munmap(addr, alloc_size), Succeeds());
3434
}
3535

36-
TEST(LlvmLibcMMapTest, Error_InvalidSize) {
37-
LIBC_NAMESPACE::libc_errno = 0;
36+
TEST_F(LlvmLibcMMapTest, Error_InvalidSize) {
3837
void *addr = LIBC_NAMESPACE::mmap(nullptr, 0, PROT_READ,
3938
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
4039
EXPECT_THAT(addr, Fails(EINVAL, MAP_FAILED));

libc/test/src/sys/mman/linux/mprotect_test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
//
77
//===----------------------------------------------------------------------===//
88

9-
#include "src/errno/libc_errno.h"
109
#include "src/sys/mman/mmap.h"
1110
#include "src/sys/mman/mprotect.h"
1211
#include "src/sys/mman/munmap.h"
12+
#include "test/UnitTest/ErrnoCheckingTest.h"
1313
#include "test/UnitTest/ErrnoSetterMatcher.h"
1414
#include "test/UnitTest/Test.h"
1515

@@ -18,10 +18,10 @@
1818

1919
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
2020
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
21+
using LlvmLibcMProtectTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
2122

22-
TEST(LlvmLibcMProtectTest, NoError) {
23+
TEST_F(LlvmLibcMProtectTest, NoError) {
2324
size_t alloc_size = 128;
24-
LIBC_NAMESPACE::libc_errno = 0;
2525
void *addr = LIBC_NAMESPACE::mmap(nullptr, alloc_size, PROT_READ,
2626
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
2727
ASSERT_ERRNO_SUCCESS();
@@ -47,7 +47,7 @@ TEST(LlvmLibcMProtectTest, NoError) {
4747
// This test is disabled currently due to flakeyness. It will be re-enabled once
4848
// it is less flakey.
4949
/*
50-
TEST(LlvmLibcMProtectTest, Error_InvalidWrite) {
50+
TEST_F(LlvmLibcMProtectTest, Error_InvalidWrite) {
5151
// attempting to write to a read-only protected part of memory should cause a
5252
// segfault.
5353
EXPECT_DEATH(

0 commit comments

Comments
 (0)