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

Side by Side Diff: metrics_daemon_test.cc

Issue 3181015: Add # daily crashes metrics and separate kernel crashes out. (Closed) Base URL: ssh://git@chromiumos-git//metrics.git
Patch Set: Respond to review Created 10 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
« no previous file with comments | « metrics_daemon.cc ('k') | no next file » | 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) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS 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 <base/file_util.h> 5 #include <base/file_util.h>
6 #include <gtest/gtest.h> 6 #include <gtest/gtest.h>
7 7
8 #include "counter_mock.h" 8 #include "counter_mock.h"
9 #include "metrics_daemon.h" 9 #include "metrics_daemon.h"
10 #include "metrics_library_mock.h" 10 #include "metrics_library_mock.h"
11 11
12 using base::Time; 12 using base::Time;
13 using base::TimeTicks; 13 using base::TimeTicks;
14 using chromeos_metrics::FrequencyCounterMock;
14 using chromeos_metrics::TaggedCounterMock; 15 using chromeos_metrics::TaggedCounterMock;
15 using ::testing::_; 16 using ::testing::_;
16 using ::testing::Return; 17 using ::testing::Return;
17 using ::testing::StrictMock; 18 using ::testing::StrictMock;
18 19
19 static const int kSecondsPerDay = 24 * 60 * 60; 20 static const int kSecondsPerDay = 24 * 60 * 60;
20 21
21 // This class allows a TimeTicks object to be initialized with seconds 22 // This class allows a TimeTicks object to be initialized with seconds
22 // (rather than microseconds) through the protected TimeTicks(int64) 23 // (rather than microseconds) through the protected TimeTicks(int64)
23 // constructor. 24 // constructor.
(...skipping 28 matching lines...) Expand all
52 EXPECT_TRUE(NULL != daemon_.kernel_crash_interval_.get()); 53 EXPECT_TRUE(NULL != daemon_.kernel_crash_interval_.get());
53 EXPECT_TRUE(NULL != daemon_.user_crash_interval_.get()); 54 EXPECT_TRUE(NULL != daemon_.user_crash_interval_.get());
54 55
55 // Allocates mock counter and transfers ownership. 56 // Allocates mock counter and transfers ownership.
56 daily_use_ = new StrictMock<TaggedCounterMock>(); 57 daily_use_ = new StrictMock<TaggedCounterMock>();
57 daemon_.daily_use_.reset(daily_use_); 58 daemon_.daily_use_.reset(daily_use_);
58 kernel_crash_interval_ = new StrictMock<TaggedCounterMock>(); 59 kernel_crash_interval_ = new StrictMock<TaggedCounterMock>();
59 daemon_.kernel_crash_interval_.reset(kernel_crash_interval_); 60 daemon_.kernel_crash_interval_.reset(kernel_crash_interval_);
60 user_crash_interval_ = new StrictMock<TaggedCounterMock>(); 61 user_crash_interval_ = new StrictMock<TaggedCounterMock>();
61 daemon_.user_crash_interval_.reset(user_crash_interval_); 62 daemon_.user_crash_interval_.reset(user_crash_interval_);
63 unclean_shutdown_interval_ = new StrictMock<TaggedCounterMock>();
64 daemon_.unclean_shutdown_interval_.reset(unclean_shutdown_interval_);
65 kernel_crashes_daily_ = new StrictMock<FrequencyCounterMock>();
66 daemon_.kernel_crashes_daily_.reset(kernel_crashes_daily_);
67 user_crashes_daily_ = new StrictMock<FrequencyCounterMock>();
68 daemon_.user_crashes_daily_.reset(user_crashes_daily_);
69 unclean_shutdowns_daily_ = new StrictMock<FrequencyCounterMock>();
70 daemon_.unclean_shutdowns_daily_.reset(unclean_shutdowns_daily_);
71 any_crashes_daily_ = new StrictMock<FrequencyCounterMock>();
72 daemon_.any_crashes_daily_.reset(any_crashes_daily_);
62 73
63 EXPECT_FALSE(daemon_.user_active_); 74 EXPECT_FALSE(daemon_.user_active_);
64 EXPECT_TRUE(daemon_.user_active_last_.is_null()); 75 EXPECT_TRUE(daemon_.user_active_last_.is_null());
65 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); 76 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_);
66 EXPECT_TRUE(daemon_.network_state_last_.is_null()); 77 EXPECT_TRUE(daemon_.network_state_last_.is_null());
67 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); 78 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_);
68 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); 79 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_);
69 } 80 }
70 81
71 virtual void TearDown() {} 82 virtual void TearDown() {}
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 // Metrics library mock. It's a strict mock so that all unexpected 176 // Metrics library mock. It's a strict mock so that all unexpected
166 // metric generation calls are marked as failures. 177 // metric generation calls are marked as failures.
167 StrictMock<MetricsLibraryMock> metrics_lib_; 178 StrictMock<MetricsLibraryMock> metrics_lib_;
168 179
169 // Counter mocks. They are strict mocks so that all unexpected 180 // Counter mocks. They are strict mocks so that all unexpected
170 // update calls are marked as failures. They are pointers so that 181 // update calls are marked as failures. They are pointers so that
171 // they can replace the scoped_ptr's allocated by the daemon. 182 // they can replace the scoped_ptr's allocated by the daemon.
172 StrictMock<TaggedCounterMock>* daily_use_; 183 StrictMock<TaggedCounterMock>* daily_use_;
173 StrictMock<TaggedCounterMock>* kernel_crash_interval_; 184 StrictMock<TaggedCounterMock>* kernel_crash_interval_;
174 StrictMock<TaggedCounterMock>* user_crash_interval_; 185 StrictMock<TaggedCounterMock>* user_crash_interval_;
186 StrictMock<TaggedCounterMock>* unclean_shutdown_interval_;
187
188 StrictMock<FrequencyCounterMock>* kernel_crashes_daily_;
189 StrictMock<FrequencyCounterMock>* user_crashes_daily_;
190 StrictMock<FrequencyCounterMock>* unclean_shutdowns_daily_;
191 StrictMock<FrequencyCounterMock>* any_crashes_daily_;
175 }; 192 };
176 193
177 TEST_F(MetricsDaemonTest, CheckKernelCrash) { 194 TEST_F(MetricsDaemonTest, CheckSystemCrash) {
178 static const char kKernelCrashDetected[] = "test-kernel-crash-detected"; 195 static const char kKernelCrashDetected[] = "test-kernel-crash-detected";
179 daemon_.CheckKernelCrash(kKernelCrashDetected); 196 EXPECT_FALSE(daemon_.CheckSystemCrash(kKernelCrashDetected));
180 197
181 FilePath crash_detected(kKernelCrashDetected); 198 FilePath crash_detected(kKernelCrashDetected);
182 file_util::WriteFile(crash_detected, "", 0); 199 file_util::WriteFile(crash_detected, "", 0);
183 IgnoreActiveUseUpdate(); 200 EXPECT_TRUE(file_util::PathExists(crash_detected));
184 EXPECT_CALL(*kernel_crash_interval_, Flush()) 201 EXPECT_TRUE(daemon_.CheckSystemCrash(kKernelCrashDetected));
185 .Times(1) 202 EXPECT_FALSE(file_util::PathExists(crash_detected));
186 .RetiresOnSaturation(); 203 EXPECT_FALSE(daemon_.CheckSystemCrash(kKernelCrashDetected));
187 daemon_.CheckKernelCrash(kKernelCrashDetected); 204 EXPECT_FALSE(file_util::PathExists(crash_detected));
188 file_util::Delete(crash_detected, false); 205 file_util::Delete(crash_detected, false);
189 } 206 }
190 207
191 TEST_F(MetricsDaemonTest, DailyUseReporter) { 208 TEST_F(MetricsDaemonTest, ReportDailyUse) {
192 ExpectDailyUseTimeMetric(/* sample */ 2); 209 ExpectDailyUseTimeMetric(/* sample */ 2);
193 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 20, /* count */ 90); 210 MetricsDaemon::ReportDailyUse(&daemon_, /* tag */ 20, /* count */ 90);
194 211
195 ExpectDailyUseTimeMetric(/* sample */ 1); 212 ExpectDailyUseTimeMetric(/* sample */ 1);
196 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 23, /* count */ 89); 213 MetricsDaemon::ReportDailyUse(&daemon_, /* tag */ 23, /* count */ 89);
197 214
198 // There should be no metrics generated for the calls below. 215 // There should be no metrics generated for the calls below.
199 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 50, /* count */ 0); 216 MetricsDaemon::ReportDailyUse(&daemon_, /* tag */ 50, /* count */ 0);
200 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 60, /* count */ -5); 217 MetricsDaemon::ReportDailyUse(&daemon_, /* tag */ 60, /* count */ -5);
201 } 218 }
202 219
203 TEST_F(MetricsDaemonTest, KernelCrashIntervalReporter) { 220 TEST_F(MetricsDaemonTest, ReportKernelCrashInterval) {
204 ExpectMetric(MetricsDaemon::kMetricKernelCrashIntervalName, 50, 221 ExpectMetric(MetricsDaemon::kMetricKernelCrashIntervalName, 50,
205 MetricsDaemon::kMetricKernelCrashIntervalMin, 222 MetricsDaemon::kMetricCrashIntervalMin,
206 MetricsDaemon::kMetricKernelCrashIntervalMax, 223 MetricsDaemon::kMetricCrashIntervalMax,
207 MetricsDaemon::kMetricKernelCrashIntervalBuckets); 224 MetricsDaemon::kMetricCrashIntervalBuckets);
208 MetricsDaemon::KernelCrashIntervalReporter(&daemon_, 0, 50); 225 MetricsDaemon::ReportKernelCrashInterval(&daemon_, 0, 50);
226 }
227
228 TEST_F(MetricsDaemonTest, ReportUncleanShutdownInterval) {
229 ExpectMetric(MetricsDaemon::kMetricUncleanShutdownIntervalName, 50,
230 MetricsDaemon::kMetricCrashIntervalMin,
231 MetricsDaemon::kMetricCrashIntervalMax,
232 MetricsDaemon::kMetricCrashIntervalBuckets);
233 MetricsDaemon::ReportUncleanShutdownInterval(&daemon_, 0, 50);
209 } 234 }
210 235
211 TEST_F(MetricsDaemonTest, LookupNetworkState) { 236 TEST_F(MetricsDaemonTest, LookupNetworkState) {
212 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, 237 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline,
213 daemon_.LookupNetworkState("online")); 238 daemon_.LookupNetworkState("online"));
214 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, 239 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline,
215 daemon_.LookupNetworkState("offline")); 240 daemon_.LookupNetworkState("offline"));
216 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, 241 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState,
217 daemon_.LookupNetworkState("somestate")); 242 daemon_.LookupNetworkState("somestate"));
218 } 243 }
(...skipping 20 matching lines...) Expand all
239 DBusMessage* msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL); 264 DBusMessage* msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL);
240 DBusHandlerResult res = 265 DBusHandlerResult res =
241 MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); 266 MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_);
242 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); 267 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res);
243 DeleteDBusMessage(msg); 268 DeleteDBusMessage(msg);
244 269
245 IgnoreActiveUseUpdate(); 270 IgnoreActiveUseUpdate();
246 EXPECT_CALL(*user_crash_interval_, Flush()) 271 EXPECT_CALL(*user_crash_interval_, Flush())
247 .Times(1) 272 .Times(1)
248 .RetiresOnSaturation(); 273 .RetiresOnSaturation();
274 EXPECT_CALL(*user_crashes_daily_, Update(1))
275 .Times(1)
276 .RetiresOnSaturation();
277 EXPECT_CALL(*any_crashes_daily_, Update(1))
278 .Times(1)
279 .RetiresOnSaturation();
249 msg = NewDBusSignalString("/", 280 msg = NewDBusSignalString("/",
250 "org.chromium.CrashReporter", 281 "org.chromium.CrashReporter",
251 "UserCrash", 282 "UserCrash",
252 ""); 283 "");
253 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); 284 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_);
254 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); 285 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res);
255 DeleteDBusMessage(msg); 286 DeleteDBusMessage(msg);
256 287
257 msg = NewDBusSignalString("/", 288 msg = NewDBusSignalString("/",
258 "org.chromium.flimflam.Manager", 289 "org.chromium.flimflam.Manager",
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); 403 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_);
373 EXPECT_FALSE(daemon_.user_active_); 404 EXPECT_FALSE(daemon_.user_active_);
374 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_); 405 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_);
375 } 406 }
376 407
377 TEST_F(MetricsDaemonTest, ProcessKernelCrash) { 408 TEST_F(MetricsDaemonTest, ProcessKernelCrash) {
378 IgnoreActiveUseUpdate(); 409 IgnoreActiveUseUpdate();
379 EXPECT_CALL(*kernel_crash_interval_, Flush()) 410 EXPECT_CALL(*kernel_crash_interval_, Flush())
380 .Times(1) 411 .Times(1)
381 .RetiresOnSaturation(); 412 .RetiresOnSaturation();
413 EXPECT_CALL(*kernel_crashes_daily_, Update(1));
414 EXPECT_CALL(*any_crashes_daily_, Update(1));
382 daemon_.ProcessKernelCrash(); 415 daemon_.ProcessKernelCrash();
383 } 416 }
384 417
418 TEST_F(MetricsDaemonTest, ProcessUncleanShutdown) {
419 IgnoreActiveUseUpdate();
420 EXPECT_CALL(*unclean_shutdown_interval_, Flush())
421 .Times(1)
422 .RetiresOnSaturation();
423 EXPECT_CALL(*unclean_shutdowns_daily_, Update(1));
424 EXPECT_CALL(*any_crashes_daily_, Update(1));
425 daemon_.ProcessUncleanShutdown();
426 }
427
385 TEST_F(MetricsDaemonTest, ProcessUserCrash) { 428 TEST_F(MetricsDaemonTest, ProcessUserCrash) {
386 IgnoreActiveUseUpdate(); 429 IgnoreActiveUseUpdate();
387 EXPECT_CALL(*user_crash_interval_, Flush()) 430 EXPECT_CALL(*user_crash_interval_, Flush())
388 .Times(1) 431 .Times(1)
389 .RetiresOnSaturation(); 432 .RetiresOnSaturation();
433 EXPECT_CALL(*user_crashes_daily_, Update(1));
434 EXPECT_CALL(*any_crashes_daily_, Update(1));
390 daemon_.ProcessUserCrash(); 435 daemon_.ProcessUserCrash();
391 } 436 }
392 437
393 TEST_F(MetricsDaemonTest, SendMetric) { 438 TEST_F(MetricsDaemonTest, SendMetric) {
394 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); 439 ExpectMetric("Dummy.Metric", 3, 1, 100, 50);
395 daemon_.SendMetric("Dummy.Metric", /* sample */ 3, 440 daemon_.SendMetric("Dummy.Metric", /* sample */ 3,
396 /* min */ 1, /* max */ 100, /* buckets */ 50); 441 /* min */ 1, /* max */ 100, /* buckets */ 50);
397 } 442 }
398 443
399 TEST_F(MetricsDaemonTest, SessionStateChanged) { 444 TEST_F(MetricsDaemonTest, SessionStateChanged) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 EXPECT_TRUE(daemon_.user_active_); 507 EXPECT_TRUE(daemon_.user_active_);
463 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_); 508 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_);
464 509
465 ExpectActiveUseUpdate(10, 0); 510 ExpectActiveUseUpdate(10, 0);
466 daemon_.SetUserActiveState(/* active */ true, 511 daemon_.SetUserActiveState(/* active */ true,
467 TestTime(10 * kSecondsPerDay + 1000)); 512 TestTime(10 * kSecondsPerDay + 1000));
468 EXPECT_TRUE(daemon_.user_active_); 513 EXPECT_TRUE(daemon_.user_active_);
469 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_); 514 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_);
470 } 515 }
471 516
472 TEST_F(MetricsDaemonTest, UserCrashIntervalReporter) { 517 TEST_F(MetricsDaemonTest, ReportUserCrashInterval) {
473 ExpectMetric(MetricsDaemon::kMetricUserCrashIntervalName, 50, 518 ExpectMetric(MetricsDaemon::kMetricUserCrashIntervalName, 50,
474 MetricsDaemon::kMetricUserCrashIntervalMin, 519 MetricsDaemon::kMetricCrashIntervalMin,
475 MetricsDaemon::kMetricUserCrashIntervalMax, 520 MetricsDaemon::kMetricCrashIntervalMax,
476 MetricsDaemon::kMetricUserCrashIntervalBuckets); 521 MetricsDaemon::kMetricCrashIntervalBuckets);
477 MetricsDaemon::UserCrashIntervalReporter(&daemon_, 0, 50); 522 MetricsDaemon::ReportUserCrashInterval(&daemon_, 0, 50);
523 }
524
525 TEST_F(MetricsDaemonTest, ReportCrashesDailyFrequency) {
526 ExpectMetric("foobar", 50,
527 MetricsDaemon::kMetricCrashesDailyMin,
528 MetricsDaemon::kMetricCrashesDailyMax,
529 MetricsDaemon::kMetricCrashesDailyBuckets);
530 MetricsDaemon::ReportCrashesDailyFrequency("foobar", &daemon_, 50);
478 } 531 }
479 532
480 int main(int argc, char** argv) { 533 int main(int argc, char** argv) {
481 testing::InitGoogleTest(&argc, argv); 534 testing::InitGoogleTest(&argc, argv);
482 return RUN_ALL_TESTS(); 535 return RUN_ALL_TESTS();
483 } 536 }
OLDNEW
« no previous file with comments | « metrics_daemon.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698