brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · e2e7188 Raw
53 lines · cpp
1//===-- Unittests for readlinkat ------------------------------------------===//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/__support/CPP/string_view.h"10#include "src/string/string_utils.h"11#include "src/unistd/readlinkat.h"12#include "src/unistd/symlink.h"13#include "src/unistd/unlink.h"14#include "test/UnitTest/ErrnoCheckingTest.h"15#include "test/UnitTest/ErrnoSetterMatcher.h"16#include "test/UnitTest/Test.h"17 18#include "hdr/fcntl_macros.h"19 20namespace cpp = LIBC_NAMESPACE::cpp;21using LlvmLibcReadlinkatTest = LIBC_NAMESPACE::testing::ErrnoCheckingTest;22 23TEST_F(LlvmLibcReadlinkatTest, CreateAndUnlink) {24  using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;25  constexpr const char *FILENAME = "readlinkat_test_file";26  auto LINK_VAL = libc_make_test_file_path(FILENAME);27  constexpr const char *FILENAME2 = "readlinkat_test_file.link";28  auto LINK = libc_make_test_file_path(FILENAME2);29 30  // The test strategy is as follows:31  //   1. Create a symlink with value LINK_VAL.32  //   2. Read the symlink with readlink. The link value read should be LINK_VAL33  //   3. Cleanup the symlink created in step #1.34  ASSERT_THAT(LIBC_NAMESPACE::symlink(LINK_VAL, LINK), Succeeds(0));35 36  char buf[256];37  ssize_t len = LIBC_NAMESPACE::readlinkat(38      AT_FDCWD, LINK, buf, LIBC_NAMESPACE::internal::string_length(FILENAME));39  ASSERT_ERRNO_SUCCESS();40  ASSERT_EQ(cpp::string_view(buf, len), cpp::string_view(LINK_VAL));41 42  ASSERT_THAT(LIBC_NAMESPACE::unlink(LINK), Succeeds(0));43}44 45TEST_F(LlvmLibcReadlinkatTest, ReadlinkInNonExistentPath) {46  using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Fails;47  constexpr auto LEN = 8;48  char buf[LEN];49  ASSERT_THAT(50      LIBC_NAMESPACE::readlinkat(AT_FDCWD, "non-existent-link", buf, LEN),51      Fails<ssize_t>(ENOENT));52}53