xref: /llvm-project/libc/test/src/unistd/unlinkat_test.cpp (revision 7a7d5481ad5c925d4f31bee3ab66bd1d7d514b73)
1b8385162SSiva Chandra Reddy //===-- Unittests for unlinkat --------------------------------------------===//
2b8385162SSiva Chandra Reddy //
3b8385162SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4b8385162SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5b8385162SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6b8385162SSiva Chandra Reddy //
7b8385162SSiva Chandra Reddy //===----------------------------------------------------------------------===//
8b8385162SSiva Chandra Reddy 
967de5381SSiva Chandra Reddy #include "src/errno/libc_errno.h"
10b8385162SSiva Chandra Reddy #include "src/fcntl/open.h"
11b8385162SSiva Chandra Reddy #include "src/fcntl/openat.h"
12b8385162SSiva Chandra Reddy #include "src/unistd/close.h"
13b8385162SSiva Chandra Reddy #include "src/unistd/unlinkat.h"
144f1fe19dSSiva Chandra Reddy #include "test/UnitTest/ErrnoSetterMatcher.h"
15af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
16b8385162SSiva Chandra Reddy 
17c0ad6e2fSNick Desaulniers #include <sys/stat.h>
18c0ad6e2fSNick Desaulniers 
TEST(LlvmLibcUnlinkatTest,CreateAndDeleteTest)19b8385162SSiva Chandra Reddy TEST(LlvmLibcUnlinkatTest, CreateAndDeleteTest) {
20b6bc9d72SGuillaume Chatelet   using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
21*7a7d5481Smichaelrj-google   constexpr const char *FILENAME = "testdata";
22*7a7d5481Smichaelrj-google   auto TEST_DIR = libc_make_test_file_path(FILENAME);
23*7a7d5481Smichaelrj-google   constexpr const char *FILENAME2 = "openat.test";
24*7a7d5481Smichaelrj-google   auto TEST_FILE = libc_make_test_file_path(FILENAME2);
25b6bc9d72SGuillaume Chatelet   int dir_fd = LIBC_NAMESPACE::open(TEST_DIR, O_DIRECTORY);
2673874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
27b8385162SSiva Chandra Reddy   ASSERT_GT(dir_fd, 0);
28b8385162SSiva Chandra Reddy   int write_fd =
29b6bc9d72SGuillaume Chatelet       LIBC_NAMESPACE::openat(dir_fd, TEST_FILE, O_WRONLY | O_CREAT, S_IRWXU);
3073874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
31b8385162SSiva Chandra Reddy   ASSERT_GT(write_fd, 0);
32b6bc9d72SGuillaume Chatelet   ASSERT_THAT(LIBC_NAMESPACE::close(write_fd), Succeeds(0));
33b6bc9d72SGuillaume Chatelet   ASSERT_THAT(LIBC_NAMESPACE::unlinkat(dir_fd, TEST_FILE, 0), Succeeds(0));
34b6bc9d72SGuillaume Chatelet   ASSERT_THAT(LIBC_NAMESPACE::close(dir_fd), Succeeds(0));
35b8385162SSiva Chandra Reddy }
36b8385162SSiva Chandra Reddy 
TEST(LlvmLibcUnlinkatTest,UnlinkatNonExistentFile)37b8385162SSiva Chandra Reddy TEST(LlvmLibcUnlinkatTest, UnlinkatNonExistentFile) {
38*7a7d5481Smichaelrj-google   constexpr const char *FILENAME = "testdata";
39*7a7d5481Smichaelrj-google   auto TEST_DIR = libc_make_test_file_path(FILENAME);
40b6bc9d72SGuillaume Chatelet   int dir_fd = LIBC_NAMESPACE::open(TEST_DIR, O_DIRECTORY);
4173874f7aSGuillaume Chatelet   ASSERT_ERRNO_SUCCESS();
42b8385162SSiva Chandra Reddy   ASSERT_GT(dir_fd, 0);
43b6bc9d72SGuillaume Chatelet   using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;
44b6bc9d72SGuillaume Chatelet   using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
45b6bc9d72SGuillaume Chatelet   ASSERT_THAT(LIBC_NAMESPACE::unlinkat(dir_fd, "non-existent-file", 0),
46b8385162SSiva Chandra Reddy               Fails(ENOENT));
47b6bc9d72SGuillaume Chatelet   ASSERT_THAT(LIBC_NAMESPACE::close(dir_fd), Succeeds(0));
48b8385162SSiva Chandra Reddy }
49