| 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 |