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

Side by Side Diff: chrome/installer/util/installation_validator_unittest.cc

Issue 2034393004: Allow multiple logging::LogMessage{Handler,Listener}s Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use ReadWriteLock, add comments Created 4 years, 4 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
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 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 app_cmd.set_is_auto_run_on_os_upgrade(true); 223 app_cmd.set_is_auto_run_on_os_upgrade(true);
224 commands_.Set(installer::kCmdOnOsUpgrade, app_cmd); 224 commands_.Set(installer::kCmdOnOsUpgrade, app_cmd);
225 } 225 }
226 226
227 } // namespace 227 } // namespace
228 228
229 // Fixture for testing the InstallationValidator. Errors logged by the 229 // Fixture for testing the InstallationValidator. Errors logged by the
230 // validator are sent to an optional mock recipient (see 230 // validator are sent to an optional mock recipient (see
231 // set_validation_error_recipient) upon which expectations can be placed. 231 // set_validation_error_recipient) upon which expectations can be placed.
232 class InstallationValidatorTest 232 class InstallationValidatorTest
233 : public testing::TestWithParam<InstallationValidator::InstallationType> { 233 : public testing::TestWithParam<InstallationValidator::InstallationType>,
234 logging::LogMessageHandler {
234 public: 235 public:
235 236
236 // These shouldn't need to be public, but there seems to be some interaction 237 // These shouldn't need to be public, but there seems to be some interaction
237 // with parameterized tests that requires it. 238 // with parameterized tests that requires it.
238 static void SetUpTestCase(); 239 static void SetUpTestCase();
239 static void TearDownTestCase(); 240 static void TearDownTestCase();
240 241
241 // Returns the multi channel modifiers for a given installation type. 242 // Returns the multi channel modifiers for a given installation type.
242 static int GetChannelModifiers(InstallationValidator::InstallationType type); 243 static int GetChannelModifiers(InstallationValidator::InstallationType type);
243 244
244 protected: 245 protected:
245 typedef std::map<InstallationValidator::InstallationType, int> 246 typedef std::map<InstallationValidator::InstallationType, int>
246 InstallationTypeToModifiers; 247 InstallationTypeToModifiers;
247 248
248 class ValidationErrorRecipient { 249 class ValidationErrorRecipient {
249 public: 250 public:
250 virtual ~ValidationErrorRecipient() { } 251 virtual ~ValidationErrorRecipient() { }
251 virtual void ReceiveValidationError(const char* file, 252 virtual void ReceiveValidationError(const char* file,
252 int line, 253 int line,
253 const char* message) = 0; 254 const char* message) = 0;
254 }; 255 };
255 class MockValidationErrorRecipient : public ValidationErrorRecipient { 256 class MockValidationErrorRecipient : public ValidationErrorRecipient {
256 public: 257 public:
257 MOCK_METHOD3(ReceiveValidationError, void(const char* file, 258 MOCK_METHOD3(ReceiveValidationError, void(const char* file,
258 int line, 259 int line,
259 const char* message)); 260 const char* message));
260 }; 261 };
261 262
262 protected: 263 protected:
263 static bool HandleLogMessage(int severity, 264 // logging::LogMessageHandler
264 const char* file, 265 bool OnMessage(int severity,
265 int line, 266 const char* file,
266 size_t message_start, 267 int line,
267 const std::string& str); 268 size_t message_start,
269 const std::string& str) override;
268 static void set_validation_error_recipient( 270 static void set_validation_error_recipient(
269 ValidationErrorRecipient* recipient); 271 ValidationErrorRecipient* recipient);
270 static void MakeProductState( 272 static void MakeProductState(
271 BrowserDistribution::Type prod_type, 273 BrowserDistribution::Type prod_type,
272 InstallationValidator::InstallationType inst_type, 274 InstallationValidator::InstallationType inst_type,
273 Level install_level, 275 Level install_level,
274 Channel channel, 276 Channel channel,
275 Vehicle vehicle, 277 Vehicle vehicle,
276 FakeProductState* state); 278 FakeProductState* state);
277 static void MakeMachineState( 279 static void MakeMachineState(
278 InstallationValidator::InstallationType inst_type, 280 InstallationValidator::InstallationType inst_type,
279 Level install_level, 281 Level install_level,
280 Channel channel, 282 Channel channel,
281 Vehicle vehicle, 283 Vehicle vehicle,
282 FakeInstallationState* state); 284 FakeInstallationState* state);
283 void TearDown() override; 285 void TearDown() override;
284 286
285 static logging::LogMessageHandlerFunction old_log_message_handler_;
286 static ValidationErrorRecipient* validation_error_recipient_; 287 static ValidationErrorRecipient* validation_error_recipient_;
287 static InstallationTypeToModifiers* type_to_modifiers_; 288 static InstallationTypeToModifiers* type_to_modifiers_;
288 }; 289 };
289 290
290 // static 291 // static
291 logging::LogMessageHandlerFunction
292 InstallationValidatorTest::old_log_message_handler_ = NULL;
293
294 // static
295 InstallationValidatorTest::ValidationErrorRecipient* 292 InstallationValidatorTest::ValidationErrorRecipient*
296 InstallationValidatorTest::validation_error_recipient_ = NULL; 293 InstallationValidatorTest::validation_error_recipient_ = NULL;
297 294
298 // static 295 // static
299 InstallationValidatorTest::InstallationTypeToModifiers* 296 InstallationValidatorTest::InstallationTypeToModifiers*
300 InstallationValidatorTest::type_to_modifiers_ = NULL; 297 InstallationValidatorTest::type_to_modifiers_ = NULL;
301 298
302 // static 299 // static
303 int InstallationValidatorTest::GetChannelModifiers( 300 int InstallationValidatorTest::GetChannelModifiers(
304 InstallationValidator::InstallationType type) { 301 InstallationValidator::InstallationType type) {
305 DCHECK(type_to_modifiers_); 302 DCHECK(type_to_modifiers_);
306 DCHECK(type_to_modifiers_->find(type) != type_to_modifiers_->end()); 303 DCHECK(type_to_modifiers_->find(type) != type_to_modifiers_->end());
307 304
308 return (*type_to_modifiers_)[type]; 305 return (*type_to_modifiers_)[type];
309 } 306 }
310 307
311 // static 308 // static
312 void InstallationValidatorTest::SetUpTestCase() { 309 void InstallationValidatorTest::SetUpTestCase() {
313 DCHECK(type_to_modifiers_ == NULL); 310 DCHECK(type_to_modifiers_ == NULL);
314 old_log_message_handler_ = logging::GetLogMessageHandler();
315 logging::SetLogMessageHandler(&HandleLogMessage);
316 311
317 type_to_modifiers_ = new InstallationTypeToModifiers(); 312 type_to_modifiers_ = new InstallationTypeToModifiers();
318 InstallationTypeToModifiers& ttm = *type_to_modifiers_; 313 InstallationTypeToModifiers& ttm = *type_to_modifiers_;
319 ttm[InstallationValidator::NO_PRODUCTS] = 0; 314 ttm[InstallationValidator::NO_PRODUCTS] = 0;
320 ttm[InstallationValidator::CHROME_SINGLE] = 0; 315 ttm[InstallationValidator::CHROME_SINGLE] = 0;
321 ttm[InstallationValidator::CHROME_MULTI] = CM_MULTI | CM_CHROME; 316 ttm[InstallationValidator::CHROME_MULTI] = CM_MULTI | CM_CHROME;
322 ttm[InstallationValidator::CHROME_FRAME_SINGLE] = 0; 317 ttm[InstallationValidator::CHROME_FRAME_SINGLE] = 0;
323 ttm[InstallationValidator::CHROME_FRAME_SINGLE_CHROME_SINGLE] = 0; 318 ttm[InstallationValidator::CHROME_FRAME_SINGLE_CHROME_SINGLE] = 0;
324 ttm[InstallationValidator::CHROME_FRAME_SINGLE_CHROME_MULTI] = 319 ttm[InstallationValidator::CHROME_FRAME_SINGLE_CHROME_MULTI] =
325 CM_MULTI | CM_CHROME; 320 CM_MULTI | CM_CHROME;
326 ttm[InstallationValidator::CHROME_FRAME_MULTI] = CM_MULTI | CM_CHROME_FRAME; 321 ttm[InstallationValidator::CHROME_FRAME_MULTI] = CM_MULTI | CM_CHROME_FRAME;
327 ttm[InstallationValidator::CHROME_FRAME_MULTI_CHROME_MULTI] = 322 ttm[InstallationValidator::CHROME_FRAME_MULTI_CHROME_MULTI] =
328 CM_MULTI | CM_CHROME_FRAME | CM_CHROME; 323 CM_MULTI | CM_CHROME_FRAME | CM_CHROME;
329 } 324 }
330 325
331 // static 326 // static
332 void InstallationValidatorTest::TearDownTestCase() { 327 void InstallationValidatorTest::TearDownTestCase() {
333 logging::SetLogMessageHandler(old_log_message_handler_);
334 old_log_message_handler_ = NULL;
335
336 delete type_to_modifiers_; 328 delete type_to_modifiers_;
337 type_to_modifiers_ = NULL; 329 type_to_modifiers_ = NULL;
338 } 330 }
339 331
340 // static 332 bool InstallationValidatorTest::OnMessage(int severity,
341 bool InstallationValidatorTest::HandleLogMessage(int severity, 333 const char* file,
342 const char* file, 334 int line,
343 int line, 335 size_t message_start,
344 size_t message_start, 336 const std::string& str) {
345 const std::string& str) {
346 // All validation failures result in LOG(ERROR) 337 // All validation failures result in LOG(ERROR)
347 if (severity == logging::LOG_ERROR && !str.empty()) { 338 if (severity == logging::LOG_ERROR && !str.empty()) {
348 // Remove the trailing newline, if present. 339 // Remove the trailing newline, if present.
349 size_t message_length = str.size() - message_start; 340 size_t message_length = str.size() - message_start;
350 if (*str.rbegin() == '\n') 341 if (*str.rbegin() == '\n')
351 --message_length; 342 --message_length;
352 if (validation_error_recipient_ != NULL) { 343 if (validation_error_recipient_ != NULL) {
353 validation_error_recipient_->ReceiveValidationError( 344 validation_error_recipient_->ReceiveValidationError(
354 file, line, str.substr(message_start, message_length).c_str()); 345 file, line, str.substr(message_start, message_length).c_str());
355 } else { 346 } else {
356 // Fail the test if an error wasn't handled. 347 // Fail the test if an error wasn't handled.
357 ADD_FAILURE_AT(file, line) 348 ADD_FAILURE_AT(file, line)
358 << base::StringPiece(str.c_str() + message_start, message_length); 349 << base::StringPiece(str.c_str() + message_start, message_length);
359 } 350 }
360 return true; 351 return true;
361 } 352 }
362 353
363 if (old_log_message_handler_ != NULL)
364 return (old_log_message_handler_)(severity, file, line, message_start, str);
365
366 return false; 354 return false;
367 } 355 }
368 356
369 // static 357 // static
370 void InstallationValidatorTest::set_validation_error_recipient( 358 void InstallationValidatorTest::set_validation_error_recipient(
371 ValidationErrorRecipient* recipient) { 359 ValidationErrorRecipient* recipient) {
372 validation_error_recipient_ = recipient; 360 validation_error_recipient_ = recipient;
373 } 361 }
374 362
375 // static 363 // static
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 AllValidInstallations, 470 AllValidInstallations,
483 InstallationValidatorTest, 471 InstallationValidatorTest,
484 Values(InstallationValidator::NO_PRODUCTS, 472 Values(InstallationValidator::NO_PRODUCTS,
485 InstallationValidator::CHROME_SINGLE, 473 InstallationValidator::CHROME_SINGLE,
486 InstallationValidator::CHROME_MULTI, 474 InstallationValidator::CHROME_MULTI,
487 InstallationValidator::CHROME_FRAME_SINGLE, 475 InstallationValidator::CHROME_FRAME_SINGLE,
488 InstallationValidator::CHROME_FRAME_SINGLE_CHROME_SINGLE, 476 InstallationValidator::CHROME_FRAME_SINGLE_CHROME_SINGLE,
489 InstallationValidator::CHROME_FRAME_SINGLE_CHROME_MULTI, 477 InstallationValidator::CHROME_FRAME_SINGLE_CHROME_MULTI,
490 InstallationValidator::CHROME_FRAME_MULTI, 478 InstallationValidator::CHROME_FRAME_MULTI,
491 InstallationValidator::CHROME_FRAME_MULTI_CHROME_MULTI)); 479 InstallationValidator::CHROME_FRAME_MULTI_CHROME_MULTI));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698