Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium 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 "chromeos/dbus/power_policy_controller.h" | 5 #include "chromeos/dbus/power_policy_controller.h" |
| 6 | 6 |
| 7 #include "base/prefs/pref_registry_simple.h" | |
| 8 #include "base/prefs/testing_pref_service.h" | |
| 7 #include "chromeos/dbus/dbus_thread_manager.h" | 9 #include "chromeos/dbus/dbus_thread_manager.h" |
| 8 #include "chromeos/dbus/mock_dbus_thread_manager.h" | 10 #include "chromeos/dbus/mock_dbus_thread_manager.h" |
| 9 #include "chromeos/dbus/mock_power_manager_client.h" | 11 #include "chromeos/dbus/mock_power_manager_client.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 14 |
| 13 using ::testing::_; | 15 using ::testing::_; |
| 14 using ::testing::SaveArg; | 16 using ::testing::SaveArg; |
| 15 | 17 |
| 16 namespace chromeos { | 18 namespace chromeos { |
| 17 | 19 |
| 18 class PowerPolicyControllerTest : public testing::Test { | 20 class PowerPolicyControllerTest : public testing::Test { |
| 19 public: | 21 public: |
| 20 PowerPolicyControllerTest() {} | 22 PowerPolicyControllerTest() {} |
| 21 virtual ~PowerPolicyControllerTest() {} | 23 virtual ~PowerPolicyControllerTest() {} |
| 22 | 24 |
| 23 virtual void SetUp() OVERRIDE { | 25 virtual void SetUp() OVERRIDE { |
| 24 dbus_manager_ = new MockDBusThreadManager; | 26 dbus_manager_ = new MockDBusThreadManager; |
| 25 DBusThreadManager::InitializeForTesting(dbus_manager_); // Takes ownership. | 27 DBusThreadManager::InitializeForTesting(dbus_manager_); // Takes ownership. |
| 26 power_client_ = dbus_manager_->mock_power_manager_client(); | 28 power_client_ = dbus_manager_->mock_power_manager_client(); |
| 27 EXPECT_CALL(*power_client_, SetPolicy(_)) | 29 EXPECT_CALL(*power_client_, SetPolicy(_)) |
| 28 .WillRepeatedly(SaveArg<0>(&last_policy_)); | 30 .WillRepeatedly(SaveArg<0>(&last_policy_)); |
| 29 | 31 |
| 30 policy_controller_ = dbus_manager_->GetPowerPolicyController(); | 32 policy_controller_ = dbus_manager_->GetPowerPolicyController(); |
| 31 | 33 |
| 32 // TODO(derat): Write what looks like it will be a ridiculously large | 34 prefs_.registry()->RegisterIntegerPref(kAcScreenDimDelay, 0); |
| 33 // amount of code to register prefs so that UpdatePolicyFromPrefs() can | 35 prefs_.registry()->RegisterIntegerPref(kAcScreenOffDelay, 0); |
| 34 // be tested. | 36 prefs_.registry()->RegisterIntegerPref(kAcScreenLockDelay, 0); |
| 37 prefs_.registry()->RegisterIntegerPref(kAcIdleWarningDelay, 0); | |
| 38 prefs_.registry()->RegisterIntegerPref(kAcIdleDelay, 0); | |
| 39 prefs_.registry()->RegisterIntegerPref(kBatteryScreenDimDelay, 0); | |
| 40 prefs_.registry()->RegisterIntegerPref(kBatteryScreenOffDelay, 0); | |
| 41 prefs_.registry()->RegisterIntegerPref(kBatteryScreenLockDelay, 0); | |
| 42 prefs_.registry()->RegisterIntegerPref(kBatteryIdleWarningDelay, 0); | |
| 43 prefs_.registry()->RegisterIntegerPref(kBatteryIdleDelay, 0); | |
| 44 prefs_.registry()->RegisterIntegerPref(kIdleAction, 0); | |
| 45 prefs_.registry()->RegisterIntegerPref(kLidClosedAction, 0); | |
| 46 prefs_.registry()->RegisterBooleanPref(kUseAudioActivity, false); | |
| 47 prefs_.registry()->RegisterBooleanPref(kUseVideoActivity, false); | |
| 48 prefs_.registry()->RegisterBooleanPref(kEnableScreenLock, false); | |
| 49 prefs_.registry()->RegisterDoublePref(kPresentationIdleDelayFactor, 0.0); | |
| 35 } | 50 } |
| 36 | 51 |
| 37 virtual void TearDown() OVERRIDE { | 52 virtual void TearDown() OVERRIDE { |
| 38 DBusThreadManager::Shutdown(); | 53 DBusThreadManager::Shutdown(); |
| 39 } | 54 } |
| 40 | 55 |
| 41 protected: | 56 protected: |
| 57 // Names for various prefs. | |
| 58 static const char kAcScreenDimDelay[]; | |
| 59 static const char kAcScreenOffDelay[]; | |
| 60 static const char kAcScreenLockDelay[]; | |
| 61 static const char kAcIdleWarningDelay[]; | |
| 62 static const char kAcIdleDelay[]; | |
| 63 static const char kBatteryScreenDimDelay[]; | |
| 64 static const char kBatteryScreenOffDelay[]; | |
| 65 static const char kBatteryScreenLockDelay[]; | |
| 66 static const char kBatteryIdleWarningDelay[]; | |
| 67 static const char kBatteryIdleDelay[]; | |
| 68 static const char kIdleAction[]; | |
| 69 static const char kLidClosedAction[]; | |
| 70 static const char kUseAudioActivity[]; | |
| 71 static const char kUseVideoActivity[]; | |
| 72 static const char kEnableScreenLock[]; | |
| 73 static const char kPresentationIdleDelayFactor[]; | |
| 74 | |
| 75 void InitControllerPrefs() { | |
| 76 PowerPolicyController::PrefNames names; | |
| 77 names.ac_screen_dim_delay_ms = kAcScreenDimDelay; | |
| 78 names.ac_screen_off_delay_ms = kAcScreenOffDelay; | |
| 79 names.ac_screen_lock_delay_ms =kAcScreenLockDelay; | |
|
bartfab (slow)
2013/04/17 11:51:12
Nit: Space after =
Daniel Erat
2013/04/18 03:59:16
n/a
| |
| 80 names.ac_idle_warning_delay_ms = kAcIdleWarningDelay; | |
| 81 names.ac_idle_delay_ms = kAcIdleDelay; | |
| 82 names.battery_screen_dim_delay_ms = kBatteryScreenDimDelay; | |
| 83 names.battery_screen_off_delay_ms = kBatteryScreenOffDelay; | |
| 84 names.battery_screen_lock_delay_ms = kBatteryScreenLockDelay; | |
| 85 names.battery_idle_warning_delay_ms = kBatteryIdleWarningDelay; | |
| 86 names.battery_idle_delay_ms = kBatteryIdleDelay; | |
| 87 names.idle_action = kIdleAction; | |
| 88 names.lid_closed_action = kLidClosedAction; | |
| 89 names.use_audio_activity = kUseAudioActivity; | |
| 90 names.use_video_activity = kUseVideoActivity; | |
| 91 names.enable_screen_lock = kEnableScreenLock; | |
| 92 names.presentation_idle_delay_factor = kPresentationIdleDelayFactor; | |
| 93 policy_controller_->InitPrefs(&prefs_, names); | |
| 94 } | |
| 95 | |
| 42 MockDBusThreadManager* dbus_manager_; // Not owned. | 96 MockDBusThreadManager* dbus_manager_; // Not owned. |
| 43 MockPowerManagerClient* power_client_; // Not owned. | 97 MockPowerManagerClient* power_client_; // Not owned. |
| 44 PowerPolicyController* policy_controller_; // Not owned. | 98 PowerPolicyController* policy_controller_; // Not owned. |
| 45 | 99 |
| 100 TestingPrefServiceSimple prefs_; | |
| 101 | |
| 46 power_manager::PowerManagementPolicy last_policy_; | 102 power_manager::PowerManagementPolicy last_policy_; |
| 47 }; | 103 }; |
| 48 | 104 |
| 105 const char PowerPolicyControllerTest::kAcScreenDimDelay[] = "a_dim"; | |
| 106 const char PowerPolicyControllerTest::kAcScreenOffDelay[] = "a_off"; | |
| 107 const char PowerPolicyControllerTest::kAcScreenLockDelay[] = "a_lock"; | |
| 108 const char PowerPolicyControllerTest::kAcIdleWarningDelay[] = "a_warning"; | |
| 109 const char PowerPolicyControllerTest::kAcIdleDelay[] = "a_idle"; | |
| 110 const char PowerPolicyControllerTest::kBatteryScreenDimDelay[] = "b_dim"; | |
| 111 const char PowerPolicyControllerTest::kBatteryScreenOffDelay[] = "b_off"; | |
| 112 const char PowerPolicyControllerTest::kBatteryScreenLockDelay[] = "b_lock"; | |
| 113 const char PowerPolicyControllerTest::kBatteryIdleWarningDelay[] = "b_warning"; | |
| 114 const char PowerPolicyControllerTest::kBatteryIdleDelay[] = "b_idle"; | |
| 115 const char PowerPolicyControllerTest::kIdleAction[] = "idle_action"; | |
| 116 const char PowerPolicyControllerTest::kLidClosedAction[] = "lid_closed_action"; | |
| 117 const char PowerPolicyControllerTest::kUseAudioActivity[] = "use_audio"; | |
| 118 const char PowerPolicyControllerTest::kUseVideoActivity[] = "use_video"; | |
| 119 const char PowerPolicyControllerTest::kEnableScreenLock[] = "enable_lock"; | |
| 120 const char PowerPolicyControllerTest::kPresentationIdleDelayFactor[] = | |
| 121 "presentation_idle_delay_factor"; | |
| 122 | |
| 123 TEST_F(PowerPolicyControllerTest, Prefs) { | |
| 124 prefs_.SetInteger(kAcScreenDimDelay, 600000); | |
| 125 prefs_.SetInteger(kAcScreenOffDelay, 660000); | |
| 126 prefs_.SetInteger(kAcIdleDelay, 720000); | |
| 127 prefs_.SetInteger(kBatteryScreenDimDelay, 300000); | |
| 128 prefs_.SetInteger(kBatteryScreenOffDelay, 360000); | |
| 129 prefs_.SetInteger(kBatteryIdleDelay, 420000); | |
| 130 prefs_.SetInteger(kIdleAction, PowerPolicyController::ACTION_SUSPEND); | |
| 131 prefs_.SetInteger(kLidClosedAction, PowerPolicyController::ACTION_SHUT_DOWN); | |
| 132 prefs_.SetBoolean(kUseAudioActivity, true); | |
| 133 prefs_.SetBoolean(kUseVideoActivity, true); | |
| 134 prefs_.SetBoolean(kEnableScreenLock, false); | |
| 135 prefs_.SetDouble(kPresentationIdleDelayFactor, 2.0); | |
| 136 InitControllerPrefs(); | |
| 137 | |
| 138 power_manager::PowerManagementPolicy expected_policy; | |
| 139 expected_policy.mutable_ac_delays()->set_screen_dim_ms(600000); | |
| 140 expected_policy.mutable_ac_delays()->set_screen_off_ms(660000); | |
| 141 expected_policy.mutable_ac_delays()->set_screen_lock_ms(0); | |
| 142 expected_policy.mutable_ac_delays()->set_idle_warning_ms(0); | |
| 143 expected_policy.mutable_ac_delays()->set_idle_ms(720000); | |
| 144 expected_policy.mutable_battery_delays()->set_screen_dim_ms(300000); | |
| 145 expected_policy.mutable_battery_delays()->set_screen_off_ms(360000); | |
| 146 expected_policy.mutable_battery_delays()->set_screen_lock_ms(0); | |
| 147 expected_policy.mutable_battery_delays()->set_idle_warning_ms(0); | |
| 148 expected_policy.mutable_battery_delays()->set_idle_ms(420000); | |
| 149 expected_policy.set_idle_action( | |
| 150 power_manager::PowerManagementPolicy_Action_SUSPEND); | |
| 151 expected_policy.set_lid_closed_action( | |
| 152 power_manager::PowerManagementPolicy_Action_SHUT_DOWN); | |
| 153 expected_policy.set_use_audio_activity(true); | |
| 154 expected_policy.set_use_video_activity(true); | |
| 155 expected_policy.set_presentation_idle_delay_factor(2.0); | |
| 156 EXPECT_EQ(expected_policy.SerializeAsString(), | |
| 157 last_policy_.SerializeAsString()); | |
| 158 | |
| 159 // Change some prefs and check that an updated policy is sent. | |
| 160 prefs_.SetInteger(kAcIdleWarningDelay, 700000); | |
| 161 prefs_.SetInteger(kBatteryIdleWarningDelay, 400000); | |
| 162 prefs_.SetInteger(kLidClosedAction, PowerPolicyController::ACTION_SUSPEND); | |
| 163 expected_policy.mutable_ac_delays()->set_idle_warning_ms(700000); | |
| 164 expected_policy.mutable_battery_delays()->set_idle_warning_ms(400000); | |
| 165 expected_policy.set_lid_closed_action( | |
| 166 power_manager::PowerManagementPolicy_Action_SUSPEND); | |
| 167 EXPECT_EQ(expected_policy.SerializeAsString(), | |
| 168 last_policy_.SerializeAsString()); | |
| 169 | |
| 170 // The enable-screen-lock pref should force the screen-lock delays to | |
| 171 // match the screen-off delays. | |
| 172 prefs_.SetBoolean(kEnableScreenLock, true); | |
| 173 expected_policy.mutable_ac_delays()->set_screen_lock_ms(660000); | |
| 174 expected_policy.mutable_battery_delays()->set_screen_lock_ms(360000); | |
| 175 EXPECT_EQ(expected_policy.SerializeAsString(), | |
| 176 last_policy_.SerializeAsString()); | |
| 177 | |
| 178 // If the screen-lock-delay prefs are set to lower values than the | |
| 179 // screen-off delays, the lock prefs should take precedence. | |
| 180 prefs_.SetInteger(kAcScreenLockDelay, 70000); | |
| 181 prefs_.SetInteger(kBatteryScreenLockDelay, 60000); | |
| 182 expected_policy.mutable_ac_delays()->set_screen_lock_ms(70000); | |
| 183 expected_policy.mutable_battery_delays()->set_screen_lock_ms(60000); | |
| 184 EXPECT_EQ(expected_policy.SerializeAsString(), | |
| 185 last_policy_.SerializeAsString()); | |
| 186 } | |
| 187 | |
| 49 TEST_F(PowerPolicyControllerTest, Blocks) { | 188 TEST_F(PowerPolicyControllerTest, Blocks) { |
| 50 const char kSuspendBlockReason[] = "suspend"; | 189 const char kSuspendBlockReason[] = "suspend"; |
| 51 const int suspend_id = | 190 const int suspend_id = |
| 52 policy_controller_->AddSuspendBlock(kSuspendBlockReason); | 191 policy_controller_->AddSuspendBlock(kSuspendBlockReason); |
| 53 power_manager::PowerManagementPolicy expected_policy; | 192 power_manager::PowerManagementPolicy expected_policy; |
| 54 expected_policy.set_idle_action( | 193 expected_policy.set_idle_action( |
| 55 power_manager::PowerManagementPolicy_Action_DO_NOTHING); | 194 power_manager::PowerManagementPolicy_Action_DO_NOTHING); |
| 56 expected_policy.set_reason(kSuspendBlockReason); | 195 expected_policy.set_reason(kSuspendBlockReason); |
| 57 EXPECT_EQ(expected_policy.SerializeAsString(), | 196 EXPECT_EQ(expected_policy.SerializeAsString(), |
| 58 last_policy_.SerializeAsString()); | 197 last_policy_.SerializeAsString()); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 73 EXPECT_EQ(expected_policy.SerializeAsString(), | 212 EXPECT_EQ(expected_policy.SerializeAsString(), |
| 74 last_policy_.SerializeAsString()); | 213 last_policy_.SerializeAsString()); |
| 75 | 214 |
| 76 policy_controller_->RemoveBlock(screen_id); | 215 policy_controller_->RemoveBlock(screen_id); |
| 77 expected_policy.Clear(); | 216 expected_policy.Clear(); |
| 78 EXPECT_EQ(expected_policy.SerializeAsString(), | 217 EXPECT_EQ(expected_policy.SerializeAsString(), |
| 79 last_policy_.SerializeAsString()); | 218 last_policy_.SerializeAsString()); |
| 80 } | 219 } |
| 81 | 220 |
| 82 } // namespace chromeos | 221 } // namespace chromeos |
| OLD | NEW |