brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 693f15c Raw
55 lines · cpp
1//===-- Unittests for access ----------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "src/fcntl/open.h"10#include "src/unistd/access.h"11#include "src/unistd/close.h"12#include "src/unistd/unlink.h"13#include "test/UnitTest/ErrnoCheckingTest.h"14#include "test/UnitTest/ErrnoSetterMatcher.h"15#include "test/UnitTest/Test.h"16 17#include <sys/stat.h>18#include <unistd.h>19 20using LlvmLibcAccessTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;21 22TEST_F(LlvmLibcAccessTest, CreateAndTest) {23  // The test strategy is to repeatedly create a file in different modes and24  // test that it is accessable in those modes but not in others.25  using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;26  using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;27  constexpr const char *FILENAME = "access.test";28  auto TEST_FILE = libc_make_test_file_path(FILENAME);29  int fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IRWXU);30  ASSERT_ERRNO_SUCCESS();31  ASSERT_GT(fd, 0);32  ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(0));33 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));37  ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));38 39  fd = LIBC_NAMESPACE::open(TEST_FILE, O_WRONLY | O_CREAT, S_IXUSR);40  ASSERT_ERRNO_SUCCESS();41  ASSERT_GT(fd, 0);42  ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds(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));47  ASSERT_THAT(LIBC_NAMESPACE::unlink(TEST_FILE), Succeeds(0));48}49 50TEST_F(LlvmLibcAccessTest, AccessNonExistentFile) {51  using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;52  ASSERT_THAT(LIBC_NAMESPACE::access("testdata/non-existent-file", F_OK),53              Fails(ENOENT));54}55