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

Side by Side Diff: metrics_daemon_test.cc

Issue 2736008: Measure and report time between user-space process crashes. (Closed) Base URL: ssh://git@chromiumos-git/metrics.git
Patch Set: No need to start the back off again on crashes. Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « metrics_daemon.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <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
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
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
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
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 }
OLDNEW
« no previous file with comments | « metrics_daemon.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698