| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/network/network_state_handler.h" | 5 #include "chromeos/network/network_state_handler.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
| 25 #include "third_party/cros_system_api/dbus/service_constants.h" | 25 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 void ErrorCallbackFunction(const std::string& error_name, | 29 void ErrorCallbackFunction(const std::string& error_name, |
| 30 const std::string& error_message) { | 30 const std::string& error_message) { |
| 31 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; | 31 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; |
| 32 } | 32 } |
| 33 | 33 |
| 34 const std::string kShillManagerClientStubDefaultService = "eth1"; | 34 const std::string kShillManagerClientStubDefaultService = "/service/eth1"; |
| 35 const std::string kShillManagerClientStubDefaultWifi = "wifi1"; | 35 const std::string kShillManagerClientStubDefaultWifi = "/service/wifi1"; |
| 36 const std::string kShillManagerClientStubWifi2 = "wifi2"; | 36 const std::string kShillManagerClientStubWifi2 = "/service/wifi2"; |
| 37 const std::string kShillManagerClientStubCellular = "cellular1"; | 37 const std::string kShillManagerClientStubCellular = "/service/cellular1"; |
| 38 | 38 |
| 39 using chromeos::NetworkState; | 39 using chromeos::NetworkState; |
| 40 using chromeos::NetworkStateHandler; | 40 using chromeos::NetworkStateHandler; |
| 41 | 41 |
| 42 class TestObserver : public chromeos::NetworkStateHandlerObserver { | 42 class TestObserver : public chromeos::NetworkStateHandlerObserver { |
| 43 public: | 43 public: |
| 44 explicit TestObserver(NetworkStateHandler* handler) | 44 explicit TestObserver(NetworkStateHandler* handler) |
| 45 : handler_(handler), | 45 : handler_(handler), |
| 46 device_list_changed_count_(0), | 46 device_list_changed_count_(0), |
| 47 device_count_(0), |
| 47 network_count_(0), | 48 network_count_(0), |
| 48 default_network_change_count_(0), | 49 default_network_change_count_(0), |
| 49 favorite_count_(0) { | 50 favorite_count_(0) { |
| 50 } | 51 } |
| 51 | 52 |
| 52 virtual ~TestObserver() { | 53 virtual ~TestObserver() { |
| 53 } | 54 } |
| 54 | 55 |
| 55 virtual void DeviceListChanged() OVERRIDE { | 56 virtual void DeviceListChanged() OVERRIDE { |
| 57 NetworkStateHandler::DeviceStateList devices; |
| 58 handler_->GetDeviceList(&devices); |
| 59 device_count_ = devices.size(); |
| 56 ++device_list_changed_count_; | 60 ++device_list_changed_count_; |
| 57 } | 61 } |
| 58 | 62 |
| 59 virtual void NetworkListChanged() OVERRIDE { | 63 virtual void NetworkListChanged() OVERRIDE { |
| 60 NetworkStateHandler::NetworkStateList networks; | 64 NetworkStateHandler::NetworkStateList networks; |
| 61 handler_->GetNetworkList(&networks); | 65 handler_->GetNetworkList(&networks); |
| 62 network_count_ = networks.size(); | 66 network_count_ = networks.size(); |
| 63 if (network_count_ == 0) { | 67 if (network_count_ == 0) { |
| 64 default_network_ = ""; | 68 default_network_ = ""; |
| 65 default_network_connection_state_ = ""; | 69 default_network_connection_state_ = ""; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 83 network_connection_state_[network->path()] = network->connection_state(); | 87 network_connection_state_[network->path()] = network->connection_state(); |
| 84 connection_state_changes_[network->path()]++; | 88 connection_state_changes_[network->path()]++; |
| 85 } | 89 } |
| 86 | 90 |
| 87 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { | 91 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { |
| 88 DCHECK(network); | 92 DCHECK(network); |
| 89 property_updates_[network->path()]++; | 93 property_updates_[network->path()]++; |
| 90 } | 94 } |
| 91 | 95 |
| 92 size_t device_list_changed_count() { return device_list_changed_count_; } | 96 size_t device_list_changed_count() { return device_list_changed_count_; } |
| 97 size_t device_count() { return device_count_; } |
| 93 size_t network_count() { return network_count_; } | 98 size_t network_count() { return network_count_; } |
| 94 size_t default_network_change_count() { | 99 size_t default_network_change_count() { |
| 95 return default_network_change_count_; | 100 return default_network_change_count_; |
| 96 } | 101 } |
| 97 void reset_network_change_count() { | 102 void reset_change_counts() { |
| 98 DVLOG(1) << "ResetNetworkChangeCount"; | 103 DVLOG(1) << "=== RESET CHANGE COUNTS ==="; |
| 99 default_network_change_count_ = 0; | 104 default_network_change_count_ = 0; |
| 105 device_list_changed_count_ = 0; |
| 100 } | 106 } |
| 101 std::string default_network() { return default_network_; } | 107 std::string default_network() { return default_network_; } |
| 102 std::string default_network_connection_state() { | 108 std::string default_network_connection_state() { |
| 103 return default_network_connection_state_; | 109 return default_network_connection_state_; |
| 104 } | 110 } |
| 105 size_t favorite_count() { return favorite_count_; } | 111 size_t favorite_count() { return favorite_count_; } |
| 106 | 112 |
| 107 int PropertyUpdatesForService(const std::string& service_path) { | 113 int PropertyUpdatesForService(const std::string& service_path) { |
| 108 return property_updates_[service_path]; | 114 return property_updates_[service_path]; |
| 109 } | 115 } |
| 110 | 116 |
| 111 int ConnectionStateChangesForService(const std::string& service_path) { | 117 int ConnectionStateChangesForService(const std::string& service_path) { |
| 112 return connection_state_changes_[service_path]; | 118 return connection_state_changes_[service_path]; |
| 113 } | 119 } |
| 114 | 120 |
| 115 std::string NetworkConnectionStateForService( | 121 std::string NetworkConnectionStateForService( |
| 116 const std::string& service_path) { | 122 const std::string& service_path) { |
| 117 return network_connection_state_[service_path]; | 123 return network_connection_state_[service_path]; |
| 118 } | 124 } |
| 119 | 125 |
| 120 private: | 126 private: |
| 121 NetworkStateHandler* handler_; | 127 NetworkStateHandler* handler_; |
| 122 size_t device_list_changed_count_; | 128 size_t device_list_changed_count_; |
| 129 size_t device_count_; |
| 123 size_t network_count_; | 130 size_t network_count_; |
| 124 size_t default_network_change_count_; | 131 size_t default_network_change_count_; |
| 125 std::string default_network_; | 132 std::string default_network_; |
| 126 std::string default_network_connection_state_; | 133 std::string default_network_connection_state_; |
| 127 size_t favorite_count_; | 134 size_t favorite_count_; |
| 128 std::map<std::string, int> property_updates_; | 135 std::map<std::string, int> property_updates_; |
| 129 std::map<std::string, int> connection_state_changes_; | 136 std::map<std::string, int> connection_state_changes_; |
| 130 std::map<std::string, std::string> network_connection_state_; | 137 std::map<std::string, std::string> network_connection_state_; |
| 131 | 138 |
| 132 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 139 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
| 133 }; | 140 }; |
| 134 | 141 |
| 135 } // namespace | 142 } // namespace |
| 136 | 143 |
| 137 namespace chromeos { | 144 namespace chromeos { |
| 138 | 145 |
| 139 class NetworkStateHandlerTest : public testing::Test { | 146 class NetworkStateHandlerTest : public testing::Test { |
| 140 public: | 147 public: |
| 141 NetworkStateHandlerTest() | 148 NetworkStateHandlerTest() |
| 142 : device_test_(NULL), | 149 : device_test_(NULL), |
| 143 manager_test_(NULL), | 150 manager_test_(NULL), |
| 144 profile_test_(NULL), | 151 profile_test_(NULL), |
| 145 service_test_(NULL) {} | 152 service_test_(NULL) {} |
| 146 virtual ~NetworkStateHandlerTest() {} | 153 virtual ~NetworkStateHandlerTest() {} |
| 147 | 154 |
| 148 virtual void SetUp() OVERRIDE { | 155 virtual void SetUp() OVERRIDE { |
| 149 // Initialize DBusThreadManager with a stub implementation. | 156 // Initialize DBusThreadManager with a stub implementation. |
| 150 DBusThreadManager::InitializeWithStub(); | 157 DBusThreadManager::InitializeWithStub(); |
| 151 SetupNetworkStateHandler(); | 158 SetupDefaultShillState(); |
| 159 network_state_handler_.reset(new NetworkStateHandler); |
| 160 test_observer_.reset(new TestObserver(network_state_handler_.get())); |
| 161 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); |
| 162 network_state_handler_->InitShillPropertyHandler(); |
| 152 message_loop_.RunUntilIdle(); | 163 message_loop_.RunUntilIdle(); |
| 164 test_observer_->reset_change_counts(); |
| 153 } | 165 } |
| 154 | 166 |
| 155 virtual void TearDown() OVERRIDE { | 167 virtual void TearDown() OVERRIDE { |
| 156 network_state_handler_->RemoveObserver(test_observer_.get(), FROM_HERE); | 168 network_state_handler_->RemoveObserver(test_observer_.get(), FROM_HERE); |
| 157 test_observer_.reset(); | 169 test_observer_.reset(); |
| 158 network_state_handler_.reset(); | 170 network_state_handler_.reset(); |
| 159 DBusThreadManager::Shutdown(); | 171 DBusThreadManager::Shutdown(); |
| 160 } | 172 } |
| 161 | 173 |
| 162 void SetupNetworkStateHandler() { | |
| 163 SetupDefaultShillState(); | |
| 164 network_state_handler_.reset(new NetworkStateHandler); | |
| 165 test_observer_.reset(new TestObserver(network_state_handler_.get())); | |
| 166 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); | |
| 167 network_state_handler_->InitShillPropertyHandler(); | |
| 168 } | |
| 169 | |
| 170 protected: | 174 protected: |
| 171 void AddService(const std::string& service_path, | 175 void AddService(const std::string& service_path, |
| 172 const std::string& name, | 176 const std::string& name, |
| 173 const std::string& type, | 177 const std::string& type, |
| 174 const std::string& state) { | 178 const std::string& state) { |
| 175 service_test_->AddService(service_path, name, type, state, | 179 service_test_->AddService(service_path, name, type, state, |
| 176 true /* add_to_visible */, | 180 true /* add_to_visible */); |
| 177 true /* add_to_watchlist */); | |
| 178 } | 181 } |
| 179 | 182 |
| 180 void SetupDefaultShillState() { | 183 void SetupDefaultShillState() { |
| 181 message_loop_.RunUntilIdle(); // Process any pending updates | 184 message_loop_.RunUntilIdle(); // Process any pending updates |
| 182 device_test_ = | 185 device_test_ = |
| 183 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); | 186 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); |
| 184 ASSERT_TRUE(device_test_); | 187 ASSERT_TRUE(device_test_); |
| 185 device_test_->ClearDevices(); | 188 device_test_->ClearDevices(); |
| 186 device_test_->AddDevice( | 189 device_test_->AddDevice( |
| 187 "/device/stub_wifi_device1", shill::kTypeWifi, "stub_wifi_device1"); | 190 "/device/stub_wifi_device1", shill::kTypeWifi, "stub_wifi_device1"); |
| 188 device_test_->AddDevice("/device/stub_cellular_device1", | 191 device_test_->AddDevice("/device/stub_cellular_device1", |
| 189 shill::kTypeCellular, | 192 shill::kTypeCellular, |
| 190 "stub_cellular_device1"); | 193 "stub_cellular_device1"); |
| 191 | 194 |
| 192 manager_test_ = | 195 manager_test_ = |
| 193 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); | 196 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); |
| 194 ASSERT_TRUE(manager_test_); | 197 ASSERT_TRUE(manager_test_); |
| 195 | 198 |
| 196 profile_test_ = | 199 profile_test_ = |
| 197 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); | 200 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); |
| 198 ASSERT_TRUE(profile_test_); | 201 ASSERT_TRUE(profile_test_); |
| 199 profile_test_->ClearProfiles(); | 202 profile_test_->ClearProfiles(); |
| 200 | 203 |
| 201 service_test_ = | 204 service_test_ = |
| 202 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | 205 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
| 203 ASSERT_TRUE(service_test_); | 206 ASSERT_TRUE(service_test_); |
| 204 service_test_->ClearServices(); | 207 service_test_->ClearServices(); |
| 205 AddService(kShillManagerClientStubDefaultService, | 208 AddService(kShillManagerClientStubDefaultService, |
| 206 kShillManagerClientStubDefaultService, | 209 "eth1", |
| 207 shill::kTypeEthernet, | 210 shill::kTypeEthernet, |
| 208 shill::kStateOnline); | 211 shill::kStateOnline); |
| 209 AddService(kShillManagerClientStubDefaultWifi, | 212 AddService(kShillManagerClientStubDefaultWifi, |
| 210 kShillManagerClientStubDefaultWifi, | 213 "wifi1", |
| 211 shill::kTypeWifi, | 214 shill::kTypeWifi, |
| 212 shill::kStateOnline); | 215 shill::kStateOnline); |
| 213 AddService(kShillManagerClientStubWifi2, | 216 AddService(kShillManagerClientStubWifi2, |
| 214 kShillManagerClientStubWifi2, | 217 "wifi2", |
| 215 shill::kTypeWifi, | 218 shill::kTypeWifi, |
| 216 shill::kStateIdle); | 219 shill::kStateIdle); |
| 217 AddService(kShillManagerClientStubCellular, | 220 AddService(kShillManagerClientStubCellular, |
| 218 kShillManagerClientStubCellular, | 221 "cellular1", |
| 219 shill::kTypeCellular, | 222 shill::kTypeCellular, |
| 220 shill::kStateIdle); | 223 shill::kStateIdle); |
| 221 } | 224 } |
| 222 | 225 |
| 223 void UpdateManagerProperties() { | 226 void UpdateManagerProperties() { |
| 224 message_loop_.RunUntilIdle(); | 227 message_loop_.RunUntilIdle(); |
| 225 network_state_handler_->UpdateManagerProperties(); | 228 network_state_handler_->UpdateManagerProperties(); |
| 226 message_loop_.RunUntilIdle(); | 229 message_loop_.RunUntilIdle(); |
| 227 } | 230 } |
| 228 | 231 |
| 229 base::MessageLoopForUI message_loop_; | 232 base::MessageLoopForUI message_loop_; |
| 230 scoped_ptr<NetworkStateHandler> network_state_handler_; | 233 scoped_ptr<NetworkStateHandler> network_state_handler_; |
| 231 scoped_ptr<TestObserver> test_observer_; | 234 scoped_ptr<TestObserver> test_observer_; |
| 232 ShillDeviceClient::TestInterface* device_test_; | 235 ShillDeviceClient::TestInterface* device_test_; |
| 233 ShillManagerClient::TestInterface* manager_test_; | 236 ShillManagerClient::TestInterface* manager_test_; |
| 234 ShillProfileClient::TestInterface* profile_test_; | 237 ShillProfileClient::TestInterface* profile_test_; |
| 235 ShillServiceClient::TestInterface* service_test_; | 238 ShillServiceClient::TestInterface* service_test_; |
| 236 | 239 |
| 237 private: | 240 private: |
| 238 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); | 241 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); |
| 239 }; | 242 }; |
| 240 | 243 |
| 241 TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) { | 244 TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) { |
| 242 // Ensure that the network list is the expected size. | 245 // Ensure that the device and network list are the expected size. |
| 246 const size_t kNumShillManagerClientStubImplDevices = 2; |
| 247 EXPECT_EQ(kNumShillManagerClientStubImplDevices, |
| 248 test_observer_->device_count()); |
| 243 const size_t kNumShillManagerClientStubImplServices = 4; | 249 const size_t kNumShillManagerClientStubImplServices = 4; |
| 244 EXPECT_EQ(kNumShillManagerClientStubImplServices, | 250 EXPECT_EQ(kNumShillManagerClientStubImplServices, |
| 245 test_observer_->network_count()); | 251 test_observer_->network_count()); |
| 246 // Ensure that the first stub network is the default network. | 252 // Ensure that the first stub network is the default network. |
| 247 EXPECT_EQ(kShillManagerClientStubDefaultService, | 253 EXPECT_EQ(kShillManagerClientStubDefaultService, |
| 248 test_observer_->default_network()); | 254 test_observer_->default_network()); |
| 255 ASSERT_TRUE(network_state_handler_->DefaultNetwork()); |
| 249 EXPECT_EQ(kShillManagerClientStubDefaultService, | 256 EXPECT_EQ(kShillManagerClientStubDefaultService, |
| 250 network_state_handler_->ConnectedNetworkByType( | 257 network_state_handler_->DefaultNetwork()->path()); |
| 251 NetworkTypePattern::Default())->path()); | |
| 252 EXPECT_EQ(kShillManagerClientStubDefaultService, | 258 EXPECT_EQ(kShillManagerClientStubDefaultService, |
| 253 network_state_handler_->ConnectedNetworkByType( | 259 network_state_handler_->ConnectedNetworkByType( |
| 254 NetworkTypePattern::Ethernet())->path()); | 260 NetworkTypePattern::Ethernet())->path()); |
| 255 EXPECT_EQ(kShillManagerClientStubDefaultWifi, | 261 EXPECT_EQ(kShillManagerClientStubDefaultWifi, |
| 256 network_state_handler_->ConnectedNetworkByType( | 262 network_state_handler_->ConnectedNetworkByType( |
| 257 NetworkTypePattern::WiFi())->path()); | 263 NetworkTypePattern::WiFi())->path()); |
| 258 EXPECT_EQ(kShillManagerClientStubCellular, | 264 EXPECT_EQ(kShillManagerClientStubCellular, |
| 259 network_state_handler_->FirstNetworkByType( | 265 network_state_handler_->FirstNetworkByType( |
| 260 NetworkTypePattern::Mobile())->path()); | 266 NetworkTypePattern::Mobile())->path()); |
| 261 EXPECT_EQ( | 267 EXPECT_EQ( |
| 262 kShillManagerClientStubCellular, | 268 kShillManagerClientStubCellular, |
| 263 network_state_handler_->FirstNetworkByType(NetworkTypePattern::Cellular()) | 269 network_state_handler_->FirstNetworkByType(NetworkTypePattern::Cellular()) |
| 264 ->path()); | 270 ->path()); |
| 265 EXPECT_EQ(shill::kStateOnline, | 271 EXPECT_EQ(shill::kStateOnline, |
| 266 test_observer_->default_network_connection_state()); | 272 test_observer_->default_network_connection_state()); |
| 267 } | 273 } |
| 268 | 274 |
| 269 TEST_F(NetworkStateHandlerTest, TechnologyChanged) { | 275 TEST_F(NetworkStateHandlerTest, TechnologyChanged) { |
| 270 // There may be several manager changes during initialization. | 276 // Disable a technology. Will immediately set the state to AVAILABLE and |
| 271 size_t initial_changed_count = test_observer_->device_list_changed_count(); | 277 // notify observers. |
| 272 // Disable a technology. | |
| 273 network_state_handler_->SetTechnologyEnabled( | 278 network_state_handler_->SetTechnologyEnabled( |
| 274 NetworkTypePattern::Wimax(), false, network_handler::ErrorCallback()); | 279 NetworkTypePattern::WiFi(), false, network_handler::ErrorCallback()); |
| 275 EXPECT_NE( | 280 EXPECT_EQ(1u, test_observer_->device_list_changed_count()); |
| 276 NetworkStateHandler::TECHNOLOGY_ENABLED, | 281 EXPECT_EQ( |
| 277 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 282 NetworkStateHandler::TECHNOLOGY_AVAILABLE, |
| 278 EXPECT_EQ(initial_changed_count + 1, | 283 network_state_handler_->GetTechnologyState(NetworkTypePattern::WiFi())); |
| 279 test_observer_->device_list_changed_count()); | 284 |
| 280 // Enable a technology. | 285 // Run the message loop. An additional notification will be received when |
| 286 // Shill updates the enabled technologies. The state should remain AVAILABLE. |
| 287 test_observer_->reset_change_counts(); |
| 288 message_loop_.RunUntilIdle(); |
| 289 EXPECT_EQ(1u, test_observer_->device_list_changed_count()); |
| 290 EXPECT_EQ( |
| 291 NetworkStateHandler::TECHNOLOGY_AVAILABLE, |
| 292 network_state_handler_->GetTechnologyState(NetworkTypePattern::WiFi())); |
| 293 |
| 294 // Enable a technology. Will immediately set the state to ENABLING and |
| 295 // notify observers. |
| 296 test_observer_->reset_change_counts(); |
| 281 network_state_handler_->SetTechnologyEnabled( | 297 network_state_handler_->SetTechnologyEnabled( |
| 282 NetworkTypePattern::Wimax(), true, network_handler::ErrorCallback()); | 298 NetworkTypePattern::WiFi(), true, network_handler::ErrorCallback()); |
| 283 // The technology state should immediately change to ENABLING and we should | 299 EXPECT_EQ(1u, test_observer_->device_list_changed_count()); |
| 284 // receive a manager changed callback. | |
| 285 EXPECT_EQ(initial_changed_count + 2, | |
| 286 test_observer_->device_list_changed_count()); | |
| 287 EXPECT_EQ( | 300 EXPECT_EQ( |
| 288 NetworkStateHandler::TECHNOLOGY_ENABLING, | 301 NetworkStateHandler::TECHNOLOGY_ENABLING, |
| 289 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 302 network_state_handler_->GetTechnologyState(NetworkTypePattern::WiFi())); |
| 303 |
| 304 // Run the message loop. State should change to ENABLED. |
| 305 test_observer_->reset_change_counts(); |
| 290 message_loop_.RunUntilIdle(); | 306 message_loop_.RunUntilIdle(); |
| 291 // Ensure we receive 2 manager changed callbacks when the technology becomes | 307 EXPECT_EQ(1u, test_observer_->device_list_changed_count()); |
| 292 // avalable and enabled. | |
| 293 EXPECT_EQ(initial_changed_count + 4, | |
| 294 test_observer_->device_list_changed_count()); | |
| 295 EXPECT_EQ( | 308 EXPECT_EQ( |
| 296 NetworkStateHandler::TECHNOLOGY_ENABLED, | 309 NetworkStateHandler::TECHNOLOGY_ENABLED, |
| 297 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 310 network_state_handler_->GetTechnologyState(NetworkTypePattern::WiFi())); |
| 298 } | 311 } |
| 299 | 312 |
| 300 TEST_F(NetworkStateHandlerTest, TechnologyState) { | 313 TEST_F(NetworkStateHandlerTest, TechnologyState) { |
| 301 manager_test_->RemoveTechnology(shill::kTypeWimax); | 314 manager_test_->RemoveTechnology(shill::kTypeWimax); |
| 302 message_loop_.RunUntilIdle(); | 315 message_loop_.RunUntilIdle(); |
| 303 EXPECT_EQ( | 316 EXPECT_EQ( |
| 304 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, | 317 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, |
| 305 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 318 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 306 | 319 |
| 307 manager_test_->AddTechnology(shill::kTypeWimax, false); | 320 manager_test_->AddTechnology(shill::kTypeWimax, false); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 connection_state_idle_value); | 420 connection_state_idle_value); |
| 408 message_loop_.RunUntilIdle(); | 421 message_loop_.RunUntilIdle(); |
| 409 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); | 422 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); |
| 410 } | 423 } |
| 411 | 424 |
| 412 TEST_F(NetworkStateHandlerTest, DefaultServiceDisconnected) { | 425 TEST_F(NetworkStateHandlerTest, DefaultServiceDisconnected) { |
| 413 const std::string eth1 = kShillManagerClientStubDefaultService; | 426 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 414 const std::string wifi1 = kShillManagerClientStubDefaultWifi; | 427 const std::string wifi1 = kShillManagerClientStubDefaultWifi; |
| 415 | 428 |
| 416 // Disconnect ethernet. | 429 // Disconnect ethernet. |
| 417 test_observer_->reset_network_change_count(); | |
| 418 base::StringValue connection_state_idle_value(shill::kStateIdle); | 430 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 419 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 431 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 420 connection_state_idle_value); | 432 connection_state_idle_value); |
| 421 message_loop_.RunUntilIdle(); | 433 message_loop_.RunUntilIdle(); |
| 422 // Expect two changes: first when eth1 becomes disconnected, second when | 434 // Expect two changes: first when eth1 becomes disconnected, second when |
| 423 // wifi1 becomes the default. | 435 // wifi1 becomes the default. |
| 424 EXPECT_EQ(2u, test_observer_->default_network_change_count()); | 436 EXPECT_EQ(2u, test_observer_->default_network_change_count()); |
| 425 EXPECT_EQ(wifi1, test_observer_->default_network()); | 437 EXPECT_EQ(wifi1, test_observer_->default_network()); |
| 426 | 438 |
| 427 // Disconnect wifi. | 439 // Disconnect wifi. |
| 428 test_observer_->reset_network_change_count(); | 440 test_observer_->reset_change_counts(); |
| 429 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, | 441 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 430 connection_state_idle_value); | 442 connection_state_idle_value); |
| 431 message_loop_.RunUntilIdle(); | 443 message_loop_.RunUntilIdle(); |
| 432 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 444 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 433 EXPECT_EQ("", test_observer_->default_network()); | 445 EXPECT_EQ("", test_observer_->default_network()); |
| 434 } | 446 } |
| 435 | 447 |
| 436 TEST_F(NetworkStateHandlerTest, DefaultServiceConnected) { | 448 TEST_F(NetworkStateHandlerTest, DefaultServiceConnected) { |
| 437 const std::string eth1 = kShillManagerClientStubDefaultService; | 449 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 438 const std::string wifi1 = kShillManagerClientStubDefaultWifi; | 450 const std::string wifi1 = kShillManagerClientStubDefaultWifi; |
| 439 | 451 |
| 440 // Disconnect ethernet and wifi. | 452 // Disconnect ethernet and wifi. |
| 441 base::StringValue connection_state_idle_value(shill::kStateIdle); | 453 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 442 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 454 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 443 connection_state_idle_value); | 455 connection_state_idle_value); |
| 444 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, | 456 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 445 connection_state_idle_value); | 457 connection_state_idle_value); |
| 446 message_loop_.RunUntilIdle(); | 458 message_loop_.RunUntilIdle(); |
| 447 EXPECT_EQ(std::string(), test_observer_->default_network()); | 459 EXPECT_EQ(std::string(), test_observer_->default_network()); |
| 448 | 460 |
| 449 // Connect ethernet, should become the default network. | 461 // Connect ethernet, should become the default network. |
| 450 test_observer_->reset_network_change_count(); | 462 test_observer_->reset_change_counts(); |
| 451 base::StringValue connection_state_ready_value(shill::kStateReady); | 463 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 452 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 464 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 453 connection_state_ready_value); | 465 connection_state_ready_value); |
| 454 message_loop_.RunUntilIdle(); | 466 message_loop_.RunUntilIdle(); |
| 455 EXPECT_EQ(eth1, test_observer_->default_network()); | 467 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 456 EXPECT_EQ(shill::kStateReady, | 468 EXPECT_EQ(shill::kStateReady, |
| 457 test_observer_->default_network_connection_state()); | 469 test_observer_->default_network_connection_state()); |
| 458 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 470 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 459 } | 471 } |
| 460 | 472 |
| 461 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { | 473 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { |
| 462 const std::string eth1 = kShillManagerClientStubDefaultService; | 474 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 463 // The default service should be eth1. | 475 // The default service should be eth1. |
| 464 EXPECT_EQ(eth1, test_observer_->default_network()); | 476 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 465 | 477 |
| 466 // Change the default network by changing Manager.DefaultService. | 478 // Change the default network by changing Manager.DefaultService. |
| 467 test_observer_->reset_network_change_count(); | |
| 468 const std::string wifi1 = kShillManagerClientStubDefaultWifi; | 479 const std::string wifi1 = kShillManagerClientStubDefaultWifi; |
| 469 base::StringValue wifi1_value(wifi1); | 480 base::StringValue wifi1_value(wifi1); |
| 470 manager_test_->SetManagerProperty( | 481 manager_test_->SetManagerProperty( |
| 471 shill::kDefaultServiceProperty, wifi1_value); | 482 shill::kDefaultServiceProperty, wifi1_value); |
| 472 message_loop_.RunUntilIdle(); | 483 message_loop_.RunUntilIdle(); |
| 473 EXPECT_EQ(wifi1, test_observer_->default_network()); | 484 EXPECT_EQ(wifi1, test_observer_->default_network()); |
| 474 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 485 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 475 | 486 |
| 476 // Change the state of the default network. | 487 // Change the state of the default network. |
| 477 test_observer_->reset_network_change_count(); | 488 test_observer_->reset_change_counts(); |
| 478 base::StringValue connection_state_ready_value(shill::kStateReady); | 489 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 479 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, | 490 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 480 connection_state_ready_value); | 491 connection_state_ready_value); |
| 481 message_loop_.RunUntilIdle(); | 492 message_loop_.RunUntilIdle(); |
| 482 EXPECT_EQ(shill::kStateReady, | 493 EXPECT_EQ(shill::kStateReady, |
| 483 test_observer_->default_network_connection_state()); | 494 test_observer_->default_network_connection_state()); |
| 484 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 495 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 485 | 496 |
| 486 // Updating a property on the default network should trigger | 497 // Updating a property on the default network should trigger |
| 487 // a default network change. | 498 // a default network change. |
| 488 test_observer_->reset_network_change_count(); | 499 test_observer_->reset_change_counts(); |
| 489 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 500 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
| 490 dbus::ObjectPath(wifi1), | 501 dbus::ObjectPath(wifi1), |
| 491 shill::kSecurityProperty, base::StringValue("TestSecurity"), | 502 shill::kSecurityProperty, base::StringValue("TestSecurity"), |
| 492 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 503 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
| 493 message_loop_.RunUntilIdle(); | 504 message_loop_.RunUntilIdle(); |
| 494 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 505 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 495 | 506 |
| 496 // No default network updates for signal strength changes. | 507 // No default network updates for signal strength changes. |
| 497 test_observer_->reset_network_change_count(); | 508 test_observer_->reset_change_counts(); |
| 498 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 509 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
| 499 dbus::ObjectPath(wifi1), | 510 dbus::ObjectPath(wifi1), |
| 500 shill::kSignalStrengthProperty, base::FundamentalValue(32), | 511 shill::kSignalStrengthProperty, base::FundamentalValue(32), |
| 501 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 512 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
| 502 message_loop_.RunUntilIdle(); | 513 message_loop_.RunUntilIdle(); |
| 503 EXPECT_EQ(0u, test_observer_->default_network_change_count()); | 514 EXPECT_EQ(0u, test_observer_->default_network_change_count()); |
| 504 } | 515 } |
| 505 | 516 |
| 506 TEST_F(NetworkStateHandlerTest, RequestUpdate) { | 517 TEST_F(NetworkStateHandlerTest, RequestUpdate) { |
| 507 // Request an update for kShillManagerClientStubDefaultWifi. | 518 // Request an update for kShillManagerClientStubDefaultWifi. |
| 508 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 519 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
| 509 kShillManagerClientStubDefaultWifi)); | 520 kShillManagerClientStubDefaultWifi)); |
| 510 network_state_handler_->RequestUpdateForNetwork( | 521 network_state_handler_->RequestUpdateForNetwork( |
| 511 kShillManagerClientStubDefaultWifi); | 522 kShillManagerClientStubDefaultWifi); |
| 512 message_loop_.RunUntilIdle(); | 523 message_loop_.RunUntilIdle(); |
| 513 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 524 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| 514 kShillManagerClientStubDefaultWifi)); | 525 kShillManagerClientStubDefaultWifi)); |
| 515 } | 526 } |
| 516 | 527 |
| 517 TEST_F(NetworkStateHandlerTest, NetworkGuidInProfile) { | 528 TEST_F(NetworkStateHandlerTest, NetworkGuidInProfile) { |
| 518 const std::string profile = "/profile/profile1"; | 529 const std::string profile = "/profile/profile1"; |
| 519 const std::string wifi_path = "wifi_with_guid"; | 530 const std::string wifi_path = "/service/wifi_with_guid"; |
| 520 const std::string wifi_guid = "WIFI_GUID"; | 531 const std::string wifi_guid = "WIFI_GUID"; |
| 521 const bool is_service_configured = true; | 532 const bool is_service_configured = true; |
| 522 | 533 |
| 523 // Add a network to the default Profile with a specified GUID. | 534 // Add a network to the default Profile with a specified GUID. |
| 524 service_test_->AddServiceWithIPConfig( | 535 service_test_->AddServiceWithIPConfig( |
| 525 wifi_path, | 536 wifi_path, |
| 526 wifi_guid, | 537 wifi_guid, |
| 527 wifi_path /* name */, | 538 wifi_path /* name */, |
| 528 shill::kTypeWifi, | 539 shill::kTypeWifi, |
| 529 shill::kStateOnline, | 540 shill::kStateOnline, |
| 530 "" /* ipconfig_path */, | 541 "" /* ipconfig_path */, |
| 531 true /* add_to_visible */, | 542 true /* add_to_visible */); |
| 532 true /* add_to_watchlist */); | |
| 533 profile_test_->AddProfile(profile, "" /* userhash */); | 543 profile_test_->AddProfile(profile, "" /* userhash */); |
| 534 EXPECT_TRUE(profile_test_->AddService(profile, wifi_path)); | 544 EXPECT_TRUE(profile_test_->AddService(profile, wifi_path)); |
| 535 UpdateManagerProperties(); | 545 UpdateManagerProperties(); |
| 536 | 546 |
| 537 // Verify that a FavoriteState exists with a matching GUID. | 547 // Verify that a FavoriteState exists with a matching GUID. |
| 538 const FavoriteState* favorite = | 548 const FavoriteState* favorite = |
| 539 network_state_handler_->GetFavoriteStateFromServicePath( | 549 network_state_handler_->GetFavoriteStateFromServicePath( |
| 540 wifi_path, is_service_configured); | 550 wifi_path, is_service_configured); |
| 541 ASSERT_TRUE(favorite); | 551 ASSERT_TRUE(favorite); |
| 542 EXPECT_EQ(wifi_guid, favorite->guid()); | 552 EXPECT_EQ(wifi_guid, favorite->guid()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 561 EXPECT_EQ(wifi_guid, network->guid()); | 571 EXPECT_EQ(wifi_guid, network->guid()); |
| 562 | 572 |
| 563 // Also verify FavoriteState (mostly to test the stub behavior). | 573 // Also verify FavoriteState (mostly to test the stub behavior). |
| 564 favorite = network_state_handler_->GetFavoriteStateFromServicePath( | 574 favorite = network_state_handler_->GetFavoriteStateFromServicePath( |
| 565 wifi_path, is_service_configured); | 575 wifi_path, is_service_configured); |
| 566 ASSERT_TRUE(favorite); | 576 ASSERT_TRUE(favorite); |
| 567 EXPECT_EQ(wifi_guid, favorite->guid()); | 577 EXPECT_EQ(wifi_guid, favorite->guid()); |
| 568 } | 578 } |
| 569 | 579 |
| 570 TEST_F(NetworkStateHandlerTest, NetworkGuidNotInProfile) { | 580 TEST_F(NetworkStateHandlerTest, NetworkGuidNotInProfile) { |
| 571 const std::string wifi_path = "wifi_with_guid"; | 581 const std::string wifi_path = "/service/wifi_with_guid"; |
| 572 const bool is_service_configured = false; | 582 const bool is_service_configured = false; |
| 573 | 583 |
| 574 // Add a network without adding it to a profile. | 584 // Add a network without adding it to a profile. |
| 575 AddService(wifi_path, wifi_path, shill::kTypeWifi, shill::kStateOnline); | 585 AddService(wifi_path, wifi_path, shill::kTypeWifi, shill::kStateOnline); |
| 576 UpdateManagerProperties(); | 586 UpdateManagerProperties(); |
| 577 | 587 |
| 578 // Verify that a FavoriteState exists with an assigned GUID. | 588 // Verify that a FavoriteState exists with an assigned GUID. |
| 579 const FavoriteState* favorite = | 589 const FavoriteState* favorite = |
| 580 network_state_handler_->GetFavoriteStateFromServicePath( | 590 network_state_handler_->GetFavoriteStateFromServicePath( |
| 581 wifi_path, is_service_configured); | 591 wifi_path, is_service_configured); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 603 EXPECT_EQ(wifi_guid, network->guid()); | 613 EXPECT_EQ(wifi_guid, network->guid()); |
| 604 | 614 |
| 605 // Also verify FavoriteState (mostly to test the stub behavior). | 615 // Also verify FavoriteState (mostly to test the stub behavior). |
| 606 favorite = network_state_handler_->GetFavoriteStateFromServicePath( | 616 favorite = network_state_handler_->GetFavoriteStateFromServicePath( |
| 607 wifi_path, is_service_configured); | 617 wifi_path, is_service_configured); |
| 608 ASSERT_TRUE(favorite); | 618 ASSERT_TRUE(favorite); |
| 609 EXPECT_EQ(wifi_guid, favorite->guid()); | 619 EXPECT_EQ(wifi_guid, favorite->guid()); |
| 610 } | 620 } |
| 611 | 621 |
| 612 } // namespace chromeos | 622 } // namespace chromeos |
| OLD | NEW |