// Copyright 2017 The Crashpad Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "snapshot/linux/system_snapshot_linux.h" #include #include #include #include "build/build_config.h" #include "gtest/gtest.h" #include "snapshot/linux/process_reader_linux.h" #include "test/errors.h" #include "test/linux/fake_ptrace_connection.h" namespace crashpad { namespace test { namespace { TEST(SystemSnapshotLinux, Basic) { FakePtraceConnection connection; ASSERT_TRUE(connection.Initialize(getpid())); ProcessReaderLinux process_reader; ASSERT_TRUE(process_reader.Initialize(&connection)); timeval snapshot_time; ASSERT_EQ(gettimeofday(&snapshot_time, nullptr), 0) << ErrnoMessage("gettimeofday"); internal::SystemSnapshotLinux system; system.Initialize(&process_reader, &snapshot_time); EXPECT_GT(system.CPUCount(), 0u); uint64_t current_hz, max_hz; system.CPUFrequency(¤t_hz, &max_hz); EXPECT_GE(max_hz, current_hz); int major, minor, bugfix; std::string build; system.OSVersion(&major, &minor, &bugfix, &build); EXPECT_GE(major, 3); EXPECT_GE(minor, 0); EXPECT_GE(bugfix, 0); EXPECT_FALSE(build.empty()); EXPECT_FALSE(system.OSVersionFull().empty()); // No expectations; just make sure these can be called successfully. system.CPURevision(); system.NXEnabled(); #if defined(OS_ANDROID) EXPECT_FALSE(system.MachineDescription().empty()); #else system.MachineDescription(); #endif // OS_ANDROID #if defined(ARCH_CPU_X86_FAMILY) system.CPUX86Signature(); system.CPUX86Features(); system.CPUX86ExtendedFeatures(); system.CPUX86Leaf7Features(); EXPECT_PRED1( [](std::string vendor) { return vendor == "GenuineIntel" || vendor == "AuthenticAMD" || vendor == "HygonGenuine"; }, system.CPUVendor()); EXPECT_TRUE(system.CPUX86SupportsDAZ()); #endif // ARCH_CPU_X86_FAMILY } } // namespace } // namespace test } // namespace crashpad