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

Side by Side Diff: chrome/browser/win/enumerate_modules_model_unittest.cc

Issue 2037883004: [Win] Add reporting of total number of modules loaded in browser process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 4 years, 3 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
« no previous file with comments | « chrome/browser/win/enumerate_modules_model.cc ('k') | tools/metrics/histograms/histograms.xml » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "chrome/browser/win/enumerate_modules_model.h" 5 #include "chrome/browser/win/enumerate_modules_model.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 14
15 typedef testing::Test EnumerateModulesTest; 15 typedef testing::Test EnumerateModulesTest;
16 16
17 // Set up some constants to use as default when creating the structs. 17 // Set up some constants to use as default when creating the structs.
18 static const ModuleEnumerator::ModuleType kType = 18 static const ModuleEnumerator::ModuleType kType =
19 ModuleEnumerator::LOADED_MODULE; 19 ModuleEnumerator::LOADED_MODULE;
20 20
21 static const ModuleEnumerator::ModuleStatus kStatus = 21 static const ModuleEnumerator::ModuleStatus kStatus =
22 ModuleEnumerator::NOT_MATCHED; 22 ModuleEnumerator::NOT_MATCHED;
23 23
24 static const ModuleEnumerator::RecommendedAction kAction = 24 static const ModuleEnumerator::RecommendedAction kAction =
25 ModuleEnumerator::NONE; 25 ModuleEnumerator::NONE;
26 26
27 static const ModuleEnumerator::OperatingSystem kOs =
28 ModuleEnumerator::ALL;
29
30 // This is a list of test cases to normalize. 27 // This is a list of test cases to normalize.
31 static const struct NormalizationEntryList { 28 static const struct NormalizationEntryList {
32 ModuleEnumerator::Module test_case; 29 ModuleEnumerator::Module test_case;
33 ModuleEnumerator::Module expected; 30 ModuleEnumerator::Module expected;
34 } kNormalizationTestCases[] = { 31 } kNormalizationTestCases[] = {
35 { 32 {
36 // Only path normalization needed. 33 // Only path normalization needed.
37 {kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0", 34 {kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0",
38 L"Sig", kAction}, 35 L"Sig", kAction},
39 {kType, kStatus, L"c:\\foo\\", L"bar.dll", L"Prod", L"Desc", L"1.0", 36 {kType, kStatus, L"c:\\foo\\", L"bar.dll", L"Prod", L"Desc", L"1.0",
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 const ModuleEnumerator::Module kStandardModule = 82 const ModuleEnumerator::Module kStandardModule =
86 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0", L"Sig", 83 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0", L"Sig",
87 ModuleEnumerator::NONE }; 84 ModuleEnumerator::NONE };
88 const ModuleEnumerator::Module kStandardModuleNoDescription = 85 const ModuleEnumerator::Module kStandardModuleNoDescription =
89 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"", L"1.0", L"Sig", 86 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"", L"1.0", L"Sig",
90 ModuleEnumerator::NONE }; 87 ModuleEnumerator::NONE };
91 const ModuleEnumerator::Module kStandardModuleNoSignature = 88 const ModuleEnumerator::Module kStandardModuleNoSignature =
92 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0", L"", 89 { kType, kStatus, L"c:\\foo\\bar.dll", L"", L"Prod", L"Desc", L"1.0", L"",
93 ModuleEnumerator::NONE }; 90 ModuleEnumerator::NONE };
94 91
95 // Name, location, description and signature are compared by hashing.
96 static const char kMatchName[] = "88e8c9e0"; // "bar.dll".
97 static const char kMatchLocation[] = "e6ca7b1c"; // "c:\\foo\\".
98 static const char kNoMatchLocation[] = "c:\\foobar\\";
99 static const char kMatchDesc[] = "5c4419a6"; // "Desc".
100 static const char kVersionHigh[] = "2.0";
101 static const char kVersionLow[] = "0.5";
102 static const char kMatchSignature[] = "7bfd87e1"; // "Sig".
103 static const char kEmpty[] = "";
104
105 const struct MatchingEntryList {
106 ModuleEnumerator::ModuleStatus expected_result;
107 ModuleEnumerator::Module test_case;
108 ModuleEnumerator::BlacklistEntry blacklist;
109 } kMatchineEntryList[] = {
110 // Each BlacklistEntry is:
111 // Filename, location, desc_or_signer, version from, version to, help_tip.
112
113 { // Matches: Name (location doesn't match) => Not enough for a match.
114 ModuleEnumerator::NOT_MATCHED,
115 kStandardModule,
116 { kMatchName, kNoMatchLocation, kEmpty, kEmpty, kEmpty, kOs,
117 ModuleEnumerator::SEE_LINK }
118 }, { // Matches: Name (location not given) => Suspected match.
119 ModuleEnumerator::SUSPECTED_BAD,
120 kStandardModule,
121 { kMatchName, kEmpty, kEmpty, kEmpty, kEmpty, kOs,
122 ModuleEnumerator::SEE_LINK }
123 }, { // Matches: Name, not version (location not given) => Not a match.
124 ModuleEnumerator::NOT_MATCHED,
125 kStandardModule,
126 { kMatchName, kEmpty, kEmpty, kVersionHigh, kVersionHigh, kOs,
127 ModuleEnumerator::SEE_LINK }
128 }, { // Matches: Name, location => Suspected match.
129 ModuleEnumerator::SUSPECTED_BAD,
130 kStandardModule,
131 { kMatchName, kMatchLocation, kEmpty, kEmpty, kEmpty, kOs,
132 ModuleEnumerator::SEE_LINK }
133 }, { // Matches: Name, location, (description not given) => Confirmed match.
134 ModuleEnumerator::CONFIRMED_BAD,
135 kStandardModuleNoDescription, // Note: No description.
136 { kMatchName, kMatchLocation, kEmpty, kEmpty, kEmpty, kOs,
137 ModuleEnumerator::SEE_LINK }
138 }, { // Matches: Name, location, (signature not given) => Confirmed match.
139 ModuleEnumerator::CONFIRMED_BAD,
140 kStandardModuleNoSignature, // Note: No signature.
141 { kMatchName, kMatchLocation, kEmpty, kEmpty, kEmpty, kOs,
142 ModuleEnumerator::SEE_LINK }
143 }, { // Matches: Name, location (not version) => Not a match.
144 ModuleEnumerator::NOT_MATCHED,
145 kStandardModule,
146 { kMatchName, kMatchLocation, kEmpty, kVersionHigh, kVersionLow, kOs,
147 ModuleEnumerator::SEE_LINK }
148 }, { // Matches: Name, location, signature => Confirmed match.
149 ModuleEnumerator::CONFIRMED_BAD,
150 kStandardModule,
151 { kMatchName, kMatchLocation, kMatchSignature, kEmpty, kEmpty, kOs,
152 ModuleEnumerator::SEE_LINK }
153 }, { // Matches: Name, location, signature (not version) => No match.
154 ModuleEnumerator::NOT_MATCHED,
155 kStandardModule,
156 { kMatchName, kMatchLocation, kMatchSignature,
157 kVersionLow, kVersionLow, kOs, ModuleEnumerator::SEE_LINK }
158 }, { // Matches: Name, location, description => Confirmed match.
159 ModuleEnumerator::CONFIRMED_BAD,
160 kStandardModule,
161 { kMatchName, kMatchLocation, kMatchDesc, kEmpty, kEmpty, kOs,
162 ModuleEnumerator::SEE_LINK }
163 }, { // Matches: Name, location, description (not version) => No match.
164 ModuleEnumerator::NOT_MATCHED,
165 kStandardModule,
166 { kMatchName, kMatchLocation, kMatchDesc,
167 kVersionHigh, kVersionHigh, kOs, ModuleEnumerator::SEE_LINK }
168 }, { // Matches: Name, location, signature, version => Confirmed match.
169 ModuleEnumerator::CONFIRMED_BAD,
170 kStandardModule,
171 { kMatchName, kMatchLocation, kMatchSignature,
172 kVersionLow, kVersionHigh, kOs, ModuleEnumerator::SEE_LINK }
173 }, { // Matches: Name, location, signature, version (lower) => Confirmed.
174 ModuleEnumerator::CONFIRMED_BAD,
175 kStandardModule,
176 { kMatchName, kMatchLocation, kMatchSignature,
177 kVersionLow, kEmpty, kOs, ModuleEnumerator::SEE_LINK }
178 }, { // Matches: Name, location, signature, version (upper) => Confirmed.
179 ModuleEnumerator::CONFIRMED_BAD,
180 kStandardModule,
181 { kMatchName, kMatchLocation, kMatchSignature,
182 kEmpty, kVersionHigh, kOs, ModuleEnumerator::SEE_LINK }
183 }, { // Matches: Name, Location, Version lower is inclusive => Confirmed.
184 ModuleEnumerator::CONFIRMED_BAD,
185 kStandardModule,
186 { kMatchName, kMatchLocation, kMatchSignature,
187 "1.0", "2.0", kOs, ModuleEnumerator::SEE_LINK }
188 }, { // Matches: Name, Location, Version higher is exclusive => No match.
189 ModuleEnumerator::NOT_MATCHED,
190 kStandardModule,
191 { kMatchName, kMatchLocation, kEmpty,
192 "0.0", "1.0", kOs, ModuleEnumerator::SEE_LINK }
193 }, { // All empty fields doesn't produce a match.
194 ModuleEnumerator::NOT_MATCHED,
195 { kType, kStatus, L"", L"", L"", L"", L"", L"", ModuleEnumerator::NONE },
196 { "a.dll", "", "", "", "", kOs, ModuleEnumerator::SEE_LINK }
197 },
198 };
199
200 TEST_F(EnumerateModulesTest, MatchFunction) {
201 for (size_t i = 0; i < arraysize(kMatchineEntryList); ++i) {
202 ModuleEnumerator::Module test = kMatchineEntryList[i].test_case;
203 ModuleEnumerator::NormalizeModule(&test);
204 ModuleEnumerator::BlacklistEntry blacklist =
205 kMatchineEntryList[i].blacklist;
206
207 SCOPED_TRACE("Test case no " + base::IntToString(i) +
208 ": '" + base::UTF16ToASCII(test.name) + "'");
209 EXPECT_EQ(kMatchineEntryList[i].expected_result,
210 ModuleEnumerator::Match(test, blacklist));
211 }
212 }
213
214 const struct CollapsePathList { 92 const struct CollapsePathList {
215 base::string16 expected_result; 93 base::string16 expected_result;
216 base::string16 test_case; 94 base::string16 test_case;
217 } kCollapsePathList[] = { 95 } kCollapsePathList[] = {
218 // Negative testing (should not collapse this path). 96 // Negative testing (should not collapse this path).
219 { base::ASCIIToUTF16("c:\\a\\a.dll"), base::ASCIIToUTF16("c:\\a\\a.dll") }, 97 { base::ASCIIToUTF16("c:\\a\\a.dll"), base::ASCIIToUTF16("c:\\a\\a.dll") },
220 // These two are to test that we select the maximum collapsed path. 98 // These two are to test that we select the maximum collapsed path.
221 { base::ASCIIToUTF16("%foo%\\a.dll"), base::ASCIIToUTF16("c:\\foo\\a.dll") }, 99 { base::ASCIIToUTF16("%foo%\\a.dll"), base::ASCIIToUTF16("c:\\foo\\a.dll") },
222 { base::ASCIIToUTF16("%x%\\a.dll"), 100 { base::ASCIIToUTF16("%x%\\a.dll"),
223 base::ASCIIToUTF16("c:\\foo\\bar\\a.dll") }, 101 base::ASCIIToUTF16("c:\\foo\\bar\\a.dll") },
224 }; 102 };
225 103
226 TEST_F(EnumerateModulesTest, CollapsePath) { 104 TEST_F(EnumerateModulesTest, CollapsePath) {
227 scoped_refptr<ModuleEnumerator> module_enumerator(new ModuleEnumerator(NULL)); 105 ModuleEnumerator module_enumerator(nullptr);
228 module_enumerator->path_mapping_.clear(); 106 module_enumerator.path_mapping_.clear();
229 module_enumerator->path_mapping_.push_back( 107 module_enumerator.path_mapping_.push_back(
230 std::make_pair(L"c:\\foo\\", L"%foo%")); 108 std::make_pair(L"c:\\foo\\", L"%foo%"));
231 module_enumerator->path_mapping_.push_back( 109 module_enumerator.path_mapping_.push_back(
232 std::make_pair(L"c:\\foo\\bar\\", L"%x%")); 110 std::make_pair(L"c:\\foo\\bar\\", L"%x%"));
233 111
234 for (size_t i = 0; i < arraysize(kCollapsePathList); ++i) { 112 for (size_t i = 0; i < arraysize(kCollapsePathList); ++i) {
235 ModuleEnumerator::Module module; 113 ModuleEnumerator::Module module;
236 module.location = kCollapsePathList[i].test_case; 114 module.location = kCollapsePathList[i].test_case;
237 module_enumerator->CollapsePath(&module); 115 module_enumerator.CollapsePath(&module);
238 116
239 SCOPED_TRACE("Test case no " + base::IntToString(i) + ": '" + 117 SCOPED_TRACE("Test case no " + base::IntToString(i) + ": '" +
240 base::UTF16ToASCII(kCollapsePathList[i].expected_result) + 118 base::UTF16ToASCII(kCollapsePathList[i].expected_result) +
241 "'"); 119 "'");
242 EXPECT_EQ(kCollapsePathList[i].expected_result, module.location); 120 EXPECT_EQ(kCollapsePathList[i].expected_result, module.location);
243 } 121 }
244 } 122 }
OLDNEW
« no previous file with comments | « chrome/browser/win/enumerate_modules_model.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698