1 //===-- HostInfoTest.cpp --------------------------------------------------===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8
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/Support/Host.h"
15 #include "gtest/gtest.h"
16
17 using namespace lldb_private;
18 using namespace llvm;
19
20 namespace {
21 class HostInfoTest : public ::testing::Test {
22 SubsystemRAII<FileSystem, HostInfo> subsystems;
23 };
24 } // namespace
25
TEST_F(HostInfoTest,GetAugmentedArchSpec)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");
30
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");
34
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());
42
43 // Test LLDB_ARCH_DEFAULT
44 EXPECT_EQ(HostInfo::GetAugmentedArchSpec(LLDB_ARCH_DEFAULT).GetTriple(),
45 HostInfo::GetArchitecture(HostInfo::eArchKindDefault).GetTriple());
46 EXPECT_NE(
47 HostInfo::GetAugmentedArchSpec("armv7k").GetTriple().getEnvironmentName(),
48 "unknown");
49 }
50
TEST_F(HostInfoTest,GetHostname)51 TEST_F(HostInfoTest, GetHostname) {
52 // Check non-empty string input works correctly.
53 std::string s("abc");
54 EXPECT_TRUE(HostInfo::GetHostname(s));
55 }
56
57 #if defined(__APPLE__)
TEST_F(HostInfoTest,GetXcodeSDK)58 TEST_F(HostInfoTest, GetXcodeSDK) {
59 EXPECT_FALSE(HostInfo::GetXcodeSDKPath(XcodeSDK("MacOSX.sdk")).empty());
60 // These are expected to fall back to an available version.
61 EXPECT_FALSE(HostInfo::GetXcodeSDKPath(XcodeSDK("MacOSX9999.sdk")).empty());
62 // This is expected to fail.
63 EXPECT_TRUE(HostInfo::GetXcodeSDKPath(XcodeSDK("CeciNestPasUnOS.sdk")).empty());
64 }
65 #endif
66
TEST(HostInfoTestInitialization,InitTwice)67 TEST(HostInfoTestInitialization, InitTwice) {
68 llvm::VersionTuple Version;
69 {
70 SubsystemRAII<FileSystem, HostInfo> subsystems;
71 Version = HostInfo::GetOSVersion();
72 }
73
74 {
75 SubsystemRAII<FileSystem, HostInfo> subsystems;
76 EXPECT_EQ(Version, HostInfo::GetOSVersion());
77 }
78 }
79