Skip to content

Commit 2f7ad89

Browse files
authored
[libc] Migrate unistd tests to use ErrnoCheckingTest. (#132067)
Use ErrnoCheckingTest harness added in d039af3 for all unistd tests that verify errno values. Stop explicitly setting it to zero in test code, as harness does it. It also verifies that the errno is zero at the end of each test case, so update the ASSERT_ERRNO_EQ and ASSERT_ERRNO_FAILURE macro to clear out its value after the verification (similar to how ErrnoSetterMatcher does). Update the CMake and Bazel rules for those tests. In the latter case, remove commented out tests that are currently unsupported in Bazel, since they get stale quickly.
1 parent 6aeae62 commit 2f7ad89

30 files changed

+227
-222
lines changed

libc/test/UnitTest/Test.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,16 @@
4141
// they all provide.
4242

4343
#define ASSERT_ERRNO_EQ(VAL) \
44-
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno))
44+
do { \
45+
ASSERT_EQ(VAL, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
46+
LIBC_NAMESPACE::libc_errno = 0; \
47+
} while (0)
4548
#define ASSERT_ERRNO_SUCCESS() \
4649
ASSERT_EQ(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
4750
#define ASSERT_ERRNO_FAILURE() \
48-
ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno))
51+
do { \
52+
ASSERT_NE(0, static_cast<int>(LIBC_NAMESPACE::libc_errno)); \
53+
LIBC_NAMESPACE::libc_errno = 0; \
54+
} while (0)
4955

5056
#endif // LLVM_LIBC_TEST_UNITTEST_TEST_H

libc/test/src/unistd/CMakeLists.txt

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ add_libc_unittest(
1515
libc.src.unistd.access
1616
libc.src.unistd.close
1717
libc.src.unistd.unlink
18+
libc.test.UnitTest.ErrnoCheckingTest
19+
libc.test.UnitTest.ErrnoSetterMatcher
1820
)
1921

