1 /*
2 * Copyright 2009 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/base/gunit.h"
12 #include "webrtc/base/stringutils.h"
13 #include "webrtc/base/systeminfo.h"
14
15 #if defined(CPU_X86) || defined(CPU_ARM)
TEST(SystemInfoTest,CpuVendorNonEmpty)16 TEST(SystemInfoTest, CpuVendorNonEmpty) {
17 rtc::SystemInfo info;
18 LOG(LS_INFO) << "CpuVendor: " << info.GetCpuVendor();
19 EXPECT_FALSE(info.GetCpuVendor().empty());
20 }
21
22 // Tests Vendor identification is Intel or AMD.
23 // See Also http://en.wikipedia.org/wiki/CPUID
TEST(SystemInfoTest,CpuVendorIntelAMDARM)24 TEST(SystemInfoTest, CpuVendorIntelAMDARM) {
25 rtc::SystemInfo info;
26 #if defined(CPU_X86)
27 EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(),
28 "GenuineIntel") ||
29 rtc::string_match(info.GetCpuVendor().c_str(),
30 "AuthenticAMD"));
31 #elif defined(CPU_ARM)
32 EXPECT_TRUE(rtc::string_match(info.GetCpuVendor().c_str(), "ARM"));
33 #endif
34 }
35 #endif // defined(CPU_X86) || defined(CPU_ARM)
36
37 // Tests CpuArchitecture matches expectations.
TEST(SystemInfoTest,GetCpuArchitecture)38 TEST(SystemInfoTest, GetCpuArchitecture) {
39 rtc::SystemInfo info;
40 LOG(LS_INFO) << "CpuArchitecture: " << info.GetCpuArchitecture();
41 rtc::SystemInfo::Architecture architecture = info.GetCpuArchitecture();
42 #if defined(CPU_X86) || defined(CPU_ARM)
43 if (sizeof(intptr_t) == 8) {
44 EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X64, architecture);
45 } else if (sizeof(intptr_t) == 4) {
46 #if defined(CPU_ARM)
47 EXPECT_EQ(rtc::SystemInfo::SI_ARCH_ARM, architecture);
48 #else
49 EXPECT_EQ(rtc::SystemInfo::SI_ARCH_X86, architecture);
50 #endif
51 }
52 #endif
53 }
54
55 // Tests MachineModel is set. On Mac test machine model is known.
TEST(SystemInfoTest,MachineModelKnown)56 TEST(SystemInfoTest, MachineModelKnown) {
57 rtc::SystemInfo info;
58 EXPECT_FALSE(info.GetMachineModel().empty());
59 const char *machine_model = info.GetMachineModel().c_str();
60 LOG(LS_INFO) << "MachineModel: " << machine_model;
61 bool known = true;
62 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
63 // Full list as of May 2012. Update when new OSX based models are added.
64 known = rtc::string_match(machine_model, "MacBookPro*") ||
65 rtc::string_match(machine_model, "MacBookAir*") ||
66 rtc::string_match(machine_model, "MacBook*") ||
67 rtc::string_match(machine_model, "MacPro*") ||
68 rtc::string_match(machine_model, "Macmini*") ||
69 rtc::string_match(machine_model, "iMac*") ||
70 rtc::string_match(machine_model, "Xserve*");
71 #elif !defined(WEBRTC_IOS)
72 // All other machines return Not available.
73 known = rtc::string_match(info.GetMachineModel().c_str(),
74 "Not available");
75 #endif
76 if (!known) {
77 LOG(LS_WARNING) << "Machine Model Unknown: " << machine_model;
78 }
79 }
80
81 // Tests physical memory size.
TEST(SystemInfoTest,MemorySize)82 TEST(SystemInfoTest, MemorySize) {
83 rtc::SystemInfo info;
84 LOG(LS_INFO) << "MemorySize: " << info.GetMemorySize();
85 EXPECT_GT(info.GetMemorySize(), -1);
86 }
87
88 // Tests number of logical cpus available to the system.
TEST(SystemInfoTest,MaxCpus)89 TEST(SystemInfoTest, MaxCpus) {
90 rtc::SystemInfo info;
91 LOG(LS_INFO) << "MaxCpus: " << info.GetMaxCpus();
92 EXPECT_GT(info.GetMaxCpus(), 0);
93 }
94
95 // Tests number of logical cpus available to the process.
TEST(SystemInfoTest,CurCpus)96 TEST(SystemInfoTest, CurCpus) {
97 rtc::SystemInfo info;
98 LOG(LS_INFO) << "CurCpus: " << info.GetCurCpus();
99 EXPECT_GT(info.GetCurCpus(), 0);
100 EXPECT_LE(info.GetCurCpus(), info.GetMaxCpus());
101 }
102
103 #ifdef CPU_X86
104 // CPU family/model/stepping is only available on X86. The following tests
105 // that they are set when running on x86 CPUs. Valid Family/Model/Stepping
106 // values are non-zero on known CPUs.
107
108 // Tests Intel CPU Family identification.
TEST(SystemInfoTest,CpuFamily)109 TEST(SystemInfoTest, CpuFamily) {
110 rtc::SystemInfo info;
111 LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
112 EXPECT_GT(info.GetCpuFamily(), 0);
113 }
114
115 // Tests Intel CPU Model identification.
TEST(SystemInfoTest,CpuModel)116 TEST(SystemInfoTest, CpuModel) {
117 rtc::SystemInfo info;
118 LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
119 EXPECT_GT(info.GetCpuModel(), 0);
120 }
121
122 // Tests Intel CPU Stepping identification.
TEST(SystemInfoTest,CpuStepping)123 TEST(SystemInfoTest, CpuStepping) {
124 rtc::SystemInfo info;
125 LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
126 EXPECT_GT(info.GetCpuStepping(), 0);
127 }
128 #else // CPU_X86
129 // If not running on x86 CPU the following tests expect the functions to
130 // return 0.
TEST(SystemInfoTest,CpuFamily)131 TEST(SystemInfoTest, CpuFamily) {
132 rtc::SystemInfo info;
133 LOG(LS_INFO) << "CpuFamily: " << info.GetCpuFamily();
134 EXPECT_EQ(0, info.GetCpuFamily());
135 }
136
137 // Tests Intel CPU Model identification.
TEST(SystemInfoTest,CpuModel)138 TEST(SystemInfoTest, CpuModel) {
139 rtc::SystemInfo info;
140 LOG(LS_INFO) << "CpuModel: " << info.GetCpuModel();
141 EXPECT_EQ(0, info.GetCpuModel());
142 }
143
144 // Tests Intel CPU Stepping identification.
TEST(SystemInfoTest,CpuStepping)145 TEST(SystemInfoTest, CpuStepping) {
146 rtc::SystemInfo info;
147 LOG(LS_INFO) << "CpuStepping: " << info.GetCpuStepping();
148 EXPECT_EQ(0, info.GetCpuStepping());
149 }
150 #endif // CPU_X86
151