Files
TheRock/compiler/amd-llvm/lldb/unittests/Symbol/SymStoreTest.cpp
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

114 lines
4.8 KiB
C++

//===----------------------------------------------------------------------===//
//
// 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 "gtest/gtest.h"
#include "Plugins/SymbolLocator/SymStore/SymbolLocatorSymStore.h"
using namespace lldb_private;
using LookupEntry = SymbolLocatorSymStore::LookupEntry;
TEST(SymStoreTest, ParseEnvSymbolPaths_Srv) {
auto check = [](const char *str) {
std::vector<std::string> sources;
for (LookupEntry entry : SymbolLocatorSymStore::ParseEnvSymbolPaths(str))
sources.push_back(std::move(entry.source));
return sources;
};
auto returns = [](auto... strs) { return std::vector<std::string>{strs...}; };
// Local paths.
EXPECT_EQ(check(""), returns());
EXPECT_EQ(check("C:\\ProgramData\\Symbols"),
returns("C:\\ProgramData\\Symbols"));
EXPECT_EQ(check("C:\\symbols;\\\\buildserver\\syms;file://D:/pdb"),
returns("C:\\symbols", "\\\\buildserver\\syms", "file://D:/pdb"));
// Symbol servers.
EXPECT_EQ(check("srv*https://msdl.microsoft.com/download/symbols"),
returns("https://msdl.microsoft.com/download/symbols"));
EXPECT_EQ(check("Srv*https://msdl.microsoft.com/download/symbols"),
returns("https://msdl.microsoft.com/download/symbols"));
EXPECT_EQ(check("SRV*http://localhost"), returns("http://localhost"));
// Symbol servers and local paths with caches.
EXPECT_EQ(check("SRV*C:\\symcache*\\\\corp\\symbols"),
returns("\\\\corp\\symbols"));
EXPECT_EQ(check("D:\\sym;srv*C:\\symcache*D:\\sym"),
returns("D:\\sym", "D:\\sym"));
EXPECT_EQ(check("srv**https://symbols.mozilla.org"),
returns("https://symbols.mozilla.org"));
// Symbol server with custom implementation (unsupported).
EXPECT_EQ(check("symsrv*symsrv.dll*https://symbols.mozilla.org"), returns());
EXPECT_EQ(check("symsrv*symsrv.dll*C:\\symbols*https://symbols.mozilla.org"),
returns());
EXPECT_EQ(check("symsrv*https://symbols.mozilla.org;D:\\sym"),
returns("D:\\sym"));
// Partially invalid specs.
EXPECT_EQ(check("srv*;;D:\\sym;SRV*"), returns("", "D:\\sym", ""));
EXPECT_EQ(check("srv*D:\\1*D:\\2*D:\\3;D:\\sym"), returns("D:\\sym"));
EXPECT_EQ(check("symsrv*D:\\1;D:\\sym"), returns("D:\\sym"));
}
TEST(SymStoreTest, ParseEnvSymbolPaths_Cache) {
auto check = [](const char *str) {
std::vector<std::string> caches;
for (LookupEntry entry : SymbolLocatorSymStore::ParseEnvSymbolPaths(str))
if (entry.cache)
caches.push_back(std::move(*entry.cache));
return caches;
};
auto returns = [](auto... strs) { return std::vector<std::string>{strs...}; };
// No caches.
EXPECT_EQ(check(""), returns());
EXPECT_EQ(check("C:\\ProgramData\\Symbols"), returns());
EXPECT_EQ(check("C:\\symbols;\\\\buildserver\\syms;file://D:/pdb"),
returns());
EXPECT_EQ(check("SRV*http://localhost"), returns());
// No cache without a server.
EXPECT_EQ(check("cache*"), returns());
EXPECT_EQ(check("cache*C:\\symcache"), returns());
EXPECT_EQ(check("cache*C:\\symcache;D:\\sym"), returns());
// Explicit caches for symbol servers.
EXPECT_EQ(check("SRV*C:\\symcache*\\\\corp\\symbols"),
returns("C:\\symcache"));
EXPECT_EQ(check("D:\\sym;srv*C:\\symcache*D:\\sym"), returns("C:\\symcache"));
// Implicit caches for following symbol servers.
EXPECT_EQ(check("cache*D:\\s;srv*\\\\corp"), returns("D:\\s"));
EXPECT_EQ(check("CACHE*D:\\s;srv*\\\\corp;SRV*http://localhost"),
returns("D:\\s", "D:\\s"));
EXPECT_EQ(check("Cache*D:\\s;srv*\\\\corp;SRV*C:\\X*http://localhost"),
returns("D:\\s", "C:\\X"));
EXPECT_EQ(check("srv*\\\\corp;cache*D:\\s;SRV*C:\\X*http://localhost"),
returns("C:\\X"));
EXPECT_EQ(check("srv*\\\\corp;SRV*C:\\X*http://localhost;cache*D:\\s"),
returns("C:\\X"));
// Fall back to default cache.
auto default_cache = SymbolLocatorSymStore::GetSystemDefaultCachePath();
EXPECT_EQ(check("cache*;srv*\\\\corp"), returns(default_cache));
EXPECT_EQ(check("srv**https://symbols.mozilla.org"), returns(default_cache));
// Symbol server with custom implementation (unsupported).
EXPECT_EQ(check("symsrv*symsrv.dll*https://symbols.mozilla.org"), returns());
EXPECT_EQ(check("symsrv*symsrv.dll*C:\\symbols*https://symbols.mozilla.org"),
returns());
// Partially invalid specs.
EXPECT_EQ(check("cache*C:\\1;;D:\\sym;SRV*"), returns("C:\\1"));
EXPECT_EQ(check("cache*C:\\1;srv*D:\\1*D:\\2*D:\\3;srv*D:\\sym"),
returns("C:\\1"));
EXPECT_EQ(check("cache*C:\\1;symsrv*D:\\1;srv*D:\\sym"), returns("C:\\1"));
}