2022
add_libc_unittest(
@@ -30,6 +32,7 @@ add_libc_unittest(
3032
libc.src.unistd.chdir
3133
libc.src.unistd.close
3234
libc.src.fcntl.open
35+
libc.test.UnitTest.ErrnoCheckingTest
3336
libc.test.UnitTest.ErrnoSetterMatcher
3437
)
3538

@@ -48,6 +51,7 @@ add_libc_unittest(
4851
libc.src.unistd.read
4952
libc.src.unistd.unlink
5053
libc.src.unistd.write
54+
libc.test.UnitTest.ErrnoCheckingTest
5155
libc.test.UnitTest.ErrnoSetterMatcher
5256
)
5357

@@ -66,6 +70,7 @@ add_libc_unittest(
6670
libc.src.unistd.read
6771
libc.src.unistd.unlink
6872
libc.src.unistd.write
73+
libc.test.UnitTest.ErrnoCheckingTest
6974
libc.test.UnitTest.ErrnoSetterMatcher
7075
)
7176

@@ -84,6 +89,7 @@ add_libc_unittest(
8489
libc.src.unistd.read
8590
libc.src.unistd.unlink
8691
libc.src.unistd.write
92+
libc.test.UnitTest.ErrnoCheckingTest
8793
libc.test.UnitTest.ErrnoSetterMatcher
8894
)
8995

@@ -99,6 +105,7 @@ add_libc_unittest(
99105
libc.src.fcntl.open
100106
libc.src.unistd.fchdir
101107
libc.src.unistd.close
108+
libc.test.UnitTest.ErrnoCheckingTest
102109
libc.test.UnitTest.ErrnoSetterMatcher
103110
)
104111

@@ -118,6 +125,8 @@ add_libc_unittest(
118125
libc.src.unistd.unlink
119126
libc.src.unistd.write
120127
libc.src.__support.CPP.string_view
128+
libc.test.UnitTest.ErrnoCheckingTest
129+
libc.test.UnitTest.ErrnoSetterMatcher
121130
)
122131

123132
add_libc_unittest(
@@ -136,6 +145,7 @@ add_libc_unittest(
136145
libc.src.unistd.pwrite
137146
libc.src.unistd.unlink
138147
libc.src.unistd.write
148+
libc.test.UnitTest.ErrnoCheckingTest
139149
libc.test.UnitTest.ErrnoSetterMatcher
140150
)
141151

@@ -154,6 +164,7 @@ add_libc_unittest(
154164
libc.src.unistd.read
155165
libc.src.unistd.write
156166
libc.src.stdio.remove
167+
libc.test.UnitTest.ErrnoCheckingTest
157168
libc.test.UnitTest.ErrnoSetterMatcher
158169
)
159170

@@ -170,6 +181,8 @@ add_libc_unittest(
170181
libc.src.unistd.close
171182
libc.src.unistd.link
172183
libc.src.unistd.unlink
184+
libc.test.UnitTest.ErrnoCheckingTest
185+
libc.test.UnitTest.ErrnoSetterMatcher
173186
)
174187

175188
add_libc_unittest(
@@ -185,6 +198,8 @@ add_libc_unittest(
185198
libc.src.unistd.close
186199
libc.src.unistd.linkat
187200
libc.src.unistd.unlink
201+
libc.test.UnitTest.ErrnoCheckingTest
202+
libc.test.UnitTest.ErrnoSetterMatcher
188203
)
189204

190205
add_libc_unittest(
@@ -200,6 +215,7 @@ add_libc_unittest(
200215
libc.src.unistd.close
201216
libc.src.unistd.lseek
202217
libc.src.unistd.read
218+
libc.test.UnitTest.ErrnoCheckingTest
203219
libc.test.UnitTest.ErrnoSetterMatcher
204220
)
205221

@@ -214,6 +230,7 @@ add_libc_unittest(
214230
libc.src.errno.errno
215231
libc.src.unistd.close
216232
libc.src.unistd.pipe
233+
libc.test.UnitTest.ErrnoCheckingTest
217234
libc.test.UnitTest.ErrnoSetterMatcher
218235
)
219236

@@ -228,6 +245,7 @@ add_libc_unittest(
228245
libc.src.errno.errno
229246
libc.src.unistd.close
230247
libc.src.unistd.pipe2
248+
libc.test.UnitTest.ErrnoCheckingTest
231249
libc.test.UnitTest.ErrnoSetterMatcher
232250
)
233251

@@ -242,6 +260,8 @@ add_libc_unittest(
242260
libc.src.errno.errno
243261
libc.src.sys.stat.mkdir
244262
libc.src.unistd.rmdir
263+
libc.test.UnitTest.ErrnoCheckingTest
264+
libc.test.UnitTest.ErrnoSetterMatcher
245265
)
246266

247267
add_libc_unittest(
@@ -268,6 +288,8 @@ add_libc_unittest(
268288
libc.src.unistd.symlink
269289
libc.src.unistd.unlink
270290
libc.src.__support.CPP.string_view
291+
libc.test.UnitTest.ErrnoCheckingTest
292+
libc.test.UnitTest.ErrnoSetterMatcher
271293
)
272294

273295
add_libc_unittest(
@@ -285,6 +307,8 @@ add_libc_unittest(
285307
libc.src.unistd.symlink
286308
libc.src.unistd.unlink
287309
libc.src.__support.CPP.string_view
310+
libc.test.UnitTest.ErrnoCheckingTest
311+
libc.test.UnitTest.ErrnoSetterMatcher
288312
)
289313

290314
add_libc_unittest(
@@ -310,6 +334,8 @@ add_libc_unittest(
310334
libc.src.unistd.close
311335
libc.src.unistd.symlink
312336
libc.src.unistd.unlink
337+
libc.test.UnitTest.ErrnoCheckingTest
338+
libc.test.UnitTest.ErrnoSetterMatcher
313339
)
314340

315341
add_libc_unittest(
@@ -325,6 +351,8 @@ add_libc_unittest(
325351
libc.src.unistd.close
326352
libc.src.unistd.symlinkat
327353
libc.src.unistd.unlink
354+
libc.test.UnitTest.ErrnoCheckingTest
355+
libc.test.UnitTest.ErrnoSetterMatcher
328356
)
329357

330358
add_libc_unittest(
@@ -343,6 +371,8 @@ add_libc_unittest(
343371
libc.src.unistd.unlink
344372
libc.src.unistd.write
345373
libc.src.__support.CPP.string_view
374+
libc.test.UnitTest.ErrnoCheckingTest
375+
libc.test.UnitTest.ErrnoSetterMatcher
346376
)
347377

348378
add_libc_unittest(
@@ -374,6 +404,8 @@ add_libc_unittest(
374404
libc.src.fcntl.openat
375405
libc.src.unistd.close
376406
libc.src.unistd.unlinkat
407+
libc.test.UnitTest.ErrnoCheckingTest
408+
libc.test.UnitTest.ErrnoSetterMatcher
377409
)
378410

379411
add_libc_unittest(
@@ -404,6 +436,8 @@ add_libc_unittest(
404436
getsid_test.cpp
405437
DEPENDS
406438
libc.src.unistd.getsid
439+
libc.test.UnitTest.ErrnoCheckingTest
440+
libc.test.UnitTest.ErrnoSetterMatcher
407441
)
408442

409443
add_libc_unittest(
@@ -427,6 +461,8 @@ add_libc_unittest(
427461
libc.src.fcntl.open
428462
libc.src.unistd.close
429463
libc.src.errno.errno
464+
libc.test.UnitTest.ErrnoCheckingTest
465+
libc.test.UnitTest.ErrnoSetterMatcher
430466
)
431467

432468
add_libc_unittest(
@@ -451,6 +487,7 @@ add_libc_unittest(
451487
libc.include.sys_syscall
452488
libc.src.errno.errno
453489
libc.src.unistd.__llvm_libc_syscall
490+
libc.test.UnitTest.ErrnoCheckingTest
454491
libc.test.UnitTest.ErrnoSetterMatcher
455492
)
456493

@@ -479,6 +516,8 @@ add_libc_unittest(
479516
libc.src.unistd.fpathconf
480517
libc.src.fcntl.open
481518
libc.src.unistd.close
519+
libc.test.UnitTest.ErrnoCheckingTest
520+
libc.test.UnitTest.ErrnoSetterMatcher
482521
)
483522

484523
add_libc_unittest(
@@ -494,6 +533,8 @@ add_libc_unittest(
494533
libc.src.unistd.pathconf
495534
libc.src.fcntl.open
496535
libc.src.unistd.close
536+
libc.test.UnitTest.ErrnoCheckingTest
537+
libc.test.UnitTest.ErrnoSetterMatcher
497538
)
498539

499540
add_libc_test(
@@ -519,6 +560,7 @@ add_libc_test(
519560
DEPENDS
520561
libc.src.unistd.getentropy
521562
libc.src.errno.errno
563+
libc.test.UnitTest.ErrnoCheckingTest
522564
libc.test.UnitTest.ErrnoSetterMatcher
523565
)
524566

libc/test/src/unistd/access_test.cpp

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

9-
#include "src/errno/libc_errno.h"
109
#include "src/fcntl/open.h"
1110
#include "src/unistd/access.h"
1211
#include "src/unistd/close.h"
1312
#include "src/unistd/unlink.h"
13+
#include "test/UnitTest/ErrnoCheckingTest.h"
1414
#include "test/UnitTest/ErrnoSetterMatcher.h"
1515
#include "test/UnitTest/Test.h"
1616

1717
#include <sys/stat.h>
1818
#include <unistd.h>
1919

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

32-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, F_OK), 0);
33-
ASSERT_ERRNO_SUCCESS();
34-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, X_OK | W_OK | R_OK), 0);
35-
ASSERT_ERRNO_SUCCESS();
34+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, F_OK), Succeeds(0));
35+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, X_OK | W_OK | R_OK),
36+
Succeeds(0));
3637
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
3738

3839
fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IXUSR);
3940
ASSERT_ERRNO_SUCCESS();
4041
ASSERT_GT(fd, 0);
4142
ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));
42-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, F_OK), 0);
43-
ASSERT_ERRNO_SUCCESS();
44-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, X_OK), 0);
45-
ASSERT_ERRNO_SUCCESS();
46-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, R_OK), -1);
47-
ASSERT_ERRNO_EQ(EACCES);
48-
LIBC_NAMESPACE::libc_errno = 0;
49-
ASSERT_EQ(LIBC_NAMESPACE::access(TEST_FILE, W_OK), -1);
50-
ASSERT_ERRNO_EQ(EACCES);
51-
LIBC_NAMESPACE::libc_errno = 0;
43+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, F_OK), Succeeds(0));
44+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, X_OK), Succeeds(0));
45+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, R_OK), Fails(EACCES));
46+
ASSERT_THAT(LIBC_NAMESPACE::access(TEST_FILE, W_OK), Fails(EACCES));
5247
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
5348
}
5449

