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 <gtest/gtest.h> | 5 #include <gtest/gtest.h> |
6 | 6 |
7 #include "counter_mock.h" | 7 #include "counter_mock.h" |
8 #include "metrics_daemon.h" | 8 #include "metrics_daemon.h" |
9 #include "metrics_library_mock.h" | 9 #include "metrics_library_mock.h" |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 // Overloaded for test failure printing purposes. | 35 // Overloaded for test failure printing purposes. |
36 static std::ostream& operator<<(std::ostream& o, const Time& time) { | 36 static std::ostream& operator<<(std::ostream& o, const Time& time) { |
37 o << time.ToInternalValue() << "us"; | 37 o << time.ToInternalValue() << "us"; |
38 return o; | 38 return o; |
39 }; | 39 }; |
40 | 40 |
41 class MetricsDaemonTest : public testing::Test { | 41 class MetricsDaemonTest : public testing::Test { |
42 protected: | 42 protected: |
43 virtual void SetUp() { | 43 virtual void SetUp() { |
44 EXPECT_EQ(NULL, daemon_.daily_use_.get()); | 44 EXPECT_EQ(NULL, daemon_.daily_use_.get()); |
| 45 EXPECT_EQ(NULL, daemon_.user_crash_interval_.get()); |
45 daemon_.Init(true, &metrics_lib_); | 46 daemon_.Init(true, &metrics_lib_); |
46 | 47 |
47 // Tests constructor initialization. Switches to mock counters. | 48 // Tests constructor initialization. Switches to mock counters. |
48 EXPECT_TRUE(NULL != daemon_.daily_use_.get()); | 49 EXPECT_TRUE(NULL != daemon_.daily_use_.get()); |
| 50 EXPECT_TRUE(NULL != daemon_.user_crash_interval_.get()); |
| 51 |
| 52 // Allocates mock counter and transfers ownership. |
49 daily_use_ = new StrictMock<TaggedCounterMock>(); | 53 daily_use_ = new StrictMock<TaggedCounterMock>(); |
50 daemon_.daily_use_.reset(daily_use_); // Transfers ownership. | 54 daemon_.daily_use_.reset(daily_use_); |
| 55 user_crash_interval_ = new StrictMock<TaggedCounterMock>(); |
| 56 daemon_.user_crash_interval_.reset(user_crash_interval_); |
| 57 |
51 EXPECT_FALSE(daemon_.user_active_); | 58 EXPECT_FALSE(daemon_.user_active_); |
52 EXPECT_TRUE(daemon_.user_active_last_.is_null()); | 59 EXPECT_TRUE(daemon_.user_active_last_.is_null()); |
53 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 60 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
54 EXPECT_TRUE(daemon_.network_state_last_.is_null()); | 61 EXPECT_TRUE(daemon_.network_state_last_.is_null()); |
55 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 62 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
56 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 63 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
57 } | 64 } |
58 | 65 |
59 virtual void TearDown() {} | 66 virtual void TearDown() {} |
60 | 67 |
61 // Adds a daily use aggregation counter expectation that the | 68 // Adds active use aggregation counters update expectations that the |
62 // specified tag/count update will be generated. | 69 // specified tag/count update will be generated. |
63 void ExpectDailyUseUpdate(int tag, int count) { | 70 void ExpectActiveUseUpdate(int daily_tag, int count) { |
64 EXPECT_CALL(*daily_use_, Update(tag, count)) | 71 EXPECT_CALL(*daily_use_, Update(daily_tag, count)) |
| 72 .Times(1) |
| 73 .RetiresOnSaturation(); |
| 74 EXPECT_CALL(*user_crash_interval_, Update(0, count)) |
65 .Times(1) | 75 .Times(1) |
66 .RetiresOnSaturation(); | 76 .RetiresOnSaturation(); |
67 } | 77 } |
| 78 |
| 79 // Adds active use aggregation counters update expectations that |
| 80 // ignore the update arguments. |
| 81 void IgnoreActiveUseUpdate() { |
| 82 EXPECT_CALL(*daily_use_, Update(_, _)) |
| 83 .Times(1) |
| 84 .RetiresOnSaturation(); |
| 85 EXPECT_CALL(*user_crash_interval_, Update(_, _)) |
| 86 .Times(1) |
| 87 .RetiresOnSaturation(); |
| 88 } |
68 | 89 |
69 // Adds a metrics library mock expectation that the specified metric | 90 // Adds a metrics library mock expectation that the specified metric |
70 // will be generated. | 91 // will be generated. |
71 void ExpectMetric(const std::string& name, int sample, | 92 void ExpectMetric(const std::string& name, int sample, |
72 int min, int max, int buckets) { | 93 int min, int max, int buckets) { |
73 EXPECT_CALL(metrics_lib_, SendToUMA(name, sample, min, max, buckets)) | 94 EXPECT_CALL(metrics_lib_, SendToUMA(name, sample, min, max, buckets)) |
74 .Times(1) | 95 .Times(1) |
75 .WillOnce(Return(true)) | 96 .WillOnce(Return(true)) |
76 .RetiresOnSaturation(); | 97 .RetiresOnSaturation(); |
77 } | 98 } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 dbus_message_unref(msg); | 148 dbus_message_unref(msg); |
128 } | 149 } |
129 | 150 |
130 // The MetricsDaemon under test. | 151 // The MetricsDaemon under test. |
131 MetricsDaemon daemon_; | 152 MetricsDaemon daemon_; |
132 | 153 |
133 // Metrics library mock. It's a strict mock so that all unexpected | 154 // Metrics library mock. It's a strict mock so that all unexpected |
134 // metric generation calls are marked as failures. | 155 // metric generation calls are marked as failures. |
135 StrictMock<MetricsLibraryMock> metrics_lib_; | 156 StrictMock<MetricsLibraryMock> metrics_lib_; |
136 | 157 |
137 // Daily use time aggregation counter mock. It's a strict mock so | 158 // Counter mocks. They are strict mocks so that all unexpected |
138 // that all unexpected update calls are marked as failures. It's a | 159 // update calls are marked as failures. They are pointers so that |
139 // pointer so that it can replace the scoped_ptr allocated by the | 160 // they can replace the scoped_ptr's allocated by the daemon. |
140 // daemon. | |
141 StrictMock<TaggedCounterMock>* daily_use_; | 161 StrictMock<TaggedCounterMock>* daily_use_; |
| 162 StrictMock<TaggedCounterMock>* user_crash_interval_; |
142 }; | 163 }; |
143 | 164 |
144 TEST_F(MetricsDaemonTest, DailyUseReporter) { | 165 TEST_F(MetricsDaemonTest, DailyUseReporter) { |
145 ExpectDailyUseTimeMetric(/* sample */ 2); | 166 ExpectDailyUseTimeMetric(/* sample */ 2); |
146 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 20, /* count */ 90); | 167 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 20, /* count */ 90); |
147 | 168 |
148 ExpectDailyUseTimeMetric(/* sample */ 1); | 169 ExpectDailyUseTimeMetric(/* sample */ 1); |
149 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 23, /* count */ 89); | 170 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 23, /* count */ 89); |
| 171 |
| 172 // There should be no metrics generated for the calls below. |
| 173 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 50, /* count */ 0); |
| 174 MetricsDaemon::DailyUseReporter(&daemon_, /* tag */ 60, /* count */ -5); |
150 } | 175 } |
151 | 176 |
152 TEST_F(MetricsDaemonTest, LookupNetworkState) { | 177 TEST_F(MetricsDaemonTest, LookupNetworkState) { |
153 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, | 178 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, |
154 daemon_.LookupNetworkState("online")); | 179 daemon_.LookupNetworkState("online")); |
155 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, | 180 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, |
156 daemon_.LookupNetworkState("offline")); | 181 daemon_.LookupNetworkState("offline")); |
157 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, | 182 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, |
158 daemon_.LookupNetworkState("somestate")); | 183 daemon_.LookupNetworkState("somestate")); |
159 } | 184 } |
(...skipping 16 matching lines...) Expand all Loading... |
176 daemon_.LookupSessionState("somestate")); | 201 daemon_.LookupSessionState("somestate")); |
177 } | 202 } |
178 | 203 |
179 TEST_F(MetricsDaemonTest, MessageFilter) { | 204 TEST_F(MetricsDaemonTest, MessageFilter) { |
180 DBusMessage* msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL); | 205 DBusMessage* msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL); |
181 DBusHandlerResult res = | 206 DBusHandlerResult res = |
182 MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 207 MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
183 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); | 208 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); |
184 DeleteDBusMessage(msg); | 209 DeleteDBusMessage(msg); |
185 | 210 |
| 211 IgnoreActiveUseUpdate(); |
| 212 EXPECT_CALL(*user_crash_interval_, Flush()) |
| 213 .Times(1) |
| 214 .RetiresOnSaturation(); |
| 215 msg = NewDBusSignalString("/", |
| 216 "org.chromium.CrashReporter", |
| 217 "UserCrash", |
| 218 ""); |
| 219 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 220 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
| 221 DeleteDBusMessage(msg); |
| 222 |
186 msg = NewDBusSignalString("/", | 223 msg = NewDBusSignalString("/", |
187 "org.chromium.flimflam.Manager", | 224 "org.chromium.flimflam.Manager", |
188 "StateChanged", | 225 "StateChanged", |
189 "online"); | 226 "online"); |
190 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 227 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
191 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 228 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
192 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 229 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
193 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); | 230 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
194 DeleteDBusMessage(msg); | 231 DeleteDBusMessage(msg); |
195 | 232 |
196 msg = NewDBusSignalString("/", | 233 msg = NewDBusSignalString("/", |
197 "org.chromium.PowerManager", | 234 "org.chromium.PowerManager", |
198 "PowerStateChanged", | 235 "PowerStateChanged", |
199 "on"); | 236 "on"); |
200 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 237 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
201 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 238 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
202 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | 239 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
203 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); | 240 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
204 DeleteDBusMessage(msg); | 241 DeleteDBusMessage(msg); |
205 | 242 |
206 EXPECT_CALL(*daily_use_, Update(_, 0)) | 243 IgnoreActiveUseUpdate(); |
207 .Times(1) | |
208 .RetiresOnSaturation(); | |
209 msg = NewDBusSignalString("/", | 244 msg = NewDBusSignalString("/", |
210 "org.chromium.PowerManager", | 245 "org.chromium.PowerManager", |
211 "ScreenIsUnlocked", | 246 "ScreenIsUnlocked", |
212 ""); | 247 ""); |
213 EXPECT_FALSE(daemon_.user_active_); | 248 EXPECT_FALSE(daemon_.user_active_); |
214 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 249 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
215 EXPECT_TRUE(daemon_.user_active_); | 250 EXPECT_TRUE(daemon_.user_active_); |
216 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); | 251 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
217 DeleteDBusMessage(msg); | 252 DeleteDBusMessage(msg); |
218 | 253 |
219 EXPECT_CALL(*daily_use_, Update(_, 0)) | 254 IgnoreActiveUseUpdate(); |
220 .Times(1) | |
221 .RetiresOnSaturation(); | |
222 msg = NewDBusSignalString("/org/chromium/SessionManager", | 255 msg = NewDBusSignalString("/org/chromium/SessionManager", |
223 "org.chromium.SessionManagerInterface", | 256 "org.chromium.SessionManagerInterface", |
224 "SessionStateChanged", | 257 "SessionStateChanged", |
225 "started"); | 258 "started"); |
226 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 259 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
227 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 260 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
228 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); | 261 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); |
229 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); | 262 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
230 DeleteDBusMessage(msg); | 263 DeleteDBusMessage(msg); |
231 | 264 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 309 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
277 EXPECT_EQ(TestTicks(105), daemon_.network_state_last_); | 310 EXPECT_EQ(TestTicks(105), daemon_.network_state_last_); |
278 | 311 |
279 ExpectTimeToNetworkDropMetric(3); | 312 ExpectTimeToNetworkDropMetric(3); |
280 daemon_.NetStateChanged("offline", TestTicks(108)); | 313 daemon_.NetStateChanged("offline", TestTicks(108)); |
281 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 314 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
282 EXPECT_EQ(TestTicks(108), daemon_.network_state_last_); | 315 EXPECT_EQ(TestTicks(108), daemon_.network_state_last_); |
283 } | 316 } |
284 | 317 |
285 TEST_F(MetricsDaemonTest, PowerStateChanged) { | 318 TEST_F(MetricsDaemonTest, PowerStateChanged) { |
286 ExpectDailyUseUpdate(7, 0); | 319 ExpectActiveUseUpdate(7, 0); |
287 daemon_.SetUserActiveState(/* active */ true, | 320 daemon_.SetUserActiveState(/* active */ true, |
288 TestTime(7 * kSecondsPerDay + 15)); | 321 TestTime(7 * kSecondsPerDay + 15)); |
289 EXPECT_TRUE(daemon_.user_active_); | 322 EXPECT_TRUE(daemon_.user_active_); |
290 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 15), daemon_.user_active_last_); | 323 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 15), daemon_.user_active_last_); |
291 | 324 |
292 ExpectDailyUseUpdate(7, 30); | 325 ExpectActiveUseUpdate(7, 30); |
293 daemon_.PowerStateChanged("mem", TestTime(7 * kSecondsPerDay + 45)); | 326 daemon_.PowerStateChanged("mem", TestTime(7 * kSecondsPerDay + 45)); |
294 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); | 327 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); |
295 EXPECT_FALSE(daemon_.user_active_); | 328 EXPECT_FALSE(daemon_.user_active_); |
296 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); | 329 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); |
297 | 330 |
298 daemon_.PowerStateChanged("on", TestTime(7 * kSecondsPerDay + 85)); | 331 daemon_.PowerStateChanged("on", TestTime(7 * kSecondsPerDay + 85)); |
299 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | 332 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
300 EXPECT_FALSE(daemon_.user_active_); | 333 EXPECT_FALSE(daemon_.user_active_); |
301 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); | 334 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 45), daemon_.user_active_last_); |
302 | 335 |
303 ExpectDailyUseUpdate(7, 0); | 336 ExpectActiveUseUpdate(7, 0); |
304 daemon_.PowerStateChanged("otherstate", TestTime(7 * kSecondsPerDay + 185)); | 337 daemon_.PowerStateChanged("otherstate", TestTime(7 * kSecondsPerDay + 185)); |
305 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 338 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
306 EXPECT_FALSE(daemon_.user_active_); | 339 EXPECT_FALSE(daemon_.user_active_); |
307 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_); | 340 EXPECT_EQ(TestTime(7 * kSecondsPerDay + 185), daemon_.user_active_last_); |
308 } | 341 } |
309 | 342 |
| 343 TEST_F(MetricsDaemonTest, ProcessUserCrash) { |
| 344 IgnoreActiveUseUpdate(); |
| 345 EXPECT_CALL(*user_crash_interval_, Flush()) |
| 346 .Times(1) |
| 347 .RetiresOnSaturation(); |
| 348 daemon_.ProcessUserCrash(); |
| 349 } |
| 350 |
310 TEST_F(MetricsDaemonTest, SendMetric) { | 351 TEST_F(MetricsDaemonTest, SendMetric) { |
311 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); | 352 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); |
312 daemon_.SendMetric("Dummy.Metric", /* sample */ 3, | 353 daemon_.SendMetric("Dummy.Metric", /* sample */ 3, |
313 /* min */ 1, /* max */ 100, /* buckets */ 50); | 354 /* min */ 1, /* max */ 100, /* buckets */ 50); |
314 } | 355 } |
315 | 356 |
316 TEST_F(MetricsDaemonTest, SessionStateChanged) { | 357 TEST_F(MetricsDaemonTest, SessionStateChanged) { |
317 ExpectDailyUseUpdate(15, 0); | 358 ExpectActiveUseUpdate(15, 0); |
318 daemon_.SessionStateChanged("started", TestTime(15 * kSecondsPerDay + 20)); | 359 daemon_.SessionStateChanged("started", TestTime(15 * kSecondsPerDay + 20)); |
319 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); | 360 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); |
320 EXPECT_TRUE(daemon_.user_active_); | 361 EXPECT_TRUE(daemon_.user_active_); |
321 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 20), daemon_.user_active_last_); | 362 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 20), daemon_.user_active_last_); |
322 | 363 |
323 ExpectDailyUseUpdate(15, 130); | 364 ExpectActiveUseUpdate(15, 130); |
324 daemon_.SessionStateChanged("stopped", TestTime(15 * kSecondsPerDay + 150)); | 365 daemon_.SessionStateChanged("stopped", TestTime(15 * kSecondsPerDay + 150)); |
325 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); | 366 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); |
326 EXPECT_FALSE(daemon_.user_active_); | 367 EXPECT_FALSE(daemon_.user_active_); |
327 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 150), daemon_.user_active_last_); | 368 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 150), daemon_.user_active_last_); |
328 | 369 |
329 ExpectDailyUseUpdate(15, 0); | 370 ExpectActiveUseUpdate(15, 0); |
330 daemon_.SessionStateChanged("otherstate", | 371 daemon_.SessionStateChanged("otherstate", |
331 TestTime(15 * kSecondsPerDay + 300)); | 372 TestTime(15 * kSecondsPerDay + 300)); |
332 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 373 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
333 EXPECT_FALSE(daemon_.user_active_); | 374 EXPECT_FALSE(daemon_.user_active_); |
334 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 300), daemon_.user_active_last_); | 375 EXPECT_EQ(TestTime(15 * kSecondsPerDay + 300), daemon_.user_active_last_); |
335 } | 376 } |
336 | 377 |
337 TEST_F(MetricsDaemonTest, SetUserActiveState) { | 378 TEST_F(MetricsDaemonTest, SetUserActiveState) { |
338 ExpectDailyUseUpdate(5, 0); | 379 ExpectActiveUseUpdate(5, 0); |
339 daemon_.SetUserActiveState(/* active */ false, | 380 daemon_.SetUserActiveState(/* active */ false, |
340 TestTime(5 * kSecondsPerDay + 10)); | 381 TestTime(5 * kSecondsPerDay + 10)); |
341 EXPECT_FALSE(daemon_.user_active_); | 382 EXPECT_FALSE(daemon_.user_active_); |
342 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 10), daemon_.user_active_last_); | 383 EXPECT_EQ(TestTime(5 * kSecondsPerDay + 10), daemon_.user_active_last_); |
343 | 384 |
344 ExpectDailyUseUpdate(6, 0); | 385 ExpectActiveUseUpdate(6, 0); |
345 daemon_.SetUserActiveState(/* active */ true, | 386 daemon_.SetUserActiveState(/* active */ true, |
346 TestTime(6 * kSecondsPerDay + 20)); | 387 TestTime(6 * kSecondsPerDay + 20)); |
347 EXPECT_TRUE(daemon_.user_active_); | 388 EXPECT_TRUE(daemon_.user_active_); |
348 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 20), daemon_.user_active_last_); | 389 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 20), daemon_.user_active_last_); |
349 | 390 |
350 ExpectDailyUseUpdate(6, 100); | 391 ExpectActiveUseUpdate(6, 100); |
351 daemon_.SetUserActiveState(/* active */ true, | 392 daemon_.SetUserActiveState(/* active */ true, |
352 TestTime(6 * kSecondsPerDay + 120)); | 393 TestTime(6 * kSecondsPerDay + 120)); |
353 EXPECT_TRUE(daemon_.user_active_); | 394 EXPECT_TRUE(daemon_.user_active_); |
354 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 120), daemon_.user_active_last_); | 395 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 120), daemon_.user_active_last_); |
355 | 396 |
356 ExpectDailyUseUpdate(6, 110); | 397 ExpectActiveUseUpdate(6, 110); |
357 daemon_.SetUserActiveState(/* active */ false, | 398 daemon_.SetUserActiveState(/* active */ false, |
358 TestTime(6 * kSecondsPerDay + 230)); | 399 TestTime(6 * kSecondsPerDay + 230)); |
359 EXPECT_FALSE(daemon_.user_active_); | 400 EXPECT_FALSE(daemon_.user_active_); |
360 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 230), daemon_.user_active_last_); | 401 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 230), daemon_.user_active_last_); |
361 | 402 |
362 ExpectDailyUseUpdate(6, 0); | 403 ExpectActiveUseUpdate(6, 0); |
363 daemon_.SetUserActiveState(/* active */ false, | 404 daemon_.SetUserActiveState(/* active */ false, |
364 TestTime(6 * kSecondsPerDay + 260)); | 405 TestTime(6 * kSecondsPerDay + 260)); |
365 EXPECT_FALSE(daemon_.user_active_); | 406 EXPECT_FALSE(daemon_.user_active_); |
366 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 260), daemon_.user_active_last_); | 407 EXPECT_EQ(TestTime(6 * kSecondsPerDay + 260), daemon_.user_active_last_); |
367 } | 408 } |
368 | 409 |
369 TEST_F(MetricsDaemonTest, SetUserActiveStateTimeJump) { | 410 TEST_F(MetricsDaemonTest, SetUserActiveStateTimeJump) { |
370 ExpectDailyUseUpdate(10, 0); | 411 ExpectActiveUseUpdate(10, 0); |
371 daemon_.SetUserActiveState(/* active */ true, | 412 daemon_.SetUserActiveState(/* active */ true, |
372 TestTime(10 * kSecondsPerDay + 500)); | 413 TestTime(10 * kSecondsPerDay + 500)); |
373 EXPECT_TRUE(daemon_.user_active_); | 414 EXPECT_TRUE(daemon_.user_active_); |
374 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 500), daemon_.user_active_last_); | 415 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 500), daemon_.user_active_last_); |
375 | 416 |
376 ExpectDailyUseUpdate(10, 0); | 417 ExpectActiveUseUpdate(10, 0); |
377 daemon_.SetUserActiveState(/* active */ true, | 418 daemon_.SetUserActiveState(/* active */ true, |
378 TestTime(10 * kSecondsPerDay + 300)); | 419 TestTime(10 * kSecondsPerDay + 300)); |
379 EXPECT_TRUE(daemon_.user_active_); | 420 EXPECT_TRUE(daemon_.user_active_); |
380 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_); | 421 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 300), daemon_.user_active_last_); |
381 | 422 |
382 ExpectDailyUseUpdate(10, 0); | 423 ExpectActiveUseUpdate(10, 0); |
383 daemon_.SetUserActiveState(/* active */ true, | 424 daemon_.SetUserActiveState(/* active */ true, |
384 TestTime(10 * kSecondsPerDay + 1000)); | 425 TestTime(10 * kSecondsPerDay + 1000)); |
385 EXPECT_TRUE(daemon_.user_active_); | 426 EXPECT_TRUE(daemon_.user_active_); |
386 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_); | 427 EXPECT_EQ(TestTime(10 * kSecondsPerDay + 1000), daemon_.user_active_last_); |
387 } | 428 } |
388 | 429 |
| 430 TEST_F(MetricsDaemonTest, UserCrashIntervalReporter) { |
| 431 ExpectMetric(MetricsDaemon::kMetricUserCrashIntervalName, 50, |
| 432 MetricsDaemon::kMetricUserCrashIntervalMin, |
| 433 MetricsDaemon::kMetricUserCrashIntervalMax, |
| 434 MetricsDaemon::kMetricUserCrashIntervalBuckets); |
| 435 MetricsDaemon::UserCrashIntervalReporter(&daemon_, 0, 50); |
| 436 } |
| 437 |
389 int main(int argc, char** argv) { | 438 int main(int argc, char** argv) { |
390 testing::InitGoogleTest(&argc, argv); | 439 testing::InitGoogleTest(&argc, argv); |
391 return RUN_ALL_TESTS(); | 440 return RUN_ALL_TESTS(); |
392 } | 441 } |
OLD | NEW |