Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: base/win/pe_image_unittest.cc

Issue 10408084: Lump client and server versions of Windows together. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Also do away with Server 2003 Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | base/win/windows_version.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains unit tests for PEImage. 5 // This file contains unit tests for PEImage.
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "base/win/pe_image.h" 8 #include "base/win/pe_image.h"
9 #include "base/win/windows_version.h" 9 #include "base/win/windows_version.h"
10 10
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 PIMAGE_THUNK_DATA name_table, 76 PIMAGE_THUNK_DATA name_table,
77 PIMAGE_THUNK_DATA iat, 77 PIMAGE_THUNK_DATA iat,
78 PIMAGE_THUNK_DATA bound_iat, 78 PIMAGE_THUNK_DATA bound_iat,
79 PIMAGE_THUNK_DATA unload_iat, 79 PIMAGE_THUNK_DATA unload_iat,
80 PVOID cookie) { 80 PVOID cookie) {
81 int* count = reinterpret_cast<int*>(cookie); 81 int* count = reinterpret_cast<int*>(cookie);
82 (*count)++; 82 (*count)++;
83 return true; 83 return true;
84 } 84 }
85 85
86 // Identifiers for the set of supported expectations.
87 enum ExpectationSet {
88 WIN_2K_SET,
89 WIN_XP_SET,
90 WIN_VISTA_SET,
91 WIN_7_SET,
92 WIN_8_SET,
93 UNSUPPORTED_SET,
94 };
95
86 // We'll be using some known values for the tests. 96 // We'll be using some known values for the tests.
87 enum Value { 97 enum Value {
88 sections = 0, 98 sections = 0,
89 imports_dlls, 99 imports_dlls,
90 delay_dlls, 100 delay_dlls,
91 exports, 101 exports,
92 imports, 102 imports,
93 delay_imports, 103 delay_imports,
94 relocs 104 relocs
95 }; 105 };
96 106
107 ExpectationSet GetExpectationSet(DWORD os) {
108 if (os == 50)
109 return WIN_2K_SET;
110 if (os == 51)
111 return WIN_XP_SET;
112 if (os == 60)
113 return WIN_VISTA_SET;
114 if (os == 61)
115 return WIN_7_SET;
116 if (os >= 62)
117 return WIN_8_SET;
118 return UNSUPPORTED_SET;
119 }
120
97 // Retrieves the expected value from advapi32.dll based on the OS. 121 // Retrieves the expected value from advapi32.dll based on the OS.
98 int GetExpectedValue(Value value, DWORD os) { 122 int GetExpectedValue(Value value, DWORD os) {
99 const int xp_delay_dlls = 2; 123 const int xp_delay_dlls = 2;
100 const int xp_exports = 675; 124 const int xp_exports = 675;
101 const int xp_imports = 422; 125 const int xp_imports = 422;
102 const int xp_delay_imports = 8; 126 const int xp_delay_imports = 8;
103 const int xp_relocs = 9180; 127 const int xp_relocs = 9180;
104 const int vista_delay_dlls = 4; 128 const int vista_delay_dlls = 4;
105 const int vista_exports = 799; 129 const int vista_exports = 799;
106 const int vista_imports = 476; 130 const int vista_imports = 476;
(...skipping 29 matching lines...) Expand all
136 {4, 4, 4, 4, win8_sections}, 160 {4, 4, 4, 4, win8_sections},
137 {3, 3, 3, 13, win8_import_dlls}, 161 {3, 3, 3, 13, win8_import_dlls},
138 {w2k_delay_dlls, xp_delay_dlls, vista_delay_dlls, win7_delay_dlls, 162 {w2k_delay_dlls, xp_delay_dlls, vista_delay_dlls, win7_delay_dlls,
139 win8_delay_dlls}, 163 win8_delay_dlls},
140 {w2k_exports, xp_exports, vista_exports, win7_exports, win8_exports}, 164 {w2k_exports, xp_exports, vista_exports, win7_exports, win8_exports},
141 {w2k_imports, xp_imports, vista_imports, win7_imports, win8_imports}, 165 {w2k_imports, xp_imports, vista_imports, win7_imports, win8_imports},
142 {w2k_delay_imports, xp_delay_imports, 166 {w2k_delay_imports, xp_delay_imports,
143 vista_delay_imports, win7_delay_imports, win8_delay_imports}, 167 vista_delay_imports, win7_delay_imports, win8_delay_imports},
144 {w2k_relocs, xp_relocs, vista_relocs, win7_relocs, win8_relocs} 168 {w2k_relocs, xp_relocs, vista_relocs, win7_relocs, win8_relocs}
145 }; 169 };
170 COMPILE_ASSERT(arraysize(expected[0]) == UNSUPPORTED_SET,
171 expected_value_set_mismatch);
146 172
147 if (value > relocs) 173 if (value > relocs)
148 return 0; 174 return 0;
149 if (50 == os) 175 ExpectationSet expected_set = GetExpectationSet(os);
150 os = 0; // 5.0 176 if (expected_set >= arraysize(expected)) {
151 else if (51 == os || 52 == os) 177 // This should never happen. Log a failure if it does.
152 os = 1; 178 EXPECT_NE(UNSUPPORTED_SET, expected_set);
153 else if (os == 60) 179 expected_set = WIN_2K_SET;
154 os = 2; // 6.x 180 }
155 else if (os == 61)
156 os = 3;
157 else if (os >= 62)
158 os = 4;
159 else
160 return 0;
161 181
162 return expected[value][os]; 182 return expected[value][expected_set];
163 } 183 }
164 184
165 // Tests that we are able to enumerate stuff from a PE file, and that 185 // Tests that we are able to enumerate stuff from a PE file, and that
166 // the actual number of items found is within the expected range. 186 // the actual number of items found is within the expected range.
167 TEST(PEImageTest, EnumeratesPE) { 187 TEST(PEImageTest, EnumeratesPE) {
168 // Windows Server 2003 is not supported as a test environment for this test.
169 if (base::win::GetVersion() == base::win::VERSION_SERVER_2003)
170 return;
171 HMODULE module = LoadLibrary(L"advapi32.dll"); 188 HMODULE module = LoadLibrary(L"advapi32.dll");
172 ASSERT_TRUE(NULL != module); 189 ASSERT_TRUE(NULL != module);
173 190
174 PEImage pe(module); 191 PEImage pe(module);
175 int count = 0; 192 int count = 0;
176 EXPECT_TRUE(pe.VerifyMagic()); 193 EXPECT_TRUE(pe.VerifyMagic());
177 194
178 DWORD os = pe.GetNTHeaders()->OptionalHeader.MajorOperatingSystemVersion; 195 DWORD os = pe.GetNTHeaders()->OptionalHeader.MajorOperatingSystemVersion;
179 os = os * 10 + pe.GetNTHeaders()->OptionalHeader.MinorOperatingSystemVersion; 196 os = os * 10 + pe.GetNTHeaders()->OptionalHeader.MinorOperatingSystemVersion;
180 197
198 // Skip this test for unsupported OS versions.
199 if (GetExpectationSet(os) == UNSUPPORTED_SET)
200 return;
201
181 pe.EnumSections(SectionsCallback, &count); 202 pe.EnumSections(SectionsCallback, &count);
182 EXPECT_EQ(GetExpectedValue(sections, os), count); 203 EXPECT_EQ(GetExpectedValue(sections, os), count);
183 204
184 count = 0; 205 count = 0;
185 pe.EnumImportChunks(ImportChunksCallback, &count); 206 pe.EnumImportChunks(ImportChunksCallback, &count);
186 EXPECT_EQ(GetExpectedValue(imports_dlls, os), count); 207 EXPECT_EQ(GetExpectedValue(imports_dlls, os), count);
187 208
188 count = 0; 209 count = 0;
189 pe.EnumDelayImportChunks(DelayImportChunksCallback, &count); 210 pe.EnumDelayImportChunks(DelayImportChunksCallback, &count);
190 EXPECT_EQ(GetExpectedValue(delay_dlls, os), count); 211 EXPECT_EQ(GetExpectedValue(delay_dlls, os), count);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 FARPROC address2 = pe.GetProcAddress(reinterpret_cast<char*>(ordinal)); 247 FARPROC address2 = pe.GetProcAddress(reinterpret_cast<char*>(ordinal));
227 EXPECT_TRUE(address1 != NULL); 248 EXPECT_TRUE(address1 != NULL);
228 EXPECT_TRUE(address2 != NULL); 249 EXPECT_TRUE(address2 != NULL);
229 EXPECT_TRUE(address1 == address2); 250 EXPECT_TRUE(address1 == address2);
230 251
231 FreeLibrary(module); 252 FreeLibrary(module);
232 } 253 }
233 254
234 } // namespace win 255 } // namespace win
235 } // namespace base 256 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | base/win/windows_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698