| Index: metrics_daemon_test.cc
|
| diff --git a/metrics_daemon_test.cc b/metrics_daemon_test.cc
|
| index 7119c8506f51332091b5b19357f1e261444bb52b..1f2c0fa4501c817c970c98b759174c313a71ef8d 100644
|
| --- a/metrics_daemon_test.cc
|
| +++ b/metrics_daemon_test.cc
|
| @@ -42,12 +42,19 @@ class MetricsDaemonTest : public testing::Test {
|
| protected:
|
| virtual void SetUp() {
|
| EXPECT_EQ(NULL, daemon_.daily_use_.get());
|
| + EXPECT_EQ(NULL, daemon_.user_crash_interval_.get());
|
| daemon_.Init(true, &metrics_lib_);
|
|
|
| // Tests constructor initialization. Switches to mock counters.
|
| EXPECT_TRUE(NULL != daemon_.daily_use_.get());
|
| + EXPECT_TRUE(NULL != daemon_.user_crash_interval_.get());
|
| +
|
| + // Allocates mock counter and transfers ownership.
|
| daily_use_ = new StrictMock<TaggedCounterMock>();
|
| - daemon_.daily_use_.reset(daily_use_); // Transfers ownership.
|
| + daemon_.daily_use_.reset(daily_use_);
|
| + user_crash_interval_ = new StrictMock<TaggedCounterMock>();
|
| + daemon_.user_crash_interval_.reset(user_crash_interval_);
|
| +
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_TRUE(daemon_.user_active_last_.is_null());
|
| EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_);
|
| @@ -58,10 +65,24 @@ class MetricsDaemonTest : public testing::Test {
|
|
|
| virtual void TearDown() {}
|
|
|
| - // Adds a daily use aggregation counter expectation that the
|
| + // Adds active use aggregation counters update expectations that the
|
| // specified tag/count update will be generated.
|
| - void ExpectDailyUseUpdate(int tag, int count) {
|
| - EXPECT_CALL(*daily_use_, Update(tag, count))
|
| + void ExpectActiveUseUpdate(int daily_tag, int count) {
|
| + EXPECT_CALL(*daily_use_, Update(daily_tag, count))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*user_crash_interval_, Update(0, count))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + }
|
| +
|
| + // Adds active use aggregation counters update expectations that
|
| + // ignore the update arguments.
|
| + void IgnoreActiveUseUpdate() {
|
| + EXPECT_CALL(*daily_use_, Update(_, _))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*user_crash_interval_, Update(_, _))
|
| .Times(1)
|
| .RetiresOnSaturation();
|
| }
|
| @@ -134,11 +155,11 @@ class MetricsDaemonTest : public testing::Test {
|
| // metric generation calls are marked as failures.
|
| StrictMock<MetricsLibraryMock> metrics_lib_;
|
|
|
| - // Daily use time aggregation counter mock. It's a strict mock so
|
| - // that all unexpected update calls are marked as failures. It's a
|
| - // pointer so that it can replace the scoped_ptr allocated by the
|
| - // daemon.
|
| + // Counter mocks. They are strict mocks so that all unexpected
|
| + // update calls are marked as failures. They are pointers so that
|
| + // they can replace the scoped_ptr's allocated by the daemon.
|
| StrictMock<TaggedCounterMock>* daily_use_;
|
| + StrictMock<TaggedCounterMock>* user_crash_interval_;
|
| };
|
|
|
| TEST_F(MetricsDaemonTest, DailyUseReporter) {
|
| @@ -147,6 +168,10 @@ TEST_F(MetricsDaemonTest, DailyUseReporter) {
|
|
|
| ExpectDailyUseTimeMetric(/* sample */ 1);
|
| MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 23, /* count */ 89);
|
| +
|
| + // There should be no metrics generated for the calls below.
|
| + MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 50, /* count */ 0);
|
| + MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 60, /* count */ -5);
|
| }
|
|
|
| TEST_F(MetricsDaemonTest, LookupNetworkState) {
|
| @@ -183,6 +208,18 @@ TEST_F(MetricsDaemonTest, MessageFilter) {
|
| EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res);
|
| DeleteDBusMessage(msg);
|
|
|
| + IgnoreActiveUseUpdate();
|
| + EXPECT_CALL(*user_crash_interval_, Flush())
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + msg = NewDBusSignalString("/",
|
| + "org.chromium.CrashReporter",
|
| + "UserCrash",
|
| + "");
|
| + res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_);
|
| + EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res);
|
| + DeleteDBusMessage(msg);
|
| +
|
| msg = NewDBusSignalString("/",
|
| "org.chromium.flimflam.Manager",
|
| "StateChanged",
|
| @@ -203,9 +240,7 @@ TEST_F(MetricsDaemonTest, MessageFilter) {
|
| EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res);
|
| DeleteDBusMessage(msg);
|
|
|
| - EXPECT_CALL(*daily_use_, Update(_, 0))
|
| - .Times(1)
|
| - .RetiresOnSaturation();
|
| + IgnoreActiveUseUpdate();
|
| msg = NewDBusSignalString("/",
|
| "org.chromium.PowerManager",
|
| "ScreenIsUnlocked",
|
| @@ -216,9 +251,7 @@ TEST_F(MetricsDaemonTest, MessageFilter) {
|
| EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res);
|
| DeleteDBusMessage(msg);
|
|
|
| - EXPECT_CALL(*daily_use_, Update(_, 0))
|
| - .Times(1)
|
| - .RetiresOnSaturation();
|
| + IgnoreActiveUseUpdate();
|
| msg = NewDBusSignalString("/org/chromium/SessionManager",
|
| "org.chromium.SessionManagerInterface",
|
| "SessionStateChanged",
|
| @@ -283,13 +316,13 @@ TEST_F(MetricsDaemonTest, NetStateChangedSuspend) {
|
| }
|
|
|
| TEST_F(MetricsDaemonTest, PowerStateChanged) {
|
| - ExpectDailyUseUpdate(7, 0);
|
| + ExpectActiveUseUpdate(7, 0);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(7 * kSecondsPerDay + 15));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(7 * kSecondsPerDay + 15), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(7, 30);
|
| + ExpectActiveUseUpdate(7, 30);
|
| daemon_.PowerStateChanged("mem", TestTime(7 * kSecondsPerDay + 45));
|
| EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_);
|
| EXPECT_FALSE(daemon_.user_active_);
|
| @@ -300,13 +333,21 @@ TEST_F(MetricsDaemonTest, PowerStateChanged) {
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(7, 0);
|
| + ExpectActiveUseUpdate(7, 0);
|
| daemon_.PowerStateChanged("otherstate", TestTime(7 * kSecondsPerDay + 185));
|
| EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_);
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_);
|
| }
|
|
|
| +TEST_F(MetricsDaemonTest, ProcessUserCrash) {
|
| + IgnoreActiveUseUpdate();
|
| + EXPECT_CALL(*user_crash_interval_, Flush())
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + daemon_.ProcessUserCrash();
|
| +}
|
| +
|
| TEST_F(MetricsDaemonTest, SendMetric) {
|
| ExpectMetric("Dummy.Metric", 3, 1, 100, 50);
|
| daemon_.SendMetric("Dummy.Metric", /* sample */ 3,
|
| @@ -314,19 +355,19 @@ TEST_F(MetricsDaemonTest, SendMetric) {
|
| }
|
|
|
| TEST_F(MetricsDaemonTest, SessionStateChanged) {
|
| - ExpectDailyUseUpdate(15, 0);
|
| + ExpectActiveUseUpdate(15, 0);
|
| daemon_.SessionStateChanged("started", TestTime(15 * kSecondsPerDay + 20));
|
| EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_);
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(15 * kSecondsPerDay + 20), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(15, 130);
|
| + ExpectActiveUseUpdate(15, 130);
|
| daemon_.SessionStateChanged("stopped", TestTime(15 * kSecondsPerDay + 150));
|
| EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_);
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(15 * kSecondsPerDay + 150), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(15, 0);
|
| + ExpectActiveUseUpdate(15, 0);
|
| daemon_.SessionStateChanged("otherstate",
|
| TestTime(15 * kSecondsPerDay + 300));
|
| EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_);
|
| @@ -335,31 +376,31 @@ TEST_F(MetricsDaemonTest, SessionStateChanged) {
|
| }
|
|
|
| TEST_F(MetricsDaemonTest, SetUserActiveState) {
|
| - ExpectDailyUseUpdate(5, 0);
|
| + ExpectActiveUseUpdate(5, 0);
|
| daemon_.SetUserActiveState(/* active */ false,
|
| TestTime(5 * kSecondsPerDay + 10));
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(5 * kSecondsPerDay + 10), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(6, 0);
|
| + ExpectActiveUseUpdate(6, 0);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(6 * kSecondsPerDay + 20));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(6 * kSecondsPerDay + 20), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(6, 100);
|
| + ExpectActiveUseUpdate(6, 100);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(6 * kSecondsPerDay + 120));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(6 * kSecondsPerDay + 120), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(6, 110);
|
| + ExpectActiveUseUpdate(6, 110);
|
| daemon_.SetUserActiveState(/* active */ false,
|
| TestTime(6 * kSecondsPerDay + 230));
|
| EXPECT_FALSE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(6 * kSecondsPerDay + 230), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(6, 0);
|
| + ExpectActiveUseUpdate(6, 0);
|
| daemon_.SetUserActiveState(/* active */ false,
|
| TestTime(6 * kSecondsPerDay + 260));
|
| EXPECT_FALSE(daemon_.user_active_);
|
| @@ -367,25 +408,33 @@ TEST_F(MetricsDaemonTest, SetUserActiveState) {
|
| }
|
|
|
| TEST_F(MetricsDaemonTest, SetUserActiveStateTimeJump) {
|
| - ExpectDailyUseUpdate(10, 0);
|
| + ExpectActiveUseUpdate(10, 0);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(10 * kSecondsPerDay + 500));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(10 * kSecondsPerDay + 500), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(10, 0);
|
| + ExpectActiveUseUpdate(10, 0);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(10 * kSecondsPerDay + 300));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_);
|
|
|
| - ExpectDailyUseUpdate(10, 0);
|
| + ExpectActiveUseUpdate(10, 0);
|
| daemon_.SetUserActiveState(/* active */ true,
|
| TestTime(10 * kSecondsPerDay + 1000));
|
| EXPECT_TRUE(daemon_.user_active_);
|
| EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_);
|
| }
|
|
|
| +TEST_F(MetricsDaemonTest, UserCrashIntervalReporter) {
|
| + ExpectMetric(MetricsDaemon::kMetricUserCrashIntervalName, 50,
|
| + MetricsDaemon::kMetricUserCrashIntervalMin,
|
| + MetricsDaemon::kMetricUserCrashIntervalMax,
|
| + MetricsDaemon::kMetricUserCrashIntervalBuckets);
|
| + MetricsDaemon::UserCrashIntervalReporter(&daemon_, 0, 50);
|
| +}
|
| +
|
| int main(int argc, char** argv) {
|
| testing::InitGoogleTest(&argc, argv);
|
| return RUN_ALL_TESTS();
|
|
|