55-
TEST(LlvmLibcAccessTest, AccessNonExistentFile) {
50+
TEST_F(LlvmLibcAccessTest, AccessNonExistentFile) {
5651
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
5752
ASSERT_THAT(LIBC_NAMESPACE::access("testdata/non-existent-file", F_OK),
5853
Fails(ENOENT));

libc/test/src/unistd/chdir_test.cpp

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

9-
#include "src/errno/libc_errno.h"
109
#include "src/fcntl/open.h"
1110
#include "src/unistd/chdir.h"
1211
#include "src/unistd/close.h"
12+
#include "test/UnitTest/ErrnoCheckingTest.h"
1313
#include "test/UnitTest/ErrnoSetterMatcher.h"
1414
#include "test/UnitTest/Test.h"
1515

1616
#include "hdr/fcntl_macros.h"
1717

18-
TEST(LlvmLibcChdirTest, ChangeAndOpen) {
18+
using LlvmLibcChdirTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
19+
20+
TEST_F(LlvmLibcChdirTest, ChangeAndOpen) {
1921
// The idea of this test is that we will first open an existing test file
2022
// without changing the directory to make sure it exists. Next, we change
2123
// directory and open the same file to make sure that the "chdir" operation
@@ -27,7 +29,6 @@ TEST(LlvmLibcChdirTest, ChangeAndOpen) {
2729
auto TEST_FILE = libc_make_test_file_path(FILENAME2);
2830
constexpr const char *FILENAME3 = "chdir.test";
2931
auto TEST_FILE_BASE = libc_make_test_file_path(FILENAME3);
30-
LIBC_NAMESPACE::libc_errno = 0;
3132

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

44-
TEST(LlvmLibcChdirTest, ChangeToNonExistentDir) {
45-
LIBC_NAMESPACE::libc_errno = 0;
45+
TEST_F(LlvmLibcChdirTest, ChangeToNonExistentDir) {
4646
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
4747
ASSERT_THAT(LIBC_NAMESPACE::chdir("non-existent-dir"), Fails(ENOENT));
48-
LIBC_NAMESPACE::libc_errno = 0;
4948
}

libc/test/src/unistd/dup2_test.cpp

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

9-
#include "src/errno/libc_errno.h"
109
#include "src/fcntl/open.h"
1110
#include "src/unistd/close.h"
1211
#include "src/unistd/dup2.h"
1312
#include "src/unistd/read.h"
1413
#include "src/unistd/unlink.h"
1514
#include "src/unistd/write.h"
15+
#include "test/UnitTest/ErrnoCheckingTest.h"
1616
#include "test/UnitTest/ErrnoSetterMatcher.h"
1717
#include "test/UnitTest/Test.h"
1818

1919
#include <sys/stat.h>
2020

21-
TEST(LlvmLibcdupTest, ReadAndWriteViaDup) {
21+
using LlvmLibcdupTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;
22+
23+
TEST_F(LlvmLibcdupTest, ReadAndWriteViaDup) {
2224
constexpr int DUPFD = 0xD0;
23-
LIBC_NAMESPACE::libc_errno = 0;
2425
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
2526
constexpr const char *FILENAME = "dup2.test";
2627
auto TEST_FILE = libc_make_test_file_path(FILENAME);
@@ -59,7 +60,7 @@ TEST(LlvmLibcdupTest, ReadAndWriteViaDup) {
5960
ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));
6061
}
6162

62-
TEST(LlvmLibcdupTest, DupBadFD) {
63+
TEST_F(LlvmLibcdupTest, DupBadFD) {
6364
using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
6465
ASSERT_THAT(LIBC_NAMESPACE::dup2(-1, 123), Fails(EBADF));
6566
}

0 commit comments

Comments
 (0)