180814287SRaphael Isemann //===-- HostInfoTest.cpp --------------------------------------------------===//
27263f1bdSPavel Labath //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67263f1bdSPavel Labath //
77263f1bdSPavel Labath //===----------------------------------------------------------------------===//
87263f1bdSPavel Labath
97263f1bdSPavel Labath #include "lldb/Host/HostInfo.h"
105dca0596SRaphael Isemann #include "TestingSupport/SubsystemRAII.h"
117d46f0e4SAdrian Prantl #include "TestingSupport/TestUtilities.h"
1246376966SJonas Devlieghere #include "lldb/Host/FileSystem.h"
1346376966SJonas Devlieghere #include "lldb/lldb-defines.h"
14d768bf99SArchibald Elliott #include "llvm/TargetParser/Host.h"
157263f1bdSPavel Labath #include "gtest/gtest.h"
167263f1bdSPavel Labath
177263f1bdSPavel Labath using namespace lldb_private;
187263f1bdSPavel Labath using namespace llvm;
197263f1bdSPavel Labath
207263f1bdSPavel Labath namespace {
217263f1bdSPavel Labath class HostInfoTest : public ::testing::Test {
225dca0596SRaphael Isemann SubsystemRAII<FileSystem, HostInfo> subsystems;
2346376966SJonas Devlieghere };
2446376966SJonas Devlieghere } // namespace
257263f1bdSPavel Labath
TEST_F(HostInfoTest,GetAugmentedArchSpec)267263f1bdSPavel Labath TEST_F(HostInfoTest, GetAugmentedArchSpec) {
277263f1bdSPavel Labath // Fully specified triple should not be changed.
287263f1bdSPavel Labath ArchSpec spec = HostInfo::GetAugmentedArchSpec("x86_64-pc-linux-gnu");
297263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getTriple(), "x86_64-pc-linux-gnu");
307263f1bdSPavel Labath
317263f1bdSPavel Labath // Same goes if we specify at least one of (os, vendor, env).
327263f1bdSPavel Labath spec = HostInfo::GetAugmentedArchSpec("x86_64-pc");
337263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getTriple(), "x86_64-pc");
347263f1bdSPavel Labath
357263f1bdSPavel Labath // But if we specify only an arch, we should fill in the rest from the host.
367263f1bdSPavel Labath spec = HostInfo::GetAugmentedArchSpec("x86_64");
377263f1bdSPavel Labath Triple triple(sys::getDefaultTargetTriple());
387263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getArch(), Triple::x86_64);
397263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getOS(), triple.getOS());
407263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getVendor(), triple.getVendor());
417263f1bdSPavel Labath EXPECT_EQ(spec.GetTriple().getEnvironment(), triple.getEnvironment());
424ebb64b9SPavel Labath
434ebb64b9SPavel Labath // Test LLDB_ARCH_DEFAULT
444ebb64b9SPavel Labath EXPECT_EQ(HostInfo::GetAugmentedArchSpec(LLDB_ARCH_DEFAULT).GetTriple(),
454ebb64b9SPavel Labath HostInfo::GetArchitecture(HostInfo::eArchKindDefault).GetTriple());
46cf3e4011SAdrian Prantl EXPECT_NE(
47cf3e4011SAdrian Prantl HostInfo::GetAugmentedArchSpec("armv7k").GetTriple().getEnvironmentName(),
48cf3e4011SAdrian Prantl "unknown");
497263f1bdSPavel Labath }
50b8ec7eeeSAaron Smith
TEST_F(HostInfoTest,GetHostname)51b8ec7eeeSAaron Smith TEST_F(HostInfoTest, GetHostname) {
52b8ec7eeeSAaron Smith // Check non-empty string input works correctly.
53b8ec7eeeSAaron Smith std::string s("abc");
54b8ec7eeeSAaron Smith EXPECT_TRUE(HostInfo::GetHostname(s));
55b8ec7eeeSAaron Smith }
5679feafa5SAdrian Prantl
5779feafa5SAdrian Prantl #if defined(__APPLE__)
TEST_F(HostInfoTest,GetXcodeSDK)5879feafa5SAdrian Prantl TEST_F(HostInfoTest, GetXcodeSDK) {
5933cbda4cSAdrian Prantl auto get_sdk = [](std::string sdk, bool error = false) -> llvm::StringRef {
60cd21c0d3SSaleem Abdulrasool auto sdk_path_or_err =
61cd21c0d3SSaleem Abdulrasool HostInfo::GetSDKRoot(HostInfo::SDKOptions{XcodeSDK(std::move(sdk))});
6233cbda4cSAdrian Prantl if (!error) {
6333cbda4cSAdrian Prantl EXPECT_TRUE((bool)sdk_path_or_err);
6433cbda4cSAdrian Prantl return *sdk_path_or_err;
6533cbda4cSAdrian Prantl }
6633cbda4cSAdrian Prantl EXPECT_FALSE((bool)sdk_path_or_err);
6733cbda4cSAdrian Prantl llvm::consumeError(sdk_path_or_err.takeError());
6833cbda4cSAdrian Prantl return {};
6933cbda4cSAdrian Prantl };
7033cbda4cSAdrian Prantl EXPECT_FALSE(get_sdk("MacOSX.sdk").empty());
7179feafa5SAdrian Prantl // These are expected to fall back to an available version.
7233cbda4cSAdrian Prantl EXPECT_FALSE(get_sdk("MacOSX9999.sdk").empty());
7379feafa5SAdrian Prantl // This is expected to fail.
7433cbda4cSAdrian Prantl EXPECT_TRUE(get_sdk("CeciNestPasUnOS.sdk", true).empty());
7579feafa5SAdrian Prantl }
76*7de43526SAdrian Prantl
TEST_F(HostInfoTest,FindSDKTool)77*7de43526SAdrian Prantl TEST_F(HostInfoTest, FindSDKTool) {
78*7de43526SAdrian Prantl auto find_tool = [](std::string sdk, llvm::StringRef tool,
79*7de43526SAdrian Prantl bool error = false) -> llvm::StringRef {
80*7de43526SAdrian Prantl auto sdk_path_or_err =
81*7de43526SAdrian Prantl HostInfo::FindSDKTool(XcodeSDK(std::move(sdk)), tool);
82*7de43526SAdrian Prantl if (!error) {
83*7de43526SAdrian Prantl EXPECT_TRUE((bool)sdk_path_or_err);
84*7de43526SAdrian Prantl return *sdk_path_or_err;
85*7de43526SAdrian Prantl }
86*7de43526SAdrian Prantl EXPECT_FALSE((bool)sdk_path_or_err);
87*7de43526SAdrian Prantl llvm::consumeError(sdk_path_or_err.takeError());
88*7de43526SAdrian Prantl return {};
89*7de43526SAdrian Prantl };
90*7de43526SAdrian Prantl EXPECT_FALSE(find_tool("MacOSX.sdk", "clang").empty());
91*7de43526SAdrian Prantl EXPECT_TRUE(find_tool("MacOSX.sdk", "CeciNestPasUnOutil").empty());
92*7de43526SAdrian Prantl }
9379feafa5SAdrian Prantl #endif
94f3f90456SVitaly Buka
TEST(HostInfoTestInitialization,InitTwice)95f3f90456SVitaly Buka TEST(HostInfoTestInitialization, InitTwice) {
96f3f90456SVitaly Buka llvm::VersionTuple Version;
97f3f90456SVitaly Buka {
98f3f90456SVitaly Buka SubsystemRAII<FileSystem, HostInfo> subsystems;
99f3f90456SVitaly Buka Version = HostInfo::GetOSVersion();
100f3f90456SVitaly Buka }
101f3f90456SVitaly Buka
102f3f90456SVitaly Buka {
103f3f90456SVitaly Buka SubsystemRAII<FileSystem, HostInfo> subsystems;
104f3f90456SVitaly Buka EXPECT_EQ(Version, HostInfo::GetOSVersion());
105f3f90456SVitaly Buka }
106f3f90456SVitaly Buka }
107