| 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 |