OLD | NEW |
---|---|
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 // This file declares helper functions for use in tests that expect a valid | 5 // This file declares helper functions for use in tests that expect a valid |
6 // installation, possibly of a specific type. Validation violations result in | 6 // installation, possibly of a specific type. Validation violations result in |
7 // test failures. | 7 // test failures. |
8 | 8 |
9 #include "chrome/installer/util/installation_validation_helper.h" | 9 #include "chrome/installer/util/installation_validation_helper.h" |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... | |
27 ~FailureLogHelper(); | 27 ~FailureLogHelper(); |
28 | 28 |
29 private: | 29 private: |
30 static bool AddFailureForLogMessage(int severity, | 30 static bool AddFailureForLogMessage(int severity, |
31 const char* file, | 31 const char* file, |
32 int line, | 32 int line, |
33 size_t message_start, | 33 size_t message_start, |
34 const std::string& str); | 34 const std::string& str); |
35 | 35 |
36 static const logging::LogSeverity kViolationSeverity_; | 36 static const logging::LogSeverity kViolationSeverity_; |
37 static logging::LogMessageHandlerFunction old_message_handler_; | |
38 static int old_min_log_level_; | 37 static int old_min_log_level_; |
39 }; | 38 }; |
40 | 39 |
41 // InstallationValidator logs all violations at ERROR level. | 40 // InstallationValidator logs all violations at ERROR level. |
42 // static | 41 // static |
43 const logging::LogSeverity | 42 const logging::LogSeverity |
44 FailureLogHelper::kViolationSeverity_ = logging::LOG_ERROR; | 43 FailureLogHelper::kViolationSeverity_ = logging::LOG_ERROR; |
45 | 44 |
46 // static | 45 // static |
47 logging::LogMessageHandlerFunction | |
48 FailureLogHelper::old_message_handler_ = NULL; | |
49 | |
50 // static | |
51 int FailureLogHelper::old_min_log_level_ = | 46 int FailureLogHelper::old_min_log_level_ = |
52 FailureLogHelper::kViolationSeverity_; | 47 FailureLogHelper::kViolationSeverity_; |
53 | 48 |
54 FailureLogHelper::FailureLogHelper() { | 49 FailureLogHelper::FailureLogHelper() { |
55 LOG_ASSERT(old_message_handler_ == NULL); | |
56 | |
57 // The validator logs at ERROR level. Ensure that it generates messages so we | 50 // The validator logs at ERROR level. Ensure that it generates messages so we |
58 // can transform them into test failures. | 51 // can transform them into test failures. |
59 old_min_log_level_ = logging::GetMinLogLevel(); | 52 old_min_log_level_ = logging::GetMinLogLevel(); |
60 if (old_min_log_level_ > kViolationSeverity_) | 53 if (old_min_log_level_ > kViolationSeverity_) |
61 logging::SetMinLogLevel(kViolationSeverity_); | 54 logging::SetMinLogLevel(kViolationSeverity_); |
62 | 55 |
63 old_message_handler_ = logging::GetLogMessageHandler(); | 56 logging::PushLogMessageHandler(AddFailureForLogMessage); |
64 logging::SetLogMessageHandler(&AddFailureForLogMessage); | |
65 } | 57 } |
66 | 58 |
67 FailureLogHelper::~FailureLogHelper() { | 59 FailureLogHelper::~FailureLogHelper() { |
68 logging::SetLogMessageHandler(old_message_handler_); | 60 logging::PopLogMessageHandler(AddFailureForLogMessage); |
Dan Beam
2016/07/15 03:11:19
awesome
| |
69 old_message_handler_ = NULL; | |
70 | 61 |
71 if (old_min_log_level_ > kViolationSeverity_) | 62 if (old_min_log_level_ > kViolationSeverity_) |
72 logging::SetMinLogLevel(old_min_log_level_); | 63 logging::SetMinLogLevel(old_min_log_level_); |
73 } | 64 } |
74 | 65 |
75 // A logging::LogMessageHandlerFunction that adds a non-fatal test failure | 66 // A logging::LogMessageHandlerFunction that adds a non-fatal test failure |
76 // (i.e., similar to an unmet EXPECT_FOO) for each non-empty message logged at | 67 // (i.e., similar to an unmet EXPECT_FOO) for each non-empty message logged at |
77 // the severity of validation violations. All other messages are sent through | 68 // the severity of validation violations. All other messages are sent through |
78 // the default logging pipeline. | 69 // the default logging pipeline. |
79 // static | 70 // static |
80 bool FailureLogHelper::AddFailureForLogMessage(int severity, | 71 bool FailureLogHelper::AddFailureForLogMessage(int severity, |
81 const char* file, | 72 const char* file, |
82 int line, | 73 int line, |
83 size_t message_start, | 74 size_t message_start, |
84 const std::string& str) { | 75 const std::string& str) { |
85 if (severity == kViolationSeverity_ && !str.empty()) { | 76 if (severity == kViolationSeverity_ && !str.empty()) { |
86 // Remove the trailing newline, if present. | 77 // Remove the trailing newline, if present. |
87 size_t message_length = str.size() - message_start; | 78 size_t message_length = str.size() - message_start; |
88 if (*str.rbegin() == '\n') | 79 if (*str.rbegin() == '\n') |
89 --message_length; | 80 --message_length; |
90 ADD_FAILURE_AT(file, line) | 81 ADD_FAILURE_AT(file, line) |
91 << base::StringPiece(str.c_str() + message_start, message_length); | 82 << base::StringPiece(str.c_str() + message_start, message_length); |
92 return true; | 83 return true; |
93 } | 84 } |
94 | 85 |
95 if (old_message_handler_ != NULL) | |
96 return (old_message_handler_)(severity, file, line, message_start, str); | |
97 | |
98 return false; | 86 return false; |
99 } | 87 } |
100 | 88 |
101 } // namespace | 89 } // namespace |
102 | 90 |
103 InstallationValidator::InstallationType ExpectValidInstallation( | 91 InstallationValidator::InstallationType ExpectValidInstallation( |
104 bool system_level) { | 92 bool system_level) { |
105 FailureLogHelper log_helper; | 93 FailureLogHelper log_helper; |
106 InstallationValidator::InstallationType found_type = | 94 InstallationValidator::InstallationType found_type = |
107 InstallationValidator::NO_PRODUCTS; | 95 InstallationValidator::NO_PRODUCTS; |
(...skipping 21 matching lines...) Expand all Loading... | |
129 } | 117 } |
130 | 118 |
131 void ExpectInstallationOfTypeForState( | 119 void ExpectInstallationOfTypeForState( |
132 const InstallationState& machine_state, | 120 const InstallationState& machine_state, |
133 bool system_level, | 121 bool system_level, |
134 InstallationValidator::InstallationType type) { | 122 InstallationValidator::InstallationType type) { |
135 EXPECT_EQ(type, ExpectValidInstallationForState(machine_state, system_level)); | 123 EXPECT_EQ(type, ExpectValidInstallationForState(machine_state, system_level)); |
136 } | 124 } |
137 | 125 |
138 } // namespace installer | 126 } // namespace installer |
OLD | NEW |