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

Side by Side Diff: src/platform/metrics/metrics_daemon_test.cc

Issue 2049007: Start transition the metrics library to non-static API. Use gmock in tests. (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: Break down tests to avoid explicit metrics lib mock checkpoints. Created 10 years, 7 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 | « src/platform/metrics/metrics_daemon.cc ('k') | src/platform/metrics/metrics_library.h » ('j') | 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 "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
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
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
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
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 }
OLDNEW
« no previous file with comments | « src/platform/metrics/metrics_daemon.cc ('k') | src/platform/metrics/metrics_library.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698