OLD | NEW |
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 "metrics_daemon.h" | 5 #include "metrics_daemon.h" |
6 #include "metrics_library_mock.h" | 6 #include "metrics_library_mock.h" |
7 | 7 |
8 #include <sys/file.h> | 8 #include <sys/file.h> |
9 | 9 |
10 #include <base/eintr_wrapper.h> | 10 #include <base/eintr_wrapper.h> |
11 #include <base/file_util.h> | 11 #include <base/file_util.h> |
12 #include <base/logging.h> | 12 #include <base/logging.h> |
13 #include <base/string_util.h> | 13 #include <base/string_util.h> |
14 #include <gtest/gtest.h> | 14 #include <gtest/gtest.h> |
15 | 15 |
| 16 using base::Time; |
| 17 using base::TimeTicks; |
16 using ::testing::Mock; | 18 using ::testing::Mock; |
17 using ::testing::Return; | 19 using ::testing::Return; |
18 using ::testing::StrictMock; | 20 using ::testing::StrictMock; |
19 | 21 |
20 static const char kTestDailyUseRecordFile[] = "daily-usage-test"; | 22 static const char kTestDailyUseRecordFile[] = "daily-usage-test"; |
21 static const char kDoesNotExistFile[] = "/does/not/exist"; | 23 static const char kDoesNotExistFile[] = "/does/not/exist"; |
22 | 24 |
23 static const int kSecondsPerDay = 24 * 60 * 60; | 25 static const int kSecondsPerDay = 24 * 60 * 60; |
24 | 26 |
| 27 // This class allows a TimeTicks object to be initialized with seconds |
| 28 // (rather than microseconds) through the protected TimeTicks(int64) |
| 29 // constructor. |
| 30 class TestTicks : public TimeTicks { |
| 31 public: |
| 32 TestTicks(int64 seconds) |
| 33 : TimeTicks(seconds * Time::kMicrosecondsPerSecond) {} |
| 34 }; |
| 35 |
| 36 // Overloaded for test failure printing purposes. |
| 37 static std::ostream& operator<<(std::ostream& o, const TimeTicks& ticks) { |
| 38 o << ticks.ToInternalValue() << "us"; |
| 39 return o; |
| 40 }; |
| 41 |
| 42 // Overloaded for test failure printing purposes. |
| 43 static std::ostream& operator<<(std::ostream& o, const Time& time) { |
| 44 o << time.ToInternalValue() << "us"; |
| 45 return o; |
| 46 }; |
| 47 |
25 class MetricsDaemonTest : public testing::Test { | 48 class MetricsDaemonTest : public testing::Test { |
26 protected: | 49 protected: |
27 virtual void SetUp() { | 50 virtual void SetUp() { |
28 EXPECT_EQ(NULL, daemon_.daily_use_record_file_); | 51 EXPECT_EQ(NULL, daemon_.daily_use_record_file_); |
29 daemon_.Init(true, &metrics_lib_); | 52 daemon_.Init(true, &metrics_lib_); |
| 53 |
| 54 // Tests constructor initialization. Switches to a test daily use |
| 55 // record file. |
30 EXPECT_TRUE(NULL != daemon_.daily_use_record_file_); | 56 EXPECT_TRUE(NULL != daemon_.daily_use_record_file_); |
31 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; | 57 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; |
| 58 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 59 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
| 60 EXPECT_FALSE(daemon_.user_active_); |
| 61 EXPECT_TRUE(daemon_.user_active_last_.is_null()); |
| 62 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
| 63 EXPECT_TRUE(daemon_.network_state_last_.is_null()); |
| 64 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
| 65 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
32 | 66 |
33 // The test fixture object will be used by the log message handler. | 67 // The test fixture object will be used by the log message handler. |
34 daemon_test_ = this; | 68 daemon_test_ = this; |
35 logging::SetLogMessageHandler(HandleLogMessages); | 69 logging::SetLogMessageHandler(HandleLogMessages); |
36 } | 70 } |
37 | 71 |
38 virtual void TearDown() { | 72 virtual void TearDown() { |
39 logging::SetLogMessageHandler(NULL); | 73 logging::SetLogMessageHandler(NULL); |
40 daemon_test_ = NULL; | 74 daemon_test_ = NULL; |
41 file_util::Delete(FilePath(kTestDailyUseRecordFile), false); | 75 file_util::Delete(FilePath(kTestDailyUseRecordFile), false); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 | 111 |
78 // Adds a metrics library mock expectation that the specified time | 112 // Adds a metrics library mock expectation that the specified time |
79 // to network dropping metric will be generated. | 113 // to network dropping metric will be generated. |
80 void ExpectTimeToNetworkDropMetric(int sample) { | 114 void ExpectTimeToNetworkDropMetric(int sample) { |
81 ExpectMetric(MetricsDaemon::kMetricTimeToNetworkDropName, sample, | 115 ExpectMetric(MetricsDaemon::kMetricTimeToNetworkDropName, sample, |
82 MetricsDaemon::kMetricTimeToNetworkDropMin, | 116 MetricsDaemon::kMetricTimeToNetworkDropMin, |
83 MetricsDaemon::kMetricTimeToNetworkDropMax, | 117 MetricsDaemon::kMetricTimeToNetworkDropMax, |
84 MetricsDaemon::kMetricTimeToNetworkDropBuckets); | 118 MetricsDaemon::kMetricTimeToNetworkDropBuckets); |
85 } | 119 } |
86 | 120 |
| 121 Time TestTime(int64 seconds) { |
| 122 return Time::FromInternalValue(seconds * Time::kMicrosecondsPerSecond); |
| 123 } |
| 124 |
87 // Asserts that the daily use record file contains the specified | 125 // Asserts that the daily use record file contains the specified |
88 // contents. | 126 // contents. |
89 testing::AssertionResult AssertDailyUseRecord(const char* expr_day, | 127 testing::AssertionResult AssertDailyUseRecord(const char* expr_day, |
90 const char* expr_seconds, | 128 const char* expr_seconds, |
91 int expected_day, | 129 int expected_day, |
92 int expected_seconds) { | 130 int expected_seconds) { |
93 int fd = HANDLE_EINTR(open(daemon_.daily_use_record_file_, O_RDONLY)); | 131 int fd = HANDLE_EINTR(open(daemon_.daily_use_record_file_, O_RDONLY)); |
94 if (fd < 0) { | 132 if (fd < 0) { |
95 testing::Message msg; | 133 testing::Message msg; |
96 msg << "Unable to open " << daemon_.daily_use_record_file_; | 134 msg << "Unable to open " << daemon_.daily_use_record_file_; |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 // created. | 217 // created. |
180 daemon_.daily_use_record_file_ = kDoesNotExistFile; | 218 daemon_.daily_use_record_file_ = kDoesNotExistFile; |
181 daemon_.LogDailyUseRecord(10, 20); | 219 daemon_.LogDailyUseRecord(10, 20); |
182 EXPECT_TRUE(LogContains("Unable to open the daily use file: " | 220 EXPECT_TRUE(LogContains("Unable to open the daily use file: " |
183 "No such file or directory")); | 221 "No such file or directory")); |
184 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 222 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
185 file_util::Delete(FilePath(kDoesNotExistFile), false); | 223 file_util::Delete(FilePath(kDoesNotExistFile), false); |
186 } | 224 } |
187 | 225 |
188 TEST_F(MetricsDaemonTest, LogDailyUseRecordOnLogin) { | 226 TEST_F(MetricsDaemonTest, LogDailyUseRecordOnLogin) { |
189 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
190 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
191 | |
192 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 120); | 227 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 120); |
193 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); | 228 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); |
194 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 229 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
195 | 230 |
196 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 0); | 231 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 0); |
197 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); | 232 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); |
198 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 233 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
199 | 234 |
200 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 240); | 235 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 240); |
201 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 360); | 236 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 360); |
202 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 237 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
203 | 238 |
204 ExpectDailyUseTimeMetric(/* sample */ 6); | 239 ExpectDailyUseTimeMetric(/* sample */ 6); |
205 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); | 240 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); |
206 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 241 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
207 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 242 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
208 } | 243 } |
209 | 244 |
210 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundDown) { | 245 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundDown) { |
211 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
212 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
213 | |
214 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); | 246 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); |
215 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 89); | 247 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 89); |
216 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 248 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
217 | 249 |
218 ExpectDailyUseTimeMetric(/* sample */ 1); | 250 ExpectDailyUseTimeMetric(/* sample */ 1); |
219 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 15); | 251 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 15); |
220 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 15); | 252 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 15); |
221 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 253 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
222 } | 254 } |
223 | 255 |
224 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundUp) { | 256 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundUp) { |
225 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
226 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
227 | |
228 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); | 257 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); |
229 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 258 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
230 | 259 |
231 // Tests rounding use time to the closest minute. | 260 // Tests rounding use time to the closest minute. |
232 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 90); | 261 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 90); |
233 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 90); | 262 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 90); |
234 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 263 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
235 | 264 |
236 ExpectDailyUseTimeMetric(/* sample */ 2); | 265 ExpectDailyUseTimeMetric(/* sample */ 2); |
237 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); | 266 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 msg = NewDBusSignalString("/", | 356 msg = NewDBusSignalString("/", |
328 "org.chromium.UnknownService.Manager", | 357 "org.chromium.UnknownService.Manager", |
329 "StateChanged", | 358 "StateChanged", |
330 "randomstate"); | 359 "randomstate"); |
331 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 360 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
332 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); | 361 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); |
333 DeleteDBusMessage(msg); | 362 DeleteDBusMessage(msg); |
334 } | 363 } |
335 | 364 |
336 TEST_F(MetricsDaemonTest, NetStateChangedSimpleDrop) { | 365 TEST_F(MetricsDaemonTest, NetStateChangedSimpleDrop) { |
337 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 366 daemon_.NetStateChanged("online", TestTicks(10)); |
338 EXPECT_EQ(0, daemon_.network_state_last_); | |
339 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | |
340 | |
341 daemon_.NetStateChanged("online", /* now */ 10); | |
342 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 367 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
343 EXPECT_EQ(10, daemon_.network_state_last_); | 368 EXPECT_EQ(TestTicks(10), daemon_.network_state_last_); |
344 | 369 |
345 ExpectTimeToNetworkDropMetric(20); | 370 ExpectTimeToNetworkDropMetric(20); |
346 daemon_.NetStateChanged("offline", /* now */ 30); | 371 daemon_.NetStateChanged("offline", TestTicks(30)); |
347 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 372 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
348 EXPECT_EQ(30, daemon_.network_state_last_); | 373 EXPECT_EQ(TestTicks(30), daemon_.network_state_last_); |
349 } | 374 } |
350 | 375 |
351 TEST_F(MetricsDaemonTest, NetStateChangedSuspend) { | 376 TEST_F(MetricsDaemonTest, NetStateChangedSuspend) { |
| 377 daemon_.NetStateChanged("offline", TestTicks(30)); |
| 378 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
| 379 EXPECT_EQ(TestTicks(30), daemon_.network_state_last_); |
| 380 |
| 381 daemon_.NetStateChanged("online", TestTicks(60)); |
| 382 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
| 383 EXPECT_EQ(TestTicks(60), daemon_.network_state_last_); |
| 384 |
| 385 daemon_.power_state_ = MetricsDaemon::kPowerStateMem; |
| 386 daemon_.NetStateChanged("offline", TestTicks(85)); |
| 387 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
| 388 EXPECT_EQ(TestTicks(85), daemon_.network_state_last_); |
| 389 |
| 390 daemon_.NetStateChanged("somestate", TestTicks(90)); |
352 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 391 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
353 EXPECT_EQ(0, daemon_.network_state_last_); | 392 EXPECT_EQ(TestTicks(90), daemon_.network_state_last_); |
354 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | |
355 | 393 |
356 daemon_.NetStateChanged("offline", /* now */ 30); | 394 daemon_.NetStateChanged("offline", TestTicks(95)); |
357 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 395 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
358 EXPECT_EQ(30, daemon_.network_state_last_); | 396 EXPECT_EQ(TestTicks(95), daemon_.network_state_last_); |
359 | 397 |
360 daemon_.NetStateChanged("online", /* now */ 60); | 398 daemon_.power_state_ = MetricsDaemon::kPowerStateOn; |
| 399 daemon_.NetStateChanged("online", TestTicks(105)); |
361 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 400 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
362 EXPECT_EQ(60, daemon_.network_state_last_); | 401 EXPECT_EQ(TestTicks(105), daemon_.network_state_last_); |
363 | |
364 daemon_.PowerStateChanged("mem", /* now */ 80); | |
365 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); | |
366 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | |
367 EXPECT_EQ(60, daemon_.network_state_last_); | |
368 | |
369 daemon_.NetStateChanged("offline", /* now */ 85); | |
370 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | |
371 EXPECT_EQ(85, daemon_.network_state_last_); | |
372 | |
373 daemon_.NetStateChanged("somestate", /* now */ 90); | |
374 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | |
375 EXPECT_EQ(90, daemon_.network_state_last_); | |
376 | |
377 daemon_.NetStateChanged("offline", /* now */ 95); | |
378 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | |
379 EXPECT_EQ(95, daemon_.network_state_last_); | |
380 | |
381 daemon_.PowerStateChanged("on", /* now */ 100); | |
382 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | |
383 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | |
384 EXPECT_EQ(95, daemon_.network_state_last_); | |
385 | |
386 daemon_.NetStateChanged("online", /* now */ 105); | |
387 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | |
388 EXPECT_EQ(105, daemon_.network_state_last_); | |
389 | 402 |
390 ExpectTimeToNetworkDropMetric(3); | 403 ExpectTimeToNetworkDropMetric(3); |
391 daemon_.NetStateChanged("offline", /* now */ 108); | 404 daemon_.NetStateChanged("offline", TestTicks(108)); |
392 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 405 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
393 EXPECT_EQ(108, daemon_.network_state_last_); | 406 EXPECT_EQ(TestTicks(108), daemon_.network_state_last_); |
394 } | 407 } |
395 | 408 |
396 TEST_F(MetricsDaemonTest, PowerStateChanged) { | 409 TEST_F(MetricsDaemonTest, PowerStateChanged) { |
397 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 410 daemon_.SetUserActiveState(/* active */ true, |
398 EXPECT_FALSE(daemon_.user_active_); | 411 TestTime(7 * kSecondsPerDay + 15)); |
399 EXPECT_EQ(0, daemon_.user_active_last_); | |
400 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
401 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
402 | |
403 daemon_.SetUserActiveState(/* active */ true, 7 * kSecondsPerDay + 15); | |
404 EXPECT_TRUE(daemon_.user_active_); | 412 EXPECT_TRUE(daemon_.user_active_); |
405 EXPECT_EQ(7 * kSecondsPerDay + 15, daemon_.user_active_last_); | 413 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 15), daemon_.user_active_last_); |
406 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 414 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
407 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 415 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
408 | 416 |
409 daemon_.PowerStateChanged("mem", 7 * kSecondsPerDay + 45); | 417 daemon_.PowerStateChanged("mem", TestTime(7 * kSecondsPerDay + 45)); |
410 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); | 418 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); |
411 EXPECT_FALSE(daemon_.user_active_); | 419 EXPECT_FALSE(daemon_.user_active_); |
412 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); | 420 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); |
413 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 421 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
414 | 422 |
415 daemon_.PowerStateChanged("on", 7 * kSecondsPerDay + 85); | 423 daemon_.PowerStateChanged("on", TestTime(7 * kSecondsPerDay + 85)); |
416 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | 424 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
417 EXPECT_FALSE(daemon_.user_active_); | 425 EXPECT_FALSE(daemon_.user_active_); |
418 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); | 426 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); |
419 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 427 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
420 | 428 |
421 daemon_.PowerStateChanged("otherstate", 7 * kSecondsPerDay + 185); | 429 daemon_.PowerStateChanged("otherstate", TestTime(7 * kSecondsPerDay + 185)); |
422 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 430 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
423 EXPECT_FALSE(daemon_.user_active_); | 431 EXPECT_FALSE(daemon_.user_active_); |
424 EXPECT_EQ(7 * kSecondsPerDay + 185, daemon_.user_active_last_); | 432 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_); |
425 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 433 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
426 } | 434 } |
427 | 435 |
428 TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) { | 436 TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) { |
429 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, | 437 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, |
430 daemon_.screensaver_state_); | 438 daemon_.screensaver_state_); |
431 EXPECT_FALSE(daemon_.user_active_); | |
432 EXPECT_EQ(0, daemon_.user_active_last_); | |
433 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
434 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
435 | 439 |
436 daemon_.ScreenSaverStateChanged("locked", 5 * kSecondsPerDay + 10); | 440 daemon_.ScreenSaverStateChanged("locked", |
| 441 TestTime(5 * kSecondsPerDay + 10)); |
437 EXPECT_EQ(MetricsDaemon::kScreenSaverStateLocked, | 442 EXPECT_EQ(MetricsDaemon::kScreenSaverStateLocked, |
438 daemon_.screensaver_state_); | 443 daemon_.screensaver_state_); |
439 EXPECT_FALSE(daemon_.user_active_); | 444 EXPECT_FALSE(daemon_.user_active_); |
440 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); | 445 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 10), daemon_.user_active_last_); |
441 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 446 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
442 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 447 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
443 | 448 |
444 daemon_.ScreenSaverStateChanged("unlocked", 5 * kSecondsPerDay + 100); | 449 daemon_.ScreenSaverStateChanged("unlocked", |
| 450 TestTime(5 * kSecondsPerDay + 100)); |
445 EXPECT_EQ(MetricsDaemon::kScreenSaverStateUnlocked, | 451 EXPECT_EQ(MetricsDaemon::kScreenSaverStateUnlocked, |
446 daemon_.screensaver_state_); | 452 daemon_.screensaver_state_); |
447 EXPECT_TRUE(daemon_.user_active_); | 453 EXPECT_TRUE(daemon_.user_active_); |
448 EXPECT_EQ(5 * kSecondsPerDay + 100, daemon_.user_active_last_); | 454 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 100), daemon_.user_active_last_); |
449 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 455 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
450 | 456 |
451 daemon_.ScreenSaverStateChanged("otherstate", 5 * kSecondsPerDay + 300); | 457 daemon_.ScreenSaverStateChanged("otherstate", |
| 458 TestTime(5 * kSecondsPerDay + 300)); |
452 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, | 459 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, |
453 daemon_.screensaver_state_); | 460 daemon_.screensaver_state_); |
454 EXPECT_FALSE(daemon_.user_active_); | 461 EXPECT_FALSE(daemon_.user_active_); |
455 EXPECT_EQ(5 * kSecondsPerDay + 300, daemon_.user_active_last_); | 462 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 300), daemon_.user_active_last_); |
456 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 200); | 463 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 200); |
457 } | 464 } |
458 | 465 |
459 TEST_F(MetricsDaemonTest, SendMetric) { | 466 TEST_F(MetricsDaemonTest, SendMetric) { |
460 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); | 467 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); |
461 daemon_.SendMetric("Dummy.Metric", /* sample */ 3, | 468 daemon_.SendMetric("Dummy.Metric", /* sample */ 3, |
462 /* min */ 1, /* max */ 100, /* buckets */ 50); | 469 /* min */ 1, /* max */ 100, /* buckets */ 50); |
463 } | 470 } |
464 | 471 |
465 TEST_F(MetricsDaemonTest, SessionStateChanged) { | 472 TEST_F(MetricsDaemonTest, SessionStateChanged) { |
466 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 473 daemon_.SessionStateChanged("started", TestTime(15 * kSecondsPerDay + 20)); |
467 EXPECT_FALSE(daemon_.user_active_); | |
468 EXPECT_EQ(0, daemon_.user_active_last_); | |
469 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
470 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
471 | |
472 daemon_.SessionStateChanged("started", 15 * kSecondsPerDay + 20); | |
473 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); | 474 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); |
474 EXPECT_TRUE(daemon_.user_active_); | 475 EXPECT_TRUE(daemon_.user_active_); |
475 EXPECT_EQ(15 * kSecondsPerDay + 20, daemon_.user_active_last_); | 476 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 20), daemon_.user_active_last_); |
476 EXPECT_EQ(15, daemon_.daily_use_day_last_); | 477 EXPECT_EQ(15, daemon_.daily_use_day_last_); |
477 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 478 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
478 | 479 |
479 daemon_.SessionStateChanged("stopped", 15 * kSecondsPerDay + 150); | 480 daemon_.SessionStateChanged("stopped", TestTime(15 * kSecondsPerDay + 150)); |
480 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); | 481 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); |
481 EXPECT_FALSE(daemon_.user_active_); | 482 EXPECT_FALSE(daemon_.user_active_); |
482 EXPECT_EQ(15 * kSecondsPerDay + 150, daemon_.user_active_last_); | 483 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 150), daemon_.user_active_last_); |
483 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); | 484 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); |
484 | 485 |
485 daemon_.SessionStateChanged("otherstate", 15 * kSecondsPerDay + 300); | 486 daemon_.SessionStateChanged("otherstate", |
| 487 TestTime(15 * kSecondsPerDay + 300)); |
486 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 488 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
487 EXPECT_FALSE(daemon_.user_active_); | 489 EXPECT_FALSE(daemon_.user_active_); |
488 EXPECT_EQ(15 * kSecondsPerDay + 300, daemon_.user_active_last_); | 490 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 300), daemon_.user_active_last_); |
489 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); | 491 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); |
490 } | 492 } |
491 | 493 |
492 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnLogin) { | 494 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnLogin) { |
| 495 daemon_.SetUserActiveState(/* active */ false, |
| 496 TestTime(5 * kSecondsPerDay + 10)); |
493 EXPECT_FALSE(daemon_.user_active_); | 497 EXPECT_FALSE(daemon_.user_active_); |
494 EXPECT_EQ(0, daemon_.user_active_last_); | 498 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 10), daemon_.user_active_last_); |
495 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
496 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
497 | |
498 daemon_.SetUserActiveState(/* active */ false, 5 * kSecondsPerDay + 10); | |
499 EXPECT_FALSE(daemon_.user_active_); | |
500 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); | |
501 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 499 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
502 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 500 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
503 | 501 |
504 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 20); | 502 daemon_.SetUserActiveState(/* active */ true, |
| 503 TestTime(6 * kSecondsPerDay + 20)); |
505 EXPECT_TRUE(daemon_.user_active_); | 504 EXPECT_TRUE(daemon_.user_active_); |
506 EXPECT_EQ(6 * kSecondsPerDay + 20, daemon_.user_active_last_); | 505 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 20), daemon_.user_active_last_); |
507 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 506 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
508 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 507 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
509 | 508 |
510 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 120); | 509 daemon_.SetUserActiveState(/* active */ true, |
| 510 TestTime(6 * kSecondsPerDay + 120)); |
511 EXPECT_TRUE(daemon_.user_active_); | 511 EXPECT_TRUE(daemon_.user_active_); |
512 EXPECT_EQ(6 * kSecondsPerDay + 120, daemon_.user_active_last_); | 512 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 120), daemon_.user_active_last_); |
513 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 513 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
514 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 100); | 514 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 100); |
515 | 515 |
516 daemon_.SetUserActiveState(/* active */ false, 6 * kSecondsPerDay + 220); | 516 daemon_.SetUserActiveState(/* active */ false, |
| 517 TestTime(6 * kSecondsPerDay + 220)); |
517 EXPECT_FALSE(daemon_.user_active_); | 518 EXPECT_FALSE(daemon_.user_active_); |
518 EXPECT_EQ(6 * kSecondsPerDay + 220, daemon_.user_active_last_); | 519 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 220), daemon_.user_active_last_); |
519 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 520 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
520 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 200); | 521 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 200); |
521 | 522 |
522 ExpectDailyUseTimeMetric(/* sample */ 3); | 523 ExpectDailyUseTimeMetric(/* sample */ 3); |
523 daemon_.SetUserActiveState(/* active */ true, 8 * kSecondsPerDay - 300); | 524 daemon_.SetUserActiveState(/* active */ true, |
| 525 TestTime(8 * kSecondsPerDay - 300)); |
524 EXPECT_TRUE(daemon_.user_active_); | 526 EXPECT_TRUE(daemon_.user_active_); |
525 EXPECT_EQ(8 * kSecondsPerDay - 300, daemon_.user_active_last_); | 527 EXPECT_EQ(TestTime(8 * kSecondsPerDay - 300), daemon_.user_active_last_); |
526 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 528 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
527 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 529 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
528 } | 530 } |
529 | 531 |
530 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnMonitor) { | 532 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnMonitor) { |
531 EXPECT_FALSE(daemon_.user_active_); | 533 daemon_.SetUserActiveState(/* active */ true, |
532 EXPECT_EQ(0, daemon_.user_active_last_); | 534 TestTime(8 * kSecondsPerDay - 300)); |
533 EXPECT_EQ(0, daemon_.daily_use_day_last_); | |
534 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | |
535 | |
536 daemon_.SetUserActiveState(/* active */ true, 8 * kSecondsPerDay - 300); | |
537 EXPECT_TRUE(daemon_.user_active_); | 535 EXPECT_TRUE(daemon_.user_active_); |
538 EXPECT_EQ(8 * kSecondsPerDay - 300, daemon_.user_active_last_); | 536 EXPECT_EQ(TestTime(8 * kSecondsPerDay - 300), daemon_.user_active_last_); |
539 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 537 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
540 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); | 538 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
541 | 539 |
542 daemon_.SetUserActiveState(/* active */ false, 8 * kSecondsPerDay + 300); | 540 daemon_.SetUserActiveState(/* active */ false, |
| 541 TestTime(8 * kSecondsPerDay + 300)); |
543 EXPECT_FALSE(daemon_.user_active_); | 542 EXPECT_FALSE(daemon_.user_active_); |
544 EXPECT_EQ(8 * kSecondsPerDay + 300, daemon_.user_active_last_); | 543 EXPECT_EQ(TestTime(8 * kSecondsPerDay + 300), daemon_.user_active_last_); |
545 EXPECT_EQ(8, daemon_.daily_use_day_last_); | 544 EXPECT_EQ(8, daemon_.daily_use_day_last_); |
546 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); | 545 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); |
547 | 546 |
548 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay - 400); | 547 daemon_.SetUserActiveState(/* active */ true, |
| 548 TestTime(9 * kSecondsPerDay - 200)); |
549 EXPECT_TRUE(daemon_.user_active_); | 549 EXPECT_TRUE(daemon_.user_active_); |
550 EXPECT_EQ(9 * kSecondsPerDay - 400, daemon_.user_active_last_); | 550 EXPECT_EQ(TestTime(9 * kSecondsPerDay - 200), daemon_.user_active_last_); |
551 EXPECT_EQ(8, daemon_.daily_use_day_last_); | 551 EXPECT_EQ(8, daemon_.daily_use_day_last_); |
552 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); | 552 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); |
553 | 553 |
554 ExpectDailyUseTimeMetric(/* sample */ 10); | 554 ExpectDailyUseTimeMetric(/* sample */ 10); |
555 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay + 400); | 555 daemon_.SetUserActiveState(/* active */ true, |
| 556 TestTime(9 * kSecondsPerDay + 200)); |
556 EXPECT_TRUE(daemon_.user_active_); | 557 EXPECT_TRUE(daemon_.user_active_); |
557 EXPECT_EQ(9 * kSecondsPerDay + 400, daemon_.user_active_last_); | 558 EXPECT_EQ(TestTime(9 * kSecondsPerDay + 200), daemon_.user_active_last_); |
558 EXPECT_EQ(9, daemon_.daily_use_day_last_); | 559 EXPECT_EQ(9, daemon_.daily_use_day_last_); |
559 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 800); | 560 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 400); |
| 561 } |
| 562 |
| 563 TEST_F(MetricsDaemonTest, SetUserActiveStateTimeJump) { |
| 564 daemon_.SetUserActiveState(/* active */ true, |
| 565 TestTime(10 * kSecondsPerDay + 500)); |
| 566 EXPECT_TRUE(daemon_.user_active_); |
| 567 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 500), daemon_.user_active_last_); |
| 568 EXPECT_EQ(10, daemon_.daily_use_day_last_); |
| 569 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 570 |
| 571 daemon_.SetUserActiveState(/* active */ true, |
| 572 TestTime(10 * kSecondsPerDay + 300)); |
| 573 EXPECT_TRUE(daemon_.user_active_); |
| 574 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_); |
| 575 EXPECT_EQ(10, daemon_.daily_use_day_last_); |
| 576 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 577 |
| 578 daemon_.SetUserActiveState(/* active */ true, |
| 579 TestTime(10 * kSecondsPerDay + 1000)); |
| 580 EXPECT_TRUE(daemon_.user_active_); |
| 581 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_); |
| 582 EXPECT_EQ(10, daemon_.daily_use_day_last_); |
| 583 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
560 } | 584 } |
561 | 585 |
562 int main(int argc, char **argv) { | 586 int main(int argc, char **argv) { |
563 testing::InitGoogleTest(&argc, argv); | 587 testing::InitGoogleTest(&argc, argv); |
564 return RUN_ALL_TESTS(); | 588 return RUN_ALL_TESTS(); |
565 } | 589 } |
OLD | NEW |