xref: /aosp_15_r20/external/cronet/base/win/windows_version_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/win/windows_version.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/file_version_info_win.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/files/file_util.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/path_service.h"
12*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
13*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker namespace win {
17*6777b538SAndroid Build Coastguard Worker 
TEST(WindowsVersion,GetVersionExAndKernelOsVersionMatch)18*6777b538SAndroid Build Coastguard Worker TEST(WindowsVersion, GetVersionExAndKernelOsVersionMatch) {
19*6777b538SAndroid Build Coastguard Worker   // If this fails, we're running in compatibility mode, or need to update the
20*6777b538SAndroid Build Coastguard Worker   // application manifest.
21*6777b538SAndroid Build Coastguard Worker   // Note: not all versions of Windows return identical build numbers e.g.
22*6777b538SAndroid Build Coastguard Worker   // 1909/19H2 kernel32.dll has build number 18362 but OS version build number
23*6777b538SAndroid Build Coastguard Worker   // 18363.
24*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::Kernel32VersionNumber().major,
25*6777b538SAndroid Build Coastguard Worker             OSInfo::GetInstance()->version_number().major);
26*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::Kernel32VersionNumber().minor,
27*6777b538SAndroid Build Coastguard Worker             OSInfo::GetInstance()->version_number().minor);
28*6777b538SAndroid Build Coastguard Worker }
29*6777b538SAndroid Build Coastguard Worker 
TEST(WindowsVersion,CheckDbgHelpVersion)30*6777b538SAndroid Build Coastguard Worker TEST(WindowsVersion, CheckDbgHelpVersion) {
31*6777b538SAndroid Build Coastguard Worker   // Make sure that dbghelp.dll is present and is a recent enough version to
32*6777b538SAndroid Build Coastguard Worker   // handle large-page PDBs. This requires dbghelp.dll from the Windows 11 SDK
33*6777b538SAndroid Build Coastguard Worker   // or later.
34*6777b538SAndroid Build Coastguard Worker   base::FilePath exe_dir;
35*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &exe_dir));
36*6777b538SAndroid Build Coastguard Worker   FilePath dbghelp_path = exe_dir.Append(FILE_PATH_LITERAL("dbghelp.dll"));
37*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(base::PathExists(dbghelp_path));
38*6777b538SAndroid Build Coastguard Worker   auto file_version =
39*6777b538SAndroid Build Coastguard Worker       FileVersionInfoWin::CreateFileVersionInfoWin(dbghelp_path);
40*6777b538SAndroid Build Coastguard Worker   ASSERT_TRUE(file_version);
41*6777b538SAndroid Build Coastguard Worker   auto version = file_version->GetFileVersion();
42*6777b538SAndroid Build Coastguard Worker   // Check against Windows 11 SDK version.
43*6777b538SAndroid Build Coastguard Worker   EXPECT_GE(version, base::Version({10, 0, 22621, 755}));
44*6777b538SAndroid Build Coastguard Worker }
45*6777b538SAndroid Build Coastguard Worker 
TEST(OSInfo,MajorMinorBuildToVersion)46*6777b538SAndroid Build Coastguard Worker TEST(OSInfo, MajorMinorBuildToVersion) {
47*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(11, 0, 0), Version::WIN11);
48*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 32767),
49*6777b538SAndroid Build Coastguard Worker             Version::WIN11_23H2);
50*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 22631),
51*6777b538SAndroid Build Coastguard Worker             Version::WIN11_23H2);
52*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 22621),
53*6777b538SAndroid Build Coastguard Worker             Version::WIN11_22H2);
54*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 22000), Version::WIN11);
55*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 21999),
56*6777b538SAndroid Build Coastguard Worker             Version::SERVER_2022);
57*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 20348),
58*6777b538SAndroid Build Coastguard Worker             Version::SERVER_2022);
59*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 20347),
60*6777b538SAndroid Build Coastguard Worker             Version::WIN10_22H2);
61*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 19045),
62*6777b538SAndroid Build Coastguard Worker             Version::WIN10_22H2);
63*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 19044),
64*6777b538SAndroid Build Coastguard Worker             Version::WIN10_21H2);
65*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 19043),
66*6777b538SAndroid Build Coastguard Worker             Version::WIN10_21H1);
67*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 19042),
68*6777b538SAndroid Build Coastguard Worker             Version::WIN10_20H2);
69*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 19041),
70*6777b538SAndroid Build Coastguard Worker             Version::WIN10_20H1);
71*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 18363),
72*6777b538SAndroid Build Coastguard Worker             Version::WIN10_19H2);
73*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 18362),
74*6777b538SAndroid Build Coastguard Worker             Version::WIN10_19H1);
75*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 17763), Version::WIN10_RS5);
76*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 17134), Version::WIN10_RS4);
77*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 16299), Version::WIN10_RS3);
78*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 15063), Version::WIN10_RS2);
79*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 14393), Version::WIN10_RS1);
80*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 10586), Version::WIN10_TH2);
81*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 10240), Version::WIN10);
82*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(10, 0, 0), Version::WIN10);
83*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(6, 3, 0), Version::WIN8_1);
84*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(6, 2, 0), Version::WIN8);
85*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(6, 1, 0), Version::WIN7);
86*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(6, 0, 0), Version::VISTA);
87*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(5, 3, 0), Version::SERVER_2003);
88*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(5, 2, 0), Version::SERVER_2003);
89*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(5, 1, 0), Version::XP);
90*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(5, 0, 0), Version::PRE_XP);
91*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(4, 0, 0), Version::PRE_XP);
92*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(3, 0, 0), Version::PRE_XP);
93*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(2, 0, 0), Version::PRE_XP);
94*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(1, 0, 0), Version::PRE_XP);
95*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(0, 0, 0), Version::PRE_XP);
96*6777b538SAndroid Build Coastguard Worker 
97*6777b538SAndroid Build Coastguard Worker #if !DCHECK_IS_ON()
98*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(12, 0, 0), Version::WIN_LAST);
99*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(9, 0, 0), Version::WIN_LAST);
100*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(8, 0, 0), Version::WIN_LAST);
101*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(7, 0, 0), Version::WIN_LAST);
102*6777b538SAndroid Build Coastguard Worker   EXPECT_EQ(OSInfo::MajorMinorBuildToVersion(6, 4, 0), Version::WIN8_1);
103*6777b538SAndroid Build Coastguard Worker #endif  // !DCHECK_IS_ON()
104*6777b538SAndroid Build Coastguard Worker }
105*6777b538SAndroid Build Coastguard Worker 
106*6777b538SAndroid Build Coastguard Worker // For more info on what processor information is defined, see:
107*6777b538SAndroid Build Coastguard Worker // http://msdn.microsoft.com/en-us/library/b0084kay.aspx
TEST(OSInfo,GetWowStatusForProcess)108*6777b538SAndroid Build Coastguard Worker TEST(OSInfo, GetWowStatusForProcess) {
109*6777b538SAndroid Build Coastguard Worker #if defined(ARCH_CPU_64_BITS)
110*6777b538SAndroid Build Coastguard Worker   EXPECT_TRUE(OSInfo::GetInstance()->IsWowDisabled());
111*6777b538SAndroid Build Coastguard Worker #elif defined(ARCH_CPU_X86)
112*6777b538SAndroid Build Coastguard Worker   if (OSInfo::GetArchitecture() == OSInfo::X86_ARCHITECTURE) {
113*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(OSInfo::GetInstance()->IsWowDisabled());
114*6777b538SAndroid Build Coastguard Worker   } else if (OSInfo::GetArchitecture() == OSInfo::X64_ARCHITECTURE) {
115*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(OSInfo::GetInstance()->IsWowX86OnAMD64());
116*6777b538SAndroid Build Coastguard Worker   } else {
117*6777b538SAndroid Build Coastguard Worker     // Currently, the only way to determine if a WOW emulation is
118*6777b538SAndroid Build Coastguard Worker     // running on an ARM64 device is via the function that the
119*6777b538SAndroid Build Coastguard Worker     // |IsWow*| helper functions rely on.  As such, it is not possible
120*6777b538SAndroid Build Coastguard Worker     // to separate out x86 running on ARM64 machines vs x86 running on
121*6777b538SAndroid Build Coastguard Worker     // other host machines.
122*6777b538SAndroid Build Coastguard Worker     EXPECT_TRUE(OSInfo::GetInstance()->IsWowX86OnARM64() ||
123*6777b538SAndroid Build Coastguard Worker                 OSInfo::GetInstance()->IsWowX86OnOther());
124*6777b538SAndroid Build Coastguard Worker   }
125*6777b538SAndroid Build Coastguard Worker #else
126*6777b538SAndroid Build Coastguard Worker   ADD_FAILURE()
127*6777b538SAndroid Build Coastguard Worker       << "This test fails when we're using a process or host machine that is "
128*6777b538SAndroid Build Coastguard Worker          "not being considered by our helper functions.  If you're seeing this "
129*6777b538SAndroid Build Coastguard Worker          "error, please add a helper function for determining WOW emulation "
130*6777b538SAndroid Build Coastguard Worker          "for your process and host machine.";
131*6777b538SAndroid Build Coastguard Worker #endif
132*6777b538SAndroid Build Coastguard Worker }
133*6777b538SAndroid Build Coastguard Worker 
134*6777b538SAndroid Build Coastguard Worker }  // namespace win
135*6777b538SAndroid Build Coastguard Worker }  // namespace base
136