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 | 6 |
7 #include <sys/file.h> | 7 #include <sys/file.h> |
8 | 8 |
9 #include <base/eintr_wrapper.h> | 9 #include <base/eintr_wrapper.h> |
10 #include <base/file_util.h> | 10 #include <base/file_util.h> |
11 #include <base/logging.h> | 11 #include <base/logging.h> |
12 #include <base/string_util.h> | 12 #include <base/string_util.h> |
13 #include <gtest/gtest.h> | 13 #include <gtest/gtest.h> |
14 | 14 |
15 static const char kTestDailyUseRecordFile[] = "/tmp/daily-usage-test"; | 15 static const char kTestDailyUseRecordFile[] = "daily-usage-test"; |
16 static const char kDoesNotExistFile[] = "/does/not/exist"; | 16 static const char kDoesNotExistFile[] = "/does/not/exist"; |
17 | 17 |
18 static const int kSecondsPerDay = 24 * 60 * 60; | 18 static const int kSecondsPerDay = 24 * 60 * 60; |
19 | 19 |
20 class MetricsDaemonTest : public testing::Test { | 20 class MetricsDaemonTest : public testing::Test { |
21 protected: | 21 protected: |
22 virtual void SetUp() { | 22 virtual void SetUp() { |
23 daemon_.Init(true); | 23 daemon_.Init(true); |
24 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; | 24 daemon_.daily_use_record_file_ = kTestDailyUseRecordFile; |
25 | 25 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 msg << "actual use record (" << record.day_ << ", " << record.seconds_ | 116 msg << "actual use record (" << record.day_ << ", " << record.seconds_ |
117 << ") expected (" << expected_day << ", " << expected_seconds << ")"; | 117 << ") expected (" << expected_day << ", " << expected_seconds << ")"; |
118 HANDLE_EINTR(close(fd)); | 118 HANDLE_EINTR(close(fd)); |
119 return testing::AssertionFailure(msg); | 119 return testing::AssertionFailure(msg); |
120 } | 120 } |
121 | 121 |
122 HANDLE_EINTR(close(fd)); | 122 HANDLE_EINTR(close(fd)); |
123 return testing::AssertionSuccess(); | 123 return testing::AssertionSuccess(); |
124 } | 124 } |
125 | 125 |
| 126 // Returns true if the daily use record file does not exist or is |
| 127 // empty, false otherwise. |
126 bool NoOrEmptyUseRecordFile() { | 128 bool NoOrEmptyUseRecordFile() { |
127 FilePath record_file(daemon_.daily_use_record_file_); | 129 FilePath record_file(daemon_.daily_use_record_file_); |
128 int64 record_file_size; | 130 int64 record_file_size; |
129 return !file_util::PathExists(record_file) || | 131 return !file_util::PathExists(record_file) || |
130 (file_util::GetFileSize(record_file, &record_file_size) && | 132 (file_util::GetFileSize(record_file, &record_file_size) && |
131 record_file_size == 0); | 133 record_file_size == 0); |
132 } | 134 } |
133 | 135 |
| 136 // Creates a new DBus signal message with a single string |
| 137 // argument. The message can be deallocated through |
| 138 // DeleteDBusMessage. |
| 139 // |
| 140 // |path| is the object emitting the signal. |
| 141 // |interface| is the interface the signal is emitted from. |
| 142 // |name| is the name of the signal. |
| 143 // |arg_value| is the value of the string argument. |
| 144 DBusMessage* NewDBusSignalString(const std::string& path, |
| 145 const std::string& interface, |
| 146 const std::string& name, |
| 147 const std::string& arg_value) { |
| 148 DBusMessage* msg = dbus_message_new_signal(path.c_str(), |
| 149 interface.c_str(), |
| 150 name.c_str()); |
| 151 DBusMessageIter iter; |
| 152 dbus_message_iter_init_append(msg, &iter); |
| 153 const char* arg_value_c = arg_value.c_str(); |
| 154 dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &arg_value_c); |
| 155 return msg; |
| 156 } |
| 157 |
| 158 // Deallocates the DBus message |msg| previously allocated through |
| 159 // dbus_message_new*. |
| 160 void DeleteDBusMessage(DBusMessage* msg) { |
| 161 dbus_message_unref(msg); |
| 162 } |
| 163 |
134 // Pointer to the current test fixture. | 164 // Pointer to the current test fixture. |
135 static MetricsDaemonTest* daemon_test_; | 165 static MetricsDaemonTest* daemon_test_; |
136 | 166 |
137 // The MetricsDaemon under test. | 167 // The MetricsDaemon under test. |
138 MetricsDaemon daemon_; | 168 MetricsDaemon daemon_; |
139 | 169 |
140 // The accumulated metrics daemon log. | 170 // The accumulated metrics daemon log. |
141 std::string daemon_log_; | 171 std::string daemon_log_; |
142 }; | 172 }; |
143 | 173 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 | 255 |
226 TEST_F(MetricsDaemonTest, LookupSessionState) { | 256 TEST_F(MetricsDaemonTest, LookupSessionState) { |
227 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, | 257 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, |
228 daemon_.LookupSessionState("started")); | 258 daemon_.LookupSessionState("started")); |
229 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, | 259 EXPECT_EQ(MetricsDaemon::kSessionStateStopped, |
230 daemon_.LookupSessionState("stopped")); | 260 daemon_.LookupSessionState("stopped")); |
231 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, | 261 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, |
232 daemon_.LookupSessionState("somestate")); | 262 daemon_.LookupSessionState("somestate")); |
233 } | 263 } |
234 | 264 |
| 265 TEST_F(MetricsDaemonTest, MessageFilter) { |
| 266 DBusMessage* msg = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL); |
| 267 DBusHandlerResult res = |
| 268 MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 269 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); |
| 270 DeleteDBusMessage(msg); |
| 271 |
| 272 msg = NewDBusSignalString("/", |
| 273 "org.moblin.connman.Manager", |
| 274 "StateChanged", |
| 275 "online"); |
| 276 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
| 277 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 278 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
| 279 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
| 280 DeleteDBusMessage(msg); |
| 281 |
| 282 msg = NewDBusSignalString("/", |
| 283 "org.chromium.Power.Manager", |
| 284 "PowerStateChanged", |
| 285 "on"); |
| 286 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
| 287 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 288 EXPECT_EQ(MetricsDaemon::kPowerStateOn, daemon_.power_state_); |
| 289 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
| 290 DeleteDBusMessage(msg); |
| 291 |
| 292 msg = NewDBusSignalString("/", |
| 293 "org.chromium.ScreenSaver.Manager", |
| 294 "LockStateChanged", |
| 295 "unlocked"); |
| 296 EXPECT_EQ(MetricsDaemon::kUnknownScreenSaverState, |
| 297 daemon_.screensaver_state_); |
| 298 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 299 EXPECT_EQ(MetricsDaemon::kScreenSaverStateUnlocked, |
| 300 daemon_.screensaver_state_); |
| 301 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
| 302 DeleteDBusMessage(msg); |
| 303 |
| 304 msg = NewDBusSignalString("/org/chromium/SessionManager", |
| 305 "org.chromium.SessionManagerInterface", |
| 306 "SessionStateChanged", |
| 307 "started"); |
| 308 EXPECT_EQ(MetricsDaemon::kUnknownSessionState, daemon_.session_state_); |
| 309 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 310 EXPECT_EQ(MetricsDaemon::kSessionStateStarted, daemon_.session_state_); |
| 311 EXPECT_EQ(DBUS_HANDLER_RESULT_HANDLED, res); |
| 312 DeleteDBusMessage(msg); |
| 313 |
| 314 msg = NewDBusSignalString("/", |
| 315 "org.chromium.UnknownService.Manager", |
| 316 "StateChanged", |
| 317 "randomstate"); |
| 318 res = MetricsDaemon::MessageFilter(/* connection */ NULL, msg, &daemon_); |
| 319 EXPECT_EQ(DBUS_HANDLER_RESULT_NOT_YET_HANDLED, res); |
| 320 DeleteDBusMessage(msg); |
| 321 } |
| 322 |
235 TEST_F(MetricsDaemonTest, NetStateChanged) { | 323 TEST_F(MetricsDaemonTest, NetStateChanged) { |
236 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); | 324 EXPECT_EQ(MetricsDaemon::kUnknownNetworkState, daemon_.network_state_); |
237 EXPECT_EQ(0, daemon_.network_state_last_); | 325 EXPECT_EQ(0, daemon_.network_state_last_); |
238 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); | 326 EXPECT_EQ(MetricsDaemon::kUnknownPowerState, daemon_.power_state_); |
239 | 327 |
240 daemon_.NetStateChanged("online", /* now */ 10); | 328 daemon_.NetStateChanged("online", /* now */ 10); |
241 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); | 329 EXPECT_EQ(MetricsDaemon::kNetworkStateOnline, daemon_.network_state_); |
242 EXPECT_EQ(10, daemon_.network_state_last_); | 330 EXPECT_EQ(10, daemon_.network_state_last_); |
243 | 331 |
244 EXPECT_TRUE(NoMetricGenerated()); | 332 EXPECT_TRUE(NoMetricGenerated()); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 EXPECT_EQ(9 * kSecondsPerDay + 400, daemon_.user_active_last_); | 538 EXPECT_EQ(9 * kSecondsPerDay + 400, daemon_.user_active_last_); |
451 EXPECT_EQ(9, daemon_.daily_use_day_last_); | 539 EXPECT_EQ(9, daemon_.daily_use_day_last_); |
452 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 800); | 540 EXPECT_PRED_FORMAT2(AssertDailyUseRecord, /* day */ 9, /* seconds */ 800); |
453 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 10)); | 541 EXPECT_TRUE(AssertDailyUseTimeMetric(/* sample */ 10)); |
454 } | 542 } |
455 | 543 |
456 int main(int argc, char **argv) { | 544 int main(int argc, char **argv) { |
457 testing::InitGoogleTest(&argc, argv); | 545 testing::InitGoogleTest(&argc, argv); |
458 return RUN_ALL_TESTS(); | 546 return RUN_ALL_TESTS(); |
459 } | 547 } |
OLD | NEW |