xref: /llvm-project/libc/test/src/unistd/chdir_test.cpp (revision 055322891ce9df72116da23529f999658b258450)
1*05532289SSiva Chandra Reddy //===-- Unittests for chdir -----------------------------------------------===//
2*05532289SSiva Chandra Reddy //
3*05532289SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*05532289SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
5*05532289SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*05532289SSiva Chandra Reddy //
7*05532289SSiva Chandra Reddy //===----------------------------------------------------------------------===//
8*05532289SSiva Chandra Reddy 
9*05532289SSiva Chandra Reddy #include "src/fcntl/open.h"
10*05532289SSiva Chandra Reddy #include "src/unistd/chdir.h"
11*05532289SSiva Chandra Reddy #include "src/unistd/close.h"
12*05532289SSiva Chandra Reddy #include "test/ErrnoSetterMatcher.h"
13*05532289SSiva Chandra Reddy #include "utils/UnitTest/Test.h"
14*05532289SSiva Chandra Reddy #include "utils/testutils/FDReader.h"
15*05532289SSiva Chandra Reddy 
16*05532289SSiva Chandra Reddy #include <errno.h>
17*05532289SSiva Chandra Reddy #include <fcntl.h>
18*05532289SSiva Chandra Reddy 
19*05532289SSiva Chandra Reddy TEST(LlvmLibcChdirTest, ChangeAndOpen) {
20*05532289SSiva Chandra Reddy   // The idea of this test is that we will first open an existing test file
21*05532289SSiva Chandra Reddy   // without changing the directory to make sure it exists. Next, we change
22*05532289SSiva Chandra Reddy   // directory and open the same file to make sure that the "chdir" operation
23*05532289SSiva Chandra Reddy   // succeeded.
24*05532289SSiva Chandra Reddy   using __llvm_libc::testing::ErrnoSetterMatcher::Succeeds;
25*05532289SSiva Chandra Reddy   constexpr const char *TEST_DIR = "testdata";
26*05532289SSiva Chandra Reddy   constexpr const char *TEST_FILE = "testdata/chdir.test";
27*05532289SSiva Chandra Reddy   constexpr const char *TEST_FILE_BASE = "chdir.test";
28*05532289SSiva Chandra Reddy   errno = 0;
29*05532289SSiva Chandra Reddy 
30*05532289SSiva Chandra Reddy   int fd = __llvm_libc::open(TEST_FILE, O_PATH);
31*05532289SSiva Chandra Reddy   ASSERT_GT(fd, 0);
32*05532289SSiva Chandra Reddy   ASSERT_EQ(errno, 0);
33*05532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::close(fd), Succeeds(0));
34*05532289SSiva Chandra Reddy 
35*05532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::chdir(TEST_DIR), Succeeds(0));
36*05532289SSiva Chandra Reddy   fd = __llvm_libc::open(TEST_FILE_BASE, O_PATH);
37*05532289SSiva Chandra Reddy   ASSERT_GT(fd, 0);
38*05532289SSiva Chandra Reddy   ASSERT_EQ(errno, 0);
39*05532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::close(fd), Succeeds(0));
40*05532289SSiva Chandra Reddy }
41*05532289SSiva Chandra Reddy 
42*05532289SSiva Chandra Reddy TEST(LlvmLibcChdirTest, ChangeToNonExistentDir) {
43*05532289SSiva Chandra Reddy   errno = 0;
44*05532289SSiva Chandra Reddy   using __llvm_libc::testing::ErrnoSetterMatcher::Fails;
45*05532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::chdir("non-existent-dir"), Fails(ENOENT));
46*05532289SSiva Chandra Reddy   errno = 0;
47*05532289SSiva Chandra Reddy }
48