CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
94 lines
3.5 KiB
C++
94 lines
3.5 KiB
C++
//===- ArchiveTest.cpp ----------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Object/Archive.h"
|
|
#include "llvm/Testing/Support/Error.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace llvm;
|
|
using namespace object;
|
|
using namespace testing;
|
|
|
|
static const char ArchiveWithMember[] = "!<arch>\n" // Global header
|
|
"test/ " // Member name
|
|
"0 " // Timestamp
|
|
"0 " // Owner ID
|
|
"0 " // Group ID
|
|
"0 " // File mode
|
|
"9999999999" // Size
|
|
"`\n";
|
|
|
|
static const char ThinArchiveWithMember[] = "!<thin>\n" // Global header
|
|
"test/ " // Member name
|
|
"0 " // Timestamp
|
|
"0 " // Owner ID
|
|
"0 " // Group ID
|
|
"0 " // File mode
|
|
"9999999999" // Size
|
|
"`\n";
|
|
|
|
static const uint64_t MemberSize = 9999999999ull;
|
|
|
|
struct ArchiveTestsFixture : Test {
|
|
Expected<Archive::child_iterator> createChild(StringRef Src) {
|
|
MemoryBufferRef Source(Src, "archive");
|
|
Expected<std::unique_ptr<Archive>> AOrErr = Archive::create(Source);
|
|
if (!AOrErr)
|
|
return AOrErr.takeError();
|
|
A = std::move(*AOrErr);
|
|
|
|
Error ChildErr = Error::success();
|
|
auto Child = A->child_begin(ChildErr);
|
|
if (ChildErr)
|
|
return std::move(ChildErr);
|
|
return Child;
|
|
}
|
|
|
|
std::unique_ptr<Archive> A;
|
|
};
|
|
|
|
TEST_F(ArchiveTestsFixture, ArchiveChildGetSizeRegularArchive) {
|
|
// This test relies on a StringRef being able to hold the appropriate amount
|
|
// of data.
|
|
if (std::numeric_limits<StringRef::size_type>::max() < MemberSize)
|
|
GTEST_SKIP();
|
|
|
|
auto Child = createChild(ArchiveWithMember);
|
|
ASSERT_THAT_EXPECTED(Child, Succeeded());
|
|
|
|
Expected<uint64_t> Size = (*Child)->getSize();
|
|
ASSERT_THAT_EXPECTED(Size, Succeeded());
|
|
EXPECT_EQ(MemberSize, *Size);
|
|
}
|
|
|
|
TEST_F(ArchiveTestsFixture, ArchiveChildGetSizeThinArchive) {
|
|
auto Child = createChild(ThinArchiveWithMember);
|
|
ASSERT_THAT_EXPECTED(Child, Succeeded());
|
|
|
|
Expected<uint64_t> Size = (*Child)->getSize();
|
|
ASSERT_THAT_EXPECTED(Size, Succeeded());
|
|
EXPECT_EQ(MemberSize, *Size);
|
|
}
|
|
|
|
TEST_F(ArchiveTestsFixture, ArchiveChildGetBuffer) {
|
|
// This test relies on a StringRef being able to hold the appropriate amount
|
|
// of data.
|
|
if (std::numeric_limits<StringRef::size_type>::max() < MemberSize)
|
|
GTEST_SKIP();
|
|
|
|
auto Child = createChild(ArchiveWithMember);
|
|
ASSERT_THAT_EXPECTED(Child, Succeeded());
|
|
|
|
Expected<StringRef> Buffer = (*Child)->getBuffer();
|
|
// Cannot use ASSERT_THAT_EXPECTED, as that will attempt to print the
|
|
// StringRef (which has an invalid size).
|
|
ASSERT_TRUE((bool)Buffer);
|
|
EXPECT_EQ(MemberSize, Buffer->size());
|
|
EXPECT_EQ(ArchiveWithMember + sizeof(ArchiveWithMember) - 1, Buffer->data());
|
|
}
|