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
114 lines
4.8 KiB
C++
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"));
|
|
}
|