xref: /llvm-project/libc/test/src/unistd/chdir_test.cpp (revision af1315c28f9bab76d3c2e1492a3d41e7c48215f8)
105532289SSiva Chandra Reddy //===-- Unittests for chdir -----------------------------------------------===//
205532289SSiva Chandra Reddy //
305532289SSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
405532289SSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
505532289SSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
605532289SSiva Chandra Reddy //
705532289SSiva Chandra Reddy //===----------------------------------------------------------------------===//
805532289SSiva Chandra Reddy 
905532289SSiva Chandra Reddy #include "src/fcntl/open.h"
1005532289SSiva Chandra Reddy #include "src/unistd/chdir.h"
1105532289SSiva Chandra Reddy #include "src/unistd/close.h"
1205532289SSiva Chandra Reddy #include "test/ErrnoSetterMatcher.h"
13*af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
1405532289SSiva Chandra Reddy #include "utils/testutils/FDReader.h"
1505532289SSiva Chandra Reddy 
1605532289SSiva Chandra Reddy #include <errno.h>
1705532289SSiva Chandra Reddy #include <fcntl.h>
1805532289SSiva Chandra Reddy 
1905532289SSiva Chandra Reddy TEST(LlvmLibcChdirTest, ChangeAndOpen) {
2005532289SSiva Chandra Reddy   // The idea of this test is that we will first open an existing test file
2105532289SSiva Chandra Reddy   // without changing the directory to make sure it exists. Next, we change
2205532289SSiva Chandra Reddy   // directory and open the same file to make sure that the "chdir" operation
2305532289SSiva Chandra Reddy   // succeeded.
2405532289SSiva Chandra Reddy   using __llvm_libc::testing::ErrnoSetterMatcher::Succeeds;
2505532289SSiva Chandra Reddy   constexpr const char *TEST_DIR = "testdata";
2605532289SSiva Chandra Reddy   constexpr const char *TEST_FILE = "testdata/chdir.test";
2705532289SSiva Chandra Reddy   constexpr const char *TEST_FILE_BASE = "chdir.test";
2805532289SSiva Chandra Reddy   errno = 0;
2905532289SSiva Chandra Reddy 
3005532289SSiva Chandra Reddy   int fd = __llvm_libc::open(TEST_FILE, O_PATH);
3105532289SSiva Chandra Reddy   ASSERT_GT(fd, 0);
3205532289SSiva Chandra Reddy   ASSERT_EQ(errno, 0);
3305532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::close(fd), Succeeds(0));
3405532289SSiva Chandra Reddy 
3505532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::chdir(TEST_DIR), Succeeds(0));
3605532289SSiva Chandra Reddy   fd = __llvm_libc::open(TEST_FILE_BASE, O_PATH);
3705532289SSiva Chandra Reddy   ASSERT_GT(fd, 0);
3805532289SSiva Chandra Reddy   ASSERT_EQ(errno, 0);
3905532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::close(fd), Succeeds(0));
4005532289SSiva Chandra Reddy }
4105532289SSiva Chandra Reddy 
4205532289SSiva Chandra Reddy TEST(LlvmLibcChdirTest, ChangeToNonExistentDir) {
4305532289SSiva Chandra Reddy   errno = 0;
4405532289SSiva Chandra Reddy   using __llvm_libc::testing::ErrnoSetterMatcher::Fails;
4505532289SSiva Chandra Reddy   ASSERT_THAT(__llvm_libc::chdir("non-existent-dir"), Fails(ENOENT));
4605532289SSiva Chandra Reddy   errno = 0;
4705532289SSiva Chandra Reddy }
48