1 //===-- HostInfoTest.cpp --------------------------------------------------===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Host/HostInfo.h"
10 #include "TestingSupport/SubsystemRAII.h"
11 #include "TestingSupport/TestUtilities.h"
12 #include "lldb/Host/FileSystem.h"
13 #include "lldb/lldb-defines.h"
14 #include "llvm/TargetParser/Host.h"
15 #include "gtest/gtest.h"
17 using namespace lldb_private
;
21 class HostInfoTest
: public ::testing::Test
{
22 SubsystemRAII
<FileSystem
, HostInfo
> subsystems
;
26 TEST_F(HostInfoTest
, GetAugmentedArchSpec
) {
27 // Fully specified triple should not be changed.
28 ArchSpec spec
= HostInfo::GetAugmentedArchSpec("x86_64-pc-linux-gnu");
29 EXPECT_EQ(spec
.GetTriple().getTriple(), "x86_64-pc-linux-gnu");
31 // Same goes if we specify at least one of (os, vendor, env).
32 spec
= HostInfo::GetAugmentedArchSpec("x86_64-pc");
33 EXPECT_EQ(spec
.GetTriple().getTriple(), "x86_64-pc");
35 // But if we specify only an arch, we should fill in the rest from the host.
36 spec
= HostInfo::GetAugmentedArchSpec("x86_64");
37 Triple
triple(sys::getDefaultTargetTriple());
38 EXPECT_EQ(spec
.GetTriple().getArch(), Triple::x86_64
);
39 EXPECT_EQ(spec
.GetTriple().getOS(), triple
.getOS());
40 EXPECT_EQ(spec
.GetTriple().getVendor(), triple
.getVendor());
41 EXPECT_EQ(spec
.GetTriple().getEnvironment(), triple
.getEnvironment());
43 // Test LLDB_ARCH_DEFAULT
44 EXPECT_EQ(HostInfo::GetAugmentedArchSpec(LLDB_ARCH_DEFAULT
).GetTriple(),
45 HostInfo::GetArchitecture(HostInfo::eArchKindDefault
).GetTriple());
47 HostInfo::GetAugmentedArchSpec("armv7k").GetTriple().getEnvironmentName(),
51 TEST_F(HostInfoTest
, GetHostname
) {
52 // Check non-empty string input works correctly.
54 EXPECT_TRUE(HostInfo::GetHostname(s
));
57 #if defined(__APPLE__)
58 TEST_F(HostInfoTest
, GetXcodeSDK
) {
59 auto get_sdk
= [](std::string sdk
, bool error
= false) -> llvm::StringRef
{
60 auto sdk_path_or_err
=
61 HostInfo::GetSDKRoot(HostInfo::SDKOptions
{XcodeSDK(std::move(sdk
))});
63 EXPECT_TRUE((bool)sdk_path_or_err
);
64 return *sdk_path_or_err
;
66 EXPECT_FALSE((bool)sdk_path_or_err
);
67 llvm::consumeError(sdk_path_or_err
.takeError());
70 EXPECT_FALSE(get_sdk("MacOSX.sdk").empty());
71 // These are expected to fall back to an available version.
72 EXPECT_FALSE(get_sdk("MacOSX9999.sdk").empty());
73 // This is expected to fail.
74 EXPECT_TRUE(get_sdk("CeciNestPasUnOS.sdk", true).empty());
77 TEST_F(HostInfoTest
, FindSDKTool
) {
78 auto find_tool
= [](std::string sdk
, llvm::StringRef tool
,
79 bool error
= false) -> llvm::StringRef
{
80 auto sdk_path_or_err
=
81 HostInfo::FindSDKTool(XcodeSDK(std::move(sdk
)), tool
);
83 EXPECT_TRUE((bool)sdk_path_or_err
);
84 return *sdk_path_or_err
;
86 EXPECT_FALSE((bool)sdk_path_or_err
);
87 llvm::consumeError(sdk_path_or_err
.takeError());
90 EXPECT_FALSE(find_tool("MacOSX.sdk", "clang").empty());
91 EXPECT_TRUE(find_tool("MacOSX.sdk", "CeciNestPasUnOutil").empty());
95 TEST(HostInfoTestInitialization
, InitTwice
) {
96 llvm::VersionTuple Version
;
98 SubsystemRAII
<FileSystem
, HostInfo
> subsystems
;
99 Version
= HostInfo::GetOSVersion();
103 SubsystemRAII
<FileSystem
, HostInfo
> subsystems
;
104 EXPECT_EQ(Version
, HostInfo::GetOSVersion());