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 | 7 |
7 #include <sys/file.h> | 8 #include <sys/file.h> |
8 | 9 |
9 #include <base/eintr_wrapper.h> | 10 #include <base/eintr_wrapper.h> |
10 #include <base/file_util.h> | 11 #include <base/file_util.h> |
11 #include <base/logging.h> | 12 #include <base/logging.h> |
12 #include <base/string_util.h> | 13 #include <base/string_util.h> |
13 #include <gtest/gtest.h> | 14 #include <gtest/gtest.h> |
14 | 15 |
| 16 using ::testing::Mock; |
| 17 using ::testing::Return; |
| 18 using ::testing::StrictMock; |
| 19 |
15 static const char kTestDailyUseRecordFile[] = "daily-usage-test"; | 20 static const char kTestDailyUseRecordFile[] = "daily-usage-test"; |
16 static const char kDoesNotExistFile[] = "/does/not/exist"; | 21 static const char kDoesNotExistFile[] = "/does/not/exist"; |
17 | 22 |
18 static const int kSecondsPerDay = 24 * 60 * 60; | 23 static const int kSecondsPerDay = 24 * 60 * 60; |
19 | 24 |
20 class MetricsDaemonTest : public testing::Test { | 25 class MetricsDaemonTest : public testing::Test { |
21 protected: | 26 protected: |
22 virtual void SetUp() { | 27 virtual void SetUp() { |
23 daemon_.Init(true); | 28 daemon_.Init(true, &metrics_lib_); |
24 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; | 29 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; |
25 | 30 |
26 // The test fixture object will be used by the log message handler. | 31 // The test fixture object will be used by the log message handler. |
27 daemon_test_ = this; | 32 daemon_test_ = this; |
28 logging::SetLogMessageHandler(LogMessageHandler); | 33 logging::SetLogMessageHandler(HandleLogMessages); |
29 } | 34 } |
30 | 35 |
31 virtual void TearDown() { | 36 virtual void TearDown() { |
32 logging::SetLogMessageHandler(NULL); | 37 logging::SetLogMessageHandler(NULL); |
33 daemon_test_ = NULL; | 38 daemon_test_ = NULL; |
34 file_util::Delete(FilePath(kTestDailyUseRecordFile), false); | 39 file_util::Delete(FilePath(kTestDailyUseRecordFile), false); |
35 } | 40 } |
36 | 41 |
37 // Collects log messages in the |daemon_log_| member string so that | 42 // Collects log messages in the |daemon_log_| member string so that |
38 // they can be analyzed for errors and expected behavior. | 43 // they can be analyzed for errors and expected behavior. |
39 static bool LogMessageHandler(int severity, const std::string& str) { | 44 static bool HandleLogMessages(int severity, const std::string& str) { |
40 daemon_test_->daemon_log_.append(str); | 45 daemon_test_->daemon_log_.append(str); |
41 daemon_test_->daemon_log_.append("\n"); | 46 daemon_test_->daemon_log_.append("\n"); |
42 | 47 |
43 // Returning true would mute the log. | 48 // Returning true would mute the log. |
44 return false; | 49 return false; |
45 } | 50 } |
46 | 51 |
47 // Returns true if the daemon log contains |pattern|, false otherwise. | 52 // Returns true if the daemon log contains |pattern|, false otherwise. |
48 bool LogContains(const std::string& pattern) { | 53 bool LogContains(const std::string& pattern) { |
49 return daemon_log_.find(pattern) != std::string::npos; | 54 return daemon_log_.find(pattern) != std::string::npos; |
50 } | 55 } |
51 | 56 |
52 // Resets the daemon log history to empty. | 57 // Adds a metrics library mock expectation that the specified metric |
53 void LogReset() { | 58 // will be generated. |
54 daemon_log_.clear(); | 59 void ExpectMetric(const std::string& name, int sample, |
| 60 int min, int max, int buckets) { |
| 61 EXPECT_CALL(metrics_lib_, SendToUMA(name, sample, min, max, buckets)) |
| 62 .Times(1) |
| 63 .WillOnce(Return(true)) |
| 64 .RetiresOnSaturation(); |
55 } | 65 } |
56 | 66 |
57 // Returns true if the specified metric is found in the generated | 67 // Adds a metrics library mock expectation that the specified daily |
58 // log so far, false otherwise. | 68 // use time metric will be generated. |
59 bool AssertMetricGenerated(const std::string& name, int sample, | 69 void ExpectDailyUseTimeMetric(int sample) { |
60 int min, int max, int buckets) { | 70 ExpectMetric(MetricsDaemon::kMetricDailyUseTimeName, sample, |
61 return LogContains(StringPrintf("received metric: %s %d %d %d %d", | 71 MetricsDaemon::kMetricDailyUseTimeMin, |
62 name.c_str(), sample, min, max, buckets)); | 72 MetricsDaemon::kMetricDailyUseTimeMax, |
| 73 MetricsDaemon::kMetricDailyUseTimeBuckets); |
63 } | 74 } |
64 | 75 |
65 // Returns true if the specified daily use time metric is found in | 76 // Adds a metrics library mock expectation that the specified time |
66 // the generated log so far, false otherwise. | 77 // to network dropping metric will be generated. |
67 bool AssertDailyUseTimeMetric(int sample) { | 78 void ExpectTimeToNetworkDropMetric(int sample) { |
68 return AssertMetricGenerated( | 79 ExpectMetric(MetricsDaemon::kMetricTimeToNetworkDropName, sample, |
69 MetricsDaemon::kMetricDailyUseTimeName, sample, | 80 MetricsDaemon::kMetricTimeToNetworkDropMin, |
70 MetricsDaemon::kMetricDailyUseTimeMin, | 81 MetricsDaemon::kMetricTimeToNetworkDropMax, |
71 MetricsDaemon::kMetricDailyUseTimeMax, | 82 MetricsDaemon::kMetricTimeToNetworkDropBuckets); |
72 MetricsDaemon::kMetricDailyUseTimeBuckets); | |
73 } | |
74 | |
75 // Returns true if the specified time to network drop metric is | |
76 // found in the generated log so far, false otherwise. | |
77 bool AssertTimeToNetworkDropMetric(int sample) { | |
78 return AssertMetricGenerated( | |
79 MetricsDaemon::kMetricTimeToNetworkDropName, sample, | |
80 MetricsDaemon::kMetricTimeToNetworkDropMin, | |
81 MetricsDaemon::kMetricTimeToNetworkDropMax, | |
82 MetricsDaemon::kMetricTimeToNetworkDropBuckets); | |
83 } | |
84 | |
85 // Returns true if no metric can be found in the generated log so | |
86 // far, false otherwise. | |
87 bool NoMetricGenerated() { | |
88 return !LogContains("received metric"); | |
89 } | 83 } |
90 | 84 |
91 // Asserts that the daily use record file contains the specified | 85 // Asserts that the daily use record file contains the specified |
92 // contents. | 86 // contents. |
93 testing::AssertionResult AssertDailyUseRecord(const char* expr_day, | 87 testing::AssertionResult AssertDailyUseRecord(const char* expr_day, |
94 const char* expr_seconds, | 88 const char* expr_seconds, |
95 int expected_day, | 89 int expected_day, |
96 int expected_seconds) { | 90 int expected_seconds) { |
97 int fd = HANDLE_EINTR(open(daemon_.daily_use_record_file_, O_RDONLY)); | 91 int fd = HANDLE_EINTR(open(daemon_.daily_use_record_file_, O_RDONLY)); |
98 if (fd < 0) { | 92 if (fd < 0) { |
(...skipping 19 matching lines...) Expand all Loading... |
118 HANDLE_EINTR(close(fd)); | 112 HANDLE_EINTR(close(fd)); |
119 return testing::AssertionFailure(msg); | 113 return testing::AssertionFailure(msg); |
120 } | 114 } |
121 | 115 |
122 HANDLE_EINTR(close(fd)); | 116 HANDLE_EINTR(close(fd)); |
123 return testing::AssertionSuccess(); | 117 return testing::AssertionSuccess(); |
124 } | 118 } |
125 | 119 |
126 // Returns true if the daily use record file does not exist or is | 120 // Returns true if the daily use record file does not exist or is |
127 // empty, false otherwise. | 121 // empty, false otherwise. |
128 bool NoOrEmptyUseRecordFile() { | 122 bool AssertNoOrEmptyUseRecordFile() { |
129 FilePath record_file(daemon_.daily_use_record_file_); | 123 FilePath record_file(daemon_.daily_use_record_file_); |
130 int64 record_file_size; | 124 int64 record_file_size; |
131 return !file_util::PathExists(record_file) || | 125 return !file_util::PathExists(record_file) || |
132 (file_util::GetFileSize(record_file, &record_file_size) && | 126 (file_util::GetFileSize(record_file, &record_file_size) && |
133 record_file_size == 0); | 127 record_file_size == 0); |
134 } | 128 } |
135 | 129 |
136 // Creates a new DBus signal message with a single string | 130 // Creates a new DBus signal message with a single string |
137 // argument. The message can be deallocated through | 131 // argument. The message can be deallocated through |
138 // DeleteDBusMessage. | 132 // DeleteDBusMessage. |
(...skipping 21 matching lines...) Expand all Loading... |
160 void DeleteDBusMessage(DBusMessage* msg) { | 154 void DeleteDBusMessage(DBusMessage* msg) { |
161 dbus_message_unref(msg); | 155 dbus_message_unref(msg); |
162 } | 156 } |
163 | 157 |
164 // Pointer to the current test fixture. | 158 // Pointer to the current test fixture. |
165 static MetricsDaemonTest* daemon_test_; | 159 static MetricsDaemonTest* daemon_test_; |
166 | 160 |
167 // The MetricsDaemon under test. | 161 // The MetricsDaemon under test. |
168 MetricsDaemon daemon_; | 162 MetricsDaemon daemon_; |
169 | 163 |
| 164 // Metrics library mock. It's a strict mock so that all unexpected |
| 165 // metric generation calls are marked as failures. |
| 166 StrictMock<MetricsLibraryMock> metrics_lib_; |
| 167 |
170 // The accumulated metrics daemon log. | 168 // The accumulated metrics daemon log. |
171 std::string daemon_log_; | 169 std::string daemon_log_; |
172 }; | 170 }; |
173 | 171 |
174 // static | 172 // static |
175 MetricsDaemonTest* MetricsDaemonTest::daemon_test_ = NULL; | 173 MetricsDaemonTest* MetricsDaemonTest::daemon_test_ = NULL; |
176 | 174 |
177 TEST_F(MetricsDaemonTest, LogDailyUseRecord) { | 175 TEST_F(MetricsDaemonTest, LogDailyUseRecordBadFileLocation) { |
| 176 // Checks that the daemon doesn't die badly if the file can't be |
| 177 // created. |
| 178 daemon_.daily_use_record_file_ = kDoesNotExistFile; |
| 179 daemon_.LogDailyUseRecord(10, 20); |
| 180 EXPECT_TRUE(LogContains("Unable to open the daily use file: " |
| 181 "No such file or directory")); |
178 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 182 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
179 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 183 file_util::Delete(FilePath(kDoesNotExistFile), false); |
| 184 } |
| 185 |
| 186 TEST_F(MetricsDaemonTest, LogDailyUseRecordOnLogin) { |
| 187 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
| 188 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
180 | 189 |
181 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 120); | 190 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 120); |
182 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); | 191 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); |
183 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 192 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
184 | 193 |
185 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 0); | 194 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 0); |
186 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); | 195 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 120); |
187 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 196 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
188 | 197 |
189 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 240); | 198 daemon_.LogDailyUseRecord(/* day */ 5, /* seconds */ 240); |
190 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 360); | 199 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 360); |
191 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 200 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
192 | 201 |
193 EXPECT_TRUE(NoMetricGenerated()); | 202 ExpectDailyUseTimeMetric(/* sample */ 6); |
| 203 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); |
| 204 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 205 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
| 206 } |
194 | 207 |
195 LogReset(); | 208 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundDown) { |
| 209 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
| 210 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 211 |
| 212 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); |
| 213 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 89); |
| 214 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
| 215 |
| 216 ExpectDailyUseTimeMetric(/* sample */ 1); |
| 217 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 15); |
| 218 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 15); |
| 219 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
| 220 } |
| 221 |
| 222 TEST_F(MetricsDaemonTest, LogDailyUseRecordRoundUp) { |
| 223 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
| 224 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 225 |
196 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); | 226 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 0); |
197 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | |
198 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 6)); | |
199 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 227 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
200 | 228 |
201 // Tests rounding use time to the closest minute. | 229 // Tests rounding use time to the closest minute. |
202 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 90); | 230 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 90); |
203 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 90); | 231 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 90); |
204 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 232 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
205 | 233 |
206 LogReset(); | 234 ExpectDailyUseTimeMetric(/* sample */ 2); |
207 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); | 235 daemon_.LogDailyUseRecord(/* day */ 7, /* seconds */ 89); |
208 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 89); | 236 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 89); |
209 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 2)); | |
210 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 237 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
211 | |
212 LogReset(); | |
213 daemon_.LogDailyUseRecord(/* day */ 6, /* seconds */ 15); | |
214 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 15); | |
215 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 1)); | |
216 EXPECT_EQ(6, daemon_.daily_use_day_last_); | |
217 | |
218 // Checks that the daemon doesn't die badly if the file can't be | |
219 // created. | |
220 LogReset(); | |
221 daemon_.daily_use_record_file_ = kDoesNotExistFile; | |
222 daemon_.LogDailyUseRecord(10, 20); | |
223 EXPECT_TRUE(LogContains("Unable to open the daily use file: " | |
224 "No such file or directory")); | |
225 EXPECT_EQ(6, daemon_.daily_use_day_last_); | |
226 file_util::Delete(FilePath(kDoesNotExistFile), false); | |
227 } | 238 } |
228 | 239 |
229 TEST_F(MetricsDaemonTest, LookupNetworkState) { | 240 TEST_F(MetricsDaemonTest, LookupNetworkState) { |
230 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, | 241 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, |
231 daemon_.LookupNetworkState("online")); | 242 daemon_.LookupNetworkState("online")); |
232 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, | 243 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, |
233 daemon_.LookupNetworkState("offline")); | 244 daemon_.LookupNetworkState("offline")); |
234 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, | 245 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, |
235 daemon_.LookupNetworkState("somestate")); | 246 daemon_.LookupNetworkState("somestate")); |
236 } | 247 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 | 324 |
314 msg = NewDBusSignalString("/", | 325 msg = NewDBusSignalString("/", |
315 "org.chromium.UnknownService.Manager", | 326 "org.chromium.UnknownService.Manager", |
316 "StateChanged", | 327 "StateChanged", |
317 "randomstate"); | 328 "randomstate"); |
318 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); | 329 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
319 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); | 330 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); |
320 DeleteDBusMessage(msg); | 331 DeleteDBusMessage(msg); |
321 } | 332 } |
322 | 333 |
323 TEST_F(MetricsDaemonTest, NetStateChanged) { | 334 TEST_F(MetricsDaemonTest, NetStateChangedSimpleDrop) { |
324 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 335 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
325 EXPECT_EQ(0, daemon_.network_state_last_); | 336 EXPECT_EQ(0, daemon_.network_state_last_); |
326 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 337 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
327 | 338 |
328 daemon_.NetStateChanged("online", /* now */ 10); | 339 daemon_.NetStateChanged("online", /* now */ 10); |
329 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 340 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
330 EXPECT_EQ(10, daemon_.network_state_last_); | 341 EXPECT_EQ(10, daemon_.network_state_last_); |
331 | 342 |
332 EXPECT_TRUE(NoMetricGenerated()); | 343 ExpectTimeToNetworkDropMetric(20); |
| 344 daemon_.NetStateChanged("offline", /* now */ 30); |
| 345 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
| 346 EXPECT_EQ(30, daemon_.network_state_last_); |
| 347 } |
| 348 |
| 349 TEST_F(MetricsDaemonTest, NetStateChangedSuspend) { |
| 350 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
| 351 EXPECT_EQ(0, daemon_.network_state_last_); |
| 352 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
333 | 353 |
334 daemon_.NetStateChanged("offline", /* now */ 30); | 354 daemon_.NetStateChanged("offline", /* now */ 30); |
335 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 355 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
336 EXPECT_EQ(30, daemon_.network_state_last_); | 356 EXPECT_EQ(30, daemon_.network_state_last_); |
337 EXPECT_TRUE(AssertTimeToNetworkDropMetric(/* sample */ 20)); | |
338 | 357 |
339 LogReset(); | |
340 daemon_.NetStateChanged("online", /* now */ 60); | 358 daemon_.NetStateChanged("online", /* now */ 60); |
341 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 359 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
342 EXPECT_EQ(60, daemon_.network_state_last_); | 360 EXPECT_EQ(60, daemon_.network_state_last_); |
343 | 361 |
344 daemon_.PowerStateChanged("mem", /* now */ 80); | 362 daemon_.PowerStateChanged("mem", /* now */ 80); |
345 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); | 363 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); |
346 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 364 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
347 EXPECT_EQ(60, daemon_.network_state_last_); | 365 EXPECT_EQ(60, daemon_.network_state_last_); |
348 | 366 |
349 daemon_.NetStateChanged("offline", /* now */ 85); | 367 daemon_.NetStateChanged("offline", /* now */ 85); |
(...skipping 10 matching lines...) Expand all Loading... |
360 | 378 |
361 daemon_.PowerStateChanged("on", /* now */ 100); | 379 daemon_.PowerStateChanged("on", /* now */ 100); |
362 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | 380 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
363 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 381 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
364 EXPECT_EQ(95, daemon_.network_state_last_); | 382 EXPECT_EQ(95, daemon_.network_state_last_); |
365 | 383 |
366 daemon_.NetStateChanged("online", /* now */ 105); | 384 daemon_.NetStateChanged("online", /* now */ 105); |
367 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 385 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
368 EXPECT_EQ(105, daemon_.network_state_last_); | 386 EXPECT_EQ(105, daemon_.network_state_last_); |
369 | 387 |
370 EXPECT_TRUE(NoMetricGenerated()); | 388 ExpectTimeToNetworkDropMetric(3); |
371 | |
372 daemon_.NetStateChanged("offline", /* now */ 108); | 389 daemon_.NetStateChanged("offline", /* now */ 108); |
373 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); | 390 EXPECT_EQ(MetricsDaemon::kNetworkStateOffline, daemon_.network_state_); |
374 EXPECT_EQ(108, daemon_.network_state_last_); | 391 EXPECT_EQ(108, daemon_.network_state_last_); |
375 EXPECT_TRUE(AssertTimeToNetworkDropMetric(/* sample */ 3)); | |
376 } | 392 } |
377 | 393 |
378 TEST_F(MetricsDaemonTest, PowerStateChanged) { | 394 TEST_F(MetricsDaemonTest, PowerStateChanged) { |
379 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 395 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
380 EXPECT_FALSE(daemon_.user_active_); | 396 EXPECT_FALSE(daemon_.user_active_); |
381 EXPECT_EQ(0, daemon_.user_active_last_); | 397 EXPECT_EQ(0, daemon_.user_active_last_); |
382 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 398 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
383 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 399 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
384 | 400 |
385 daemon_.SetUserActiveState(/* active */ true, 7 * kSecondsPerDay + 15); | 401 daemon_.SetUserActiveState(/* active */ true, 7 * kSecondsPerDay + 15); |
386 EXPECT_TRUE(daemon_.user_active_); | 402 EXPECT_TRUE(daemon_.user_active_); |
387 EXPECT_EQ(7 * kSecondsPerDay + 15, daemon_.user_active_last_); | 403 EXPECT_EQ(7 * kSecondsPerDay + 15, daemon_.user_active_last_); |
388 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 404 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
389 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 405 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
390 | 406 |
391 daemon_.PowerStateChanged("mem", 7 * kSecondsPerDay + 45); | 407 daemon_.PowerStateChanged("mem", 7 * kSecondsPerDay + 45); |
392 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); | 408 EXPECT_EQ(MetricsDaemon::kPowerStateMem, daemon_.power_state_); |
393 EXPECT_FALSE(daemon_.user_active_); | 409 EXPECT_FALSE(daemon_.user_active_); |
394 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); | 410 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); |
395 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 411 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
396 | 412 |
397 daemon_.PowerStateChanged("on", 7 * kSecondsPerDay + 85); | 413 daemon_.PowerStateChanged("on", 7 * kSecondsPerDay + 85); |
398 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); | 414 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
399 EXPECT_FALSE(daemon_.user_active_); | 415 EXPECT_FALSE(daemon_.user_active_); |
400 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); | 416 EXPECT_EQ(7 * kSecondsPerDay + 45, daemon_.user_active_last_); |
401 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 417 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
402 | 418 |
403 daemon_.PowerStateChanged("otherstate", 7 * kSecondsPerDay + 185); | 419 daemon_.PowerStateChanged("otherstate", 7 * kSecondsPerDay + 185); |
404 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 420 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
405 EXPECT_FALSE(daemon_.user_active_); | 421 EXPECT_FALSE(daemon_.user_active_); |
406 EXPECT_EQ(7 * kSecondsPerDay + 185, daemon_.user_active_last_); | 422 EXPECT_EQ(7 * kSecondsPerDay + 185, daemon_.user_active_last_); |
407 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); | 423 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 7, /* seconds */ 30); |
408 | |
409 EXPECT_TRUE(NoMetricGenerated()); | |
410 } | 424 } |
411 | 425 |
412 TEST_F(MetricsDaemonTest, PublishMetric) { | 426 TEST_F(MetricsDaemonTest, PublishMetric) { |
| 427 ExpectMetric("Dummy.Metric", 3, 1, 100, 50); |
413 daemon_.PublishMetric("Dummy.Metric", /* sample */ 3, | 428 daemon_.PublishMetric("Dummy.Metric", /* sample */ 3, |
414 /* min */ 1, /* max */ 100, /* buckets */ 50); | 429 /* min */ 1, /* max */ 100, /* buckets */ 50); |
415 EXPECT_TRUE(AssertMetricGenerated("Dummy.Metric", 3, 1, 100, 50)); | |
416 } | 430 } |
417 | 431 |
418 TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) { | 432 TEST_F(MetricsDaemonTest, ScreenSaverStateChanged) { |
419 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, | 433 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, |
420 daemon_.screensaver_state_); | 434 daemon_.screensaver_state_); |
421 EXPECT_FALSE(daemon_.user_active_); | 435 EXPECT_FALSE(daemon_.user_active_); |
422 EXPECT_EQ(0, daemon_.user_active_last_); | 436 EXPECT_EQ(0, daemon_.user_active_last_); |
423 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 437 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
424 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 438 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
425 | 439 |
426 daemon_.ScreenSaverStateChanged("locked", 5 * kSecondsPerDay + 10); | 440 daemon_.ScreenSaverStateChanged("locked", 5 * kSecondsPerDay + 10); |
427 EXPECT_EQ(MetricsDaemon::kScreenSaverStateLocked, | 441 EXPECT_EQ(MetricsDaemon::kScreenSaverStateLocked, |
428 daemon_.screensaver_state_); | 442 daemon_.screensaver_state_); |
429 EXPECT_FALSE(daemon_.user_active_); | 443 EXPECT_FALSE(daemon_.user_active_); |
430 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); | 444 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); |
431 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 445 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
432 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 446 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
433 | 447 |
434 daemon_.ScreenSaverStateChanged("unlocked", 5 * kSecondsPerDay + 100); | 448 daemon_.ScreenSaverStateChanged("unlocked", 5 * kSecondsPerDay + 100); |
435 EXPECT_EQ(MetricsDaemon::kScreenSaverStateUnlocked, | 449 EXPECT_EQ(MetricsDaemon::kScreenSaverStateUnlocked, |
436 daemon_.screensaver_state_); | 450 daemon_.screensaver_state_); |
437 EXPECT_TRUE(daemon_.user_active_); | 451 EXPECT_TRUE(daemon_.user_active_); |
438 EXPECT_EQ(5 * kSecondsPerDay + 100, daemon_.user_active_last_); | 452 EXPECT_EQ(5 * kSecondsPerDay + 100, daemon_.user_active_last_); |
439 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 453 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
440 | 454 |
441 daemon_.ScreenSaverStateChanged("otherstate", 5 * kSecondsPerDay + 300); | 455 daemon_.ScreenSaverStateChanged("otherstate", 5 * kSecondsPerDay + 300); |
442 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, | 456 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, |
443 daemon_.screensaver_state_); | 457 daemon_.screensaver_state_); |
444 EXPECT_FALSE(daemon_.user_active_); | 458 EXPECT_FALSE(daemon_.user_active_); |
445 EXPECT_EQ(5 * kSecondsPerDay + 300, daemon_.user_active_last_); | 459 EXPECT_EQ(5 * kSecondsPerDay + 300, daemon_.user_active_last_); |
446 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 200); | 460 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 5, /* seconds */ 200); |
447 | |
448 EXPECT_TRUE(NoMetricGenerated()); | |
449 } | 461 } |
450 | 462 |
451 TEST_F(MetricsDaemonTest, SessionStateChanged) { | 463 TEST_F(MetricsDaemonTest, SessionStateChanged) { |
452 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 464 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
453 EXPECT_FALSE(daemon_.user_active_); | 465 EXPECT_FALSE(daemon_.user_active_); |
454 EXPECT_EQ(0, daemon_.user_active_last_); | 466 EXPECT_EQ(0, daemon_.user_active_last_); |
455 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 467 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
456 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 468 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
457 | 469 |
458 daemon_.SessionStateChanged("started", 15 * kSecondsPerDay + 20); | 470 daemon_.SessionStateChanged("started", 15 * kSecondsPerDay + 20); |
459 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); | 471 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); |
460 EXPECT_TRUE(daemon_.user_active_); | 472 EXPECT_TRUE(daemon_.user_active_); |
461 EXPECT_EQ(15 * kSecondsPerDay + 20, daemon_.user_active_last_); | 473 EXPECT_EQ(15 * kSecondsPerDay + 20, daemon_.user_active_last_); |
462 EXPECT_EQ(15, daemon_.daily_use_day_last_); | 474 EXPECT_EQ(15, daemon_.daily_use_day_last_); |
463 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 475 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
464 | 476 |
465 daemon_.SessionStateChanged("stopped", 15 * kSecondsPerDay + 150); | 477 daemon_.SessionStateChanged("stopped", 15 * kSecondsPerDay + 150); |
466 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); | 478 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, daemon_.session_state_); |
467 EXPECT_FALSE(daemon_.user_active_); | 479 EXPECT_FALSE(daemon_.user_active_); |
468 EXPECT_EQ(15 * kSecondsPerDay + 150, daemon_.user_active_last_); | 480 EXPECT_EQ(15 * kSecondsPerDay + 150, daemon_.user_active_last_); |
469 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); | 481 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); |
470 | 482 |
471 daemon_.SessionStateChanged("otherstate", 15 * kSecondsPerDay + 300); | 483 daemon_.SessionStateChanged("otherstate", 15 * kSecondsPerDay + 300); |
472 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); | 484 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
473 EXPECT_FALSE(daemon_.user_active_); | 485 EXPECT_FALSE(daemon_.user_active_); |
474 EXPECT_EQ(15 * kSecondsPerDay + 300, daemon_.user_active_last_); | 486 EXPECT_EQ(15 * kSecondsPerDay + 300, daemon_.user_active_last_); |
475 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); | 487 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 15, /* seconds */ 130); |
476 | |
477 EXPECT_TRUE(NoMetricGenerated()); | |
478 } | 488 } |
479 | 489 |
480 TEST_F(MetricsDaemonTest, SetUserActiveState) { | 490 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnLogin) { |
481 EXPECT_FALSE(daemon_.user_active_); | 491 EXPECT_FALSE(daemon_.user_active_); |
482 EXPECT_EQ(0, daemon_.user_active_last_); | 492 EXPECT_EQ(0, daemon_.user_active_last_); |
483 EXPECT_EQ(0, daemon_.daily_use_day_last_); | 493 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
484 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 494 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
485 | 495 |
486 daemon_.SetUserActiveState(/* active */ false, 5 * kSecondsPerDay + 10); | 496 daemon_.SetUserActiveState(/* active */ false, 5 * kSecondsPerDay + 10); |
487 EXPECT_FALSE(daemon_.user_active_); | 497 EXPECT_FALSE(daemon_.user_active_); |
488 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); | 498 EXPECT_EQ(5 * kSecondsPerDay + 10, daemon_.user_active_last_); |
489 EXPECT_EQ(5, daemon_.daily_use_day_last_); | 499 EXPECT_EQ(5, daemon_.daily_use_day_last_); |
490 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 500 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
491 | 501 |
492 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 20); | 502 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 20); |
493 EXPECT_TRUE(daemon_.user_active_); | 503 EXPECT_TRUE(daemon_.user_active_); |
494 EXPECT_EQ(6 * kSecondsPerDay + 20, daemon_.user_active_last_); | 504 EXPECT_EQ(6 * kSecondsPerDay + 20, daemon_.user_active_last_); |
495 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 505 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
496 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 506 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
497 | 507 |
498 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 120); | 508 daemon_.SetUserActiveState(/* active */ true, 6 * kSecondsPerDay + 120); |
499 EXPECT_TRUE(daemon_.user_active_); | 509 EXPECT_TRUE(daemon_.user_active_); |
500 EXPECT_EQ(6 * kSecondsPerDay + 120, daemon_.user_active_last_); | 510 EXPECT_EQ(6 * kSecondsPerDay + 120, daemon_.user_active_last_); |
501 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 511 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
502 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 100); | 512 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 100); |
503 | 513 |
504 daemon_.SetUserActiveState(/* active */ false, 6 * kSecondsPerDay + 220); | 514 daemon_.SetUserActiveState(/* active */ false, 6 * kSecondsPerDay + 220); |
505 EXPECT_FALSE(daemon_.user_active_); | 515 EXPECT_FALSE(daemon_.user_active_); |
506 EXPECT_EQ(6 * kSecondsPerDay + 220, daemon_.user_active_last_); | 516 EXPECT_EQ(6 * kSecondsPerDay + 220, daemon_.user_active_last_); |
507 EXPECT_EQ(6, daemon_.daily_use_day_last_); | 517 EXPECT_EQ(6, daemon_.daily_use_day_last_); |
508 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 200); | 518 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 6, /* seconds */ 200); |
509 | 519 |
510 EXPECT_TRUE(NoMetricGenerated()); | 520 ExpectDailyUseTimeMetric(/* sample */ 3); |
511 | |
512 LogReset(); | |
513 daemon_.SetUserActiveState(/* active */ true, 8 * kSecondsPerDay - 300); | 521 daemon_.SetUserActiveState(/* active */ true, 8 * kSecondsPerDay - 300); |
514 EXPECT_TRUE(daemon_.user_active_); | 522 EXPECT_TRUE(daemon_.user_active_); |
515 EXPECT_EQ(8 * kSecondsPerDay - 300, daemon_.user_active_last_); | 523 EXPECT_EQ(8 * kSecondsPerDay - 300, daemon_.user_active_last_); |
516 EXPECT_EQ(7, daemon_.daily_use_day_last_); | 524 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
517 EXPECT_TRUE(NoOrEmptyUseRecordFile()); | 525 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
518 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 3)); | 526 } |
519 | 527 |
520 LogReset(); | 528 TEST_F(MetricsDaemonTest, SetUserActiveStateSendOnMonitor) { |
| 529 EXPECT_FALSE(daemon_.user_active_); |
| 530 EXPECT_EQ(0, daemon_.user_active_last_); |
| 531 EXPECT_EQ(0, daemon_.daily_use_day_last_); |
| 532 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 533 |
| 534 daemon_.SetUserActiveState(/* active */ true, 8 * kSecondsPerDay - 300); |
| 535 EXPECT_TRUE(daemon_.user_active_); |
| 536 EXPECT_EQ(8 * kSecondsPerDay - 300, daemon_.user_active_last_); |
| 537 EXPECT_EQ(7, daemon_.daily_use_day_last_); |
| 538 EXPECT_TRUE(AssertNoOrEmptyUseRecordFile()); |
| 539 |
521 daemon_.SetUserActiveState(/* active */ false, 8 * kSecondsPerDay + 300); | 540 daemon_.SetUserActiveState(/* active */ false, 8 * kSecondsPerDay + 300); |
522 EXPECT_FALSE(daemon_.user_active_); | 541 EXPECT_FALSE(daemon_.user_active_); |
523 EXPECT_EQ(8 * kSecondsPerDay + 300, daemon_.user_active_last_); | 542 EXPECT_EQ(8 * kSecondsPerDay + 300, daemon_.user_active_last_); |
524 EXPECT_EQ(8, daemon_.daily_use_day_last_); | 543 EXPECT_EQ(8, daemon_.daily_use_day_last_); |
525 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); | 544 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); |
526 | 545 |
527 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay - 400); | 546 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay - 400); |
528 EXPECT_TRUE(daemon_.user_active_); | 547 EXPECT_TRUE(daemon_.user_active_); |
529 EXPECT_EQ(9 * kSecondsPerDay - 400, daemon_.user_active_last_); | 548 EXPECT_EQ(9 * kSecondsPerDay - 400, daemon_.user_active_last_); |
530 EXPECT_EQ(8, daemon_.daily_use_day_last_); | 549 EXPECT_EQ(8, daemon_.daily_use_day_last_); |
531 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); | 550 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 8, /* seconds */ 600); |
532 | 551 |
533 EXPECT_TRUE(NoMetricGenerated()); | 552 ExpectDailyUseTimeMetric(/* sample */ 10); |
534 | |
535 LogReset(); | |
536 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay + 400); | 553 daemon_.SetUserActiveState(/* active */ true, 9 * kSecondsPerDay + 400); |
537 EXPECT_TRUE(daemon_.user_active_); | 554 EXPECT_TRUE(daemon_.user_active_); |
538 EXPECT_EQ(9 * kSecondsPerDay + 400, daemon_.user_active_last_); | 555 EXPECT_EQ(9 * kSecondsPerDay + 400, daemon_.user_active_last_); |
539 EXPECT_EQ(9, daemon_.daily_use_day_last_); | 556 EXPECT_EQ(9, daemon_.daily_use_day_last_); |
540 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 800); | 557 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 800); |
541 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 10)); | |
542 } | 558 } |
543 | 559 |
544 int main(int argc, char **argv) { | 560 int main(int argc, char **argv) { |
545 testing::InitGoogleTest(&argc, argv); | 561 testing::InitGoogleTest(&argc, argv); |
546 return RUN_ALL_TESTS(); | 562 return RUN_ALL_TESTS(); |
547 } | 563 } |
OLD | NEW |