| 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 } | 66 } |
| 67 NetworkStateHandler::FavoriteStateList favorites; | 67 NetworkStateHandler::FavoriteStateList favorites; |
| 68 handler_->GetFavoriteList(&favorites); | 68 handler_->GetFavoriteList(&favorites); |
| 69 favorite_count_ = favorites.size(); | 69 favorite_count_ = favorites.size(); |
| 70 } | 70 } |
| 71 | 71 |
| 72 virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE { | 72 virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE { |
| 73 ++default_network_change_count_; | 73 ++default_network_change_count_; |
| 74 default_network_ = network ? network->path() : ""; | 74 default_network_ = network ? network->path() : ""; |
| 75 default_network_connection_state_ = | 75 default_network_connection_state_ = |
| 76 network ? network->connection_state() : ""; | 76 network ? network->connection_state() : ""; |
| 77 DVLOG(1) << "DefaultNetworkChanged: " << default_network_ |
| 78 << " State: " << default_network_connection_state_; |
| 77 } | 79 } |
| 78 | 80 |
| 79 virtual void NetworkConnectionStateChanged( | 81 virtual void NetworkConnectionStateChanged( |
| 80 const NetworkState* network) OVERRIDE { | 82 const NetworkState* network) OVERRIDE { |
| 81 network_connection_state_[network->path()] = network->connection_state(); | 83 network_connection_state_[network->path()] = network->connection_state(); |
| 82 connection_state_changes_[network->path()]++; | 84 connection_state_changes_[network->path()]++; |
| 83 } | 85 } |
| 84 | 86 |
| 85 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { | 87 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { |
| 86 DCHECK(network); | 88 DCHECK(network); |
| 87 property_updates_[network->path()]++; | 89 property_updates_[network->path()]++; |
| 88 } | 90 } |
| 89 | 91 |
| 90 size_t device_list_changed_count() { return device_list_changed_count_; } | 92 size_t device_list_changed_count() { return device_list_changed_count_; } |
| 91 size_t network_count() { return network_count_; } | 93 size_t network_count() { return network_count_; } |
| 92 size_t default_network_change_count() { | 94 size_t default_network_change_count() { |
| 93 return default_network_change_count_; | 95 return default_network_change_count_; |
| 94 } | 96 } |
| 97 void reset_network_change_count() { |
| 98 DVLOG(1) << "ResetNetworkChangeCount"; |
| 99 default_network_change_count_ = 0; |
| 100 } |
| 95 std::string default_network() { return default_network_; } | 101 std::string default_network() { return default_network_; } |
| 96 std::string default_network_connection_state() { | 102 std::string default_network_connection_state() { |
| 97 return default_network_connection_state_; | 103 return default_network_connection_state_; |
| 98 } | 104 } |
| 99 size_t favorite_count() { return favorite_count_; } | 105 size_t favorite_count() { return favorite_count_; } |
| 100 | 106 |
| 101 int PropertyUpdatesForService(const std::string& service_path) { | 107 int PropertyUpdatesForService(const std::string& service_path) { |
| 102 return property_updates_[service_path]; | 108 return property_updates_[service_path]; |
| 103 } | 109 } |
| 104 | 110 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 125 | 131 |
| 126 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 132 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
| 127 }; | 133 }; |
| 128 | 134 |
| 129 } // namespace | 135 } // namespace |
| 130 | 136 |
| 131 namespace chromeos { | 137 namespace chromeos { |
| 132 | 138 |
| 133 class NetworkStateHandlerTest : public testing::Test { | 139 class NetworkStateHandlerTest : public testing::Test { |
| 134 public: | 140 public: |
| 135 NetworkStateHandlerTest() {} | 141 NetworkStateHandlerTest() |
| 142 : device_test_(NULL), manager_test_(NULL), service_test_(NULL) {} |
| 136 virtual ~NetworkStateHandlerTest() {} | 143 virtual ~NetworkStateHandlerTest() {} |
| 137 | 144 |
| 138 virtual void SetUp() OVERRIDE { | 145 virtual void SetUp() OVERRIDE { |
| 139 // Initialize DBusThreadManager with a stub implementation. | 146 // Initialize DBusThreadManager with a stub implementation. |
| 140 DBusThreadManager::InitializeWithStub(); | 147 DBusThreadManager::InitializeWithStub(); |
| 141 SetupNetworkStateHandler(); | 148 SetupNetworkStateHandler(); |
| 142 message_loop_.RunUntilIdle(); | 149 message_loop_.RunUntilIdle(); |
| 143 } | 150 } |
| 144 | 151 |
| 145 virtual void TearDown() OVERRIDE { | 152 virtual void TearDown() OVERRIDE { |
| 146 network_state_handler_->RemoveObserver(test_observer_.get(), FROM_HERE); | 153 network_state_handler_->RemoveObserver(test_observer_.get(), FROM_HERE); |
| 147 test_observer_.reset(); | 154 test_observer_.reset(); |
| 148 network_state_handler_.reset(); | 155 network_state_handler_.reset(); |
| 149 DBusThreadManager::Shutdown(); | 156 DBusThreadManager::Shutdown(); |
| 150 } | 157 } |
| 151 | 158 |
| 152 void SetupNetworkStateHandler() { | 159 void SetupNetworkStateHandler() { |
| 153 SetupDefaultShillState(); | 160 SetupDefaultShillState(); |
| 154 network_state_handler_.reset(new NetworkStateHandler); | 161 network_state_handler_.reset(new NetworkStateHandler); |
| 155 test_observer_.reset(new TestObserver(network_state_handler_.get())); | 162 test_observer_.reset(new TestObserver(network_state_handler_.get())); |
| 156 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); | 163 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); |
| 157 network_state_handler_->InitShillPropertyHandler(); | 164 network_state_handler_->InitShillPropertyHandler(); |
| 158 } | 165 } |
| 159 | 166 |
| 160 protected: | 167 protected: |
| 161 void SetupDefaultShillState() { | 168 void SetupDefaultShillState() { |
| 162 message_loop_.RunUntilIdle(); // Process any pending updates | 169 message_loop_.RunUntilIdle(); // Process any pending updates |
| 163 ShillDeviceClient::TestInterface* device_test = | 170 device_test_ = |
| 164 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); | 171 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); |
| 165 device_test->ClearDevices(); | 172 ASSERT_TRUE(device_test_); |
| 166 device_test->AddDevice("/device/stub_wifi_device1", | 173 device_test_->ClearDevices(); |
| 167 shill::kTypeWifi, "stub_wifi_device1"); | 174 device_test_->AddDevice( |
| 168 device_test->AddDevice("/device/stub_cellular_device1", | 175 "/device/stub_wifi_device1", shill::kTypeWifi, "stub_wifi_device1"); |
| 169 shill::kTypeCellular, "stub_cellular_device1"); | 176 device_test_->AddDevice("/device/stub_cellular_device1", |
| 177 shill::kTypeCellular, |
| 178 "stub_cellular_device1"); |
| 170 | 179 |
| 171 ShillServiceClient::TestInterface* service_test = | 180 manager_test_ = |
| 181 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); |
| 182 ASSERT_TRUE(manager_test_); |
| 183 |
| 184 service_test_ = |
| 172 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | 185 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
| 173 service_test->ClearServices(); | 186 ASSERT_TRUE(service_test_); |
| 187 service_test_->ClearServices(); |
| 174 const bool add_to_visible = true; | 188 const bool add_to_visible = true; |
| 175 const bool add_to_watchlist = true; | 189 const bool add_to_watchlist = true; |
| 176 service_test->AddService(kShillManagerClientStubDefaultService, | 190 service_test_->AddService(kShillManagerClientStubDefaultService, |
| 177 kShillManagerClientStubDefaultService, | 191 kShillManagerClientStubDefaultService, |
| 178 shill::kTypeEthernet, shill::kStateOnline, | 192 shill::kTypeEthernet, |
| 179 add_to_visible, add_to_watchlist); | 193 shill::kStateOnline, |
| 180 service_test->AddService(kShillManagerClientStubDefaultWireless, | 194 add_to_visible, |
| 181 kShillManagerClientStubDefaultWireless, | 195 add_to_watchlist); |
| 182 shill::kTypeWifi, shill::kStateOnline, | 196 service_test_->AddService(kShillManagerClientStubDefaultWireless, |
| 183 add_to_visible, add_to_watchlist); | 197 kShillManagerClientStubDefaultWireless, |
| 184 service_test->AddService(kShillManagerClientStubWireless2, | 198 shill::kTypeWifi, |
| 185 kShillManagerClientStubWireless2, | 199 shill::kStateOnline, |
| 186 shill::kTypeWifi, shill::kStateIdle, | 200 add_to_visible, |
| 187 add_to_visible, add_to_watchlist); | 201 add_to_watchlist); |
| 188 service_test->AddService(kShillManagerClientStubCellular, | 202 service_test_->AddService(kShillManagerClientStubWireless2, |
| 189 kShillManagerClientStubCellular, | 203 kShillManagerClientStubWireless2, |
| 190 shill::kTypeCellular, shill::kStateIdle, | 204 shill::kTypeWifi, |
| 191 add_to_visible, add_to_watchlist); | 205 shill::kStateIdle, |
| 206 add_to_visible, |
| 207 add_to_watchlist); |
| 208 service_test_->AddService(kShillManagerClientStubCellular, |
| 209 kShillManagerClientStubCellular, |
| 210 shill::kTypeCellular, |
| 211 shill::kStateIdle, |
| 212 add_to_visible, |
| 213 add_to_watchlist); |
| 192 } | 214 } |
| 193 | 215 |
| 194 base::MessageLoopForUI message_loop_; | 216 base::MessageLoopForUI message_loop_; |
| 195 scoped_ptr<NetworkStateHandler> network_state_handler_; | 217 scoped_ptr<NetworkStateHandler> network_state_handler_; |
| 196 scoped_ptr<TestObserver> test_observer_; | 218 scoped_ptr<TestObserver> test_observer_; |
| 219 ShillDeviceClient::TestInterface* device_test_; |
| 220 ShillManagerClient::TestInterface* manager_test_; |
| 221 ShillServiceClient::TestInterface* service_test_; |
| 197 | 222 |
| 198 private: | 223 private: |
| 199 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); | 224 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); |
| 200 }; | 225 }; |
| 201 | 226 |
| 202 TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) { | 227 TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) { |
| 203 // Ensure that the network list is the expected size. | 228 // Ensure that the network list is the expected size. |
| 204 const size_t kNumShillManagerClientStubImplServices = 4; | 229 const size_t kNumShillManagerClientStubImplServices = 4; |
| 205 EXPECT_EQ(kNumShillManagerClientStubImplServices, | 230 EXPECT_EQ(kNumShillManagerClientStubImplServices, |
| 206 test_observer_->network_count()); | 231 test_observer_->network_count()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 // Ensure we receive 2 manager changed callbacks when the technology becomes | 277 // Ensure we receive 2 manager changed callbacks when the technology becomes |
| 253 // avalable and enabled. | 278 // avalable and enabled. |
| 254 EXPECT_EQ(initial_changed_count + 4, | 279 EXPECT_EQ(initial_changed_count + 4, |
| 255 test_observer_->device_list_changed_count()); | 280 test_observer_->device_list_changed_count()); |
| 256 EXPECT_EQ( | 281 EXPECT_EQ( |
| 257 NetworkStateHandler::TECHNOLOGY_ENABLED, | 282 NetworkStateHandler::TECHNOLOGY_ENABLED, |
| 258 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 283 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 259 } | 284 } |
| 260 | 285 |
| 261 TEST_F(NetworkStateHandlerTest, TechnologyState) { | 286 TEST_F(NetworkStateHandlerTest, TechnologyState) { |
| 262 ShillManagerClient::TestInterface* manager_test = | 287 manager_test_->RemoveTechnology(shill::kTypeWimax); |
| 263 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); | |
| 264 manager_test->RemoveTechnology(shill::kTypeWimax); | |
| 265 message_loop_.RunUntilIdle(); | 288 message_loop_.RunUntilIdle(); |
| 266 EXPECT_EQ( | 289 EXPECT_EQ( |
| 267 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, | 290 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, |
| 268 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 291 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 269 | 292 |
| 270 manager_test->AddTechnology(shill::kTypeWimax, false); | 293 manager_test_->AddTechnology(shill::kTypeWimax, false); |
| 271 message_loop_.RunUntilIdle(); | 294 message_loop_.RunUntilIdle(); |
| 272 EXPECT_EQ( | 295 EXPECT_EQ( |
| 273 NetworkStateHandler::TECHNOLOGY_AVAILABLE, | 296 NetworkStateHandler::TECHNOLOGY_AVAILABLE, |
| 274 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 297 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 275 | 298 |
| 276 manager_test->SetTechnologyInitializing(shill::kTypeWimax, true); | 299 manager_test_->SetTechnologyInitializing(shill::kTypeWimax, true); |
| 277 message_loop_.RunUntilIdle(); | 300 message_loop_.RunUntilIdle(); |
| 278 EXPECT_EQ( | 301 EXPECT_EQ( |
| 279 NetworkStateHandler::TECHNOLOGY_UNINITIALIZED, | 302 NetworkStateHandler::TECHNOLOGY_UNINITIALIZED, |
| 280 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 303 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 281 | 304 |
| 282 manager_test->SetTechnologyInitializing(shill::kTypeWimax, false); | 305 manager_test_->SetTechnologyInitializing(shill::kTypeWimax, false); |
| 283 network_state_handler_->SetTechnologyEnabled( | 306 network_state_handler_->SetTechnologyEnabled( |
| 284 NetworkTypePattern::Wimax(), true, network_handler::ErrorCallback()); | 307 NetworkTypePattern::Wimax(), true, network_handler::ErrorCallback()); |
| 285 message_loop_.RunUntilIdle(); | 308 message_loop_.RunUntilIdle(); |
| 286 EXPECT_EQ( | 309 EXPECT_EQ( |
| 287 NetworkStateHandler::TECHNOLOGY_ENABLED, | 310 NetworkStateHandler::TECHNOLOGY_ENABLED, |
| 288 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 311 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 289 | 312 |
| 290 manager_test->RemoveTechnology(shill::kTypeWimax); | 313 manager_test_->RemoveTechnology(shill::kTypeWimax); |
| 291 message_loop_.RunUntilIdle(); | 314 message_loop_.RunUntilIdle(); |
| 292 EXPECT_EQ( | 315 EXPECT_EQ( |
| 293 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, | 316 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, |
| 294 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 317 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 295 } | 318 } |
| 296 | 319 |
| 297 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { | 320 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { |
| 298 // Set a service property. | 321 // Set a service property. |
| 299 const std::string eth1 = kShillManagerClientStubDefaultService; | 322 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 300 EXPECT_EQ("", network_state_handler_->GetNetworkState(eth1)->security()); | 323 EXPECT_EQ("", network_state_handler_->GetNetworkState(eth1)->security()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 325 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); | 348 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); |
| 326 EXPECT_TRUE(profile_test->AddService("/profile/default", wifi1)); | 349 EXPECT_TRUE(profile_test->AddService("/profile/default", wifi1)); |
| 327 message_loop_.RunUntilIdle(); | 350 message_loop_.RunUntilIdle(); |
| 328 network_state_handler_->UpdateManagerProperties(); | 351 network_state_handler_->UpdateManagerProperties(); |
| 329 message_loop_.RunUntilIdle(); | 352 message_loop_.RunUntilIdle(); |
| 330 EXPECT_EQ(1u, test_observer_->favorite_count()); | 353 EXPECT_EQ(1u, test_observer_->favorite_count()); |
| 331 } | 354 } |
| 332 | 355 |
| 333 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { | 356 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { |
| 334 // Change a network state. | 357 // Change a network state. |
| 335 ShillServiceClient::TestInterface* service_test = | |
| 336 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | |
| 337 const std::string eth1 = kShillManagerClientStubDefaultService; | 358 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 338 base::StringValue connection_state_idle_value(shill::kStateIdle); | 359 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 339 service_test->SetServiceProperty(eth1, shill::kStateProperty, | 360 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 340 connection_state_idle_value); | 361 connection_state_idle_value); |
| 341 message_loop_.RunUntilIdle(); | 362 message_loop_.RunUntilIdle(); |
| 342 EXPECT_EQ(shill::kStateIdle, | 363 EXPECT_EQ(shill::kStateIdle, |
| 343 test_observer_->NetworkConnectionStateForService(eth1)); | 364 test_observer_->NetworkConnectionStateForService(eth1)); |
| 344 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); | 365 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); |
| 345 // Confirm that changing the connection state to the same value does *not* | 366 // Confirm that changing the connection state to the same value does *not* |
| 346 // signal the observer. | 367 // signal the observer. |
| 347 service_test->SetServiceProperty(eth1, shill::kStateProperty, | 368 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 348 connection_state_idle_value); | 369 connection_state_idle_value); |
| 349 message_loop_.RunUntilIdle(); | 370 message_loop_.RunUntilIdle(); |
| 350 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); | 371 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); |
| 351 } | 372 } |
| 352 | 373 |
| 353 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { | 374 TEST_F(NetworkStateHandlerTest, DefaultServiceDisconnected) { |
| 354 ShillManagerClient::TestInterface* manager_test = | |
| 355 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); | |
| 356 ASSERT_TRUE(manager_test); | |
| 357 ShillServiceClient::TestInterface* service_test = | |
| 358 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | |
| 359 ASSERT_TRUE(service_test); | |
| 360 | |
| 361 // Change the default network by changing the state of eth1 to Idle which | |
| 362 // should re-sort Manager.Services. | |
| 363 const std::string eth1 = kShillManagerClientStubDefaultService; | 375 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 364 const std::string wifi1 = kShillManagerClientStubDefaultWireless; | 376 const std::string wifi1 = kShillManagerClientStubDefaultWireless; |
| 377 |
| 378 // Disconnect ethernet. |
| 379 test_observer_->reset_network_change_count(); |
| 365 base::StringValue connection_state_idle_value(shill::kStateIdle); | 380 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 366 service_test->SetServiceProperty(eth1, shill::kStateProperty, | 381 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 367 connection_state_idle_value); | 382 connection_state_idle_value); |
| 383 message_loop_.RunUntilIdle(); |
| 384 // Expect two changes: first when eth1 becomes disconnected, second when |
| 385 // wifi1 becomes the default. |
| 386 EXPECT_EQ(2u, test_observer_->default_network_change_count()); |
| 387 EXPECT_EQ(wifi1, test_observer_->default_network()); |
| 388 |
| 389 // Disconnect wifi. |
| 390 test_observer_->reset_network_change_count(); |
| 391 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 392 connection_state_idle_value); |
| 393 message_loop_.RunUntilIdle(); |
| 394 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 395 EXPECT_EQ("", test_observer_->default_network()); |
| 396 } |
| 397 |
| 398 TEST_F(NetworkStateHandlerTest, DefaultServiceConnected) { |
| 399 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 400 const std::string wifi1 = kShillManagerClientStubDefaultWireless; |
| 401 |
| 402 // Disconnect ethernet and wifi. |
| 403 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 404 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 405 connection_state_idle_value); |
| 406 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 407 connection_state_idle_value); |
| 408 message_loop_.RunUntilIdle(); |
| 409 EXPECT_EQ(std::string(), test_observer_->default_network()); |
| 410 |
| 411 // Connect ethernet, should become the default network. |
| 412 test_observer_->reset_network_change_count(); |
| 413 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 414 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 415 connection_state_ready_value); |
| 416 message_loop_.RunUntilIdle(); |
| 417 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 418 EXPECT_EQ(shill::kStateReady, |
| 419 test_observer_->default_network_connection_state()); |
| 420 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 421 } |
| 422 |
| 423 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { |
| 424 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 425 // The default service should be eth1. |
| 426 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 427 |
| 428 // Change the default network by changing Manager.DefaultService. |
| 429 test_observer_->reset_network_change_count(); |
| 430 const std::string wifi1 = kShillManagerClientStubDefaultWireless; |
| 431 base::StringValue wifi1_value(wifi1); |
| 432 manager_test_->SetManagerProperty( |
| 433 shill::kDefaultServiceProperty, wifi1_value); |
| 368 message_loop_.RunUntilIdle(); | 434 message_loop_.RunUntilIdle(); |
| 369 EXPECT_EQ(wifi1, test_observer_->default_network()); | 435 EXPECT_EQ(wifi1, test_observer_->default_network()); |
| 370 EXPECT_EQ(shill::kStateOnline, | 436 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 437 |
| 438 // Change the state of the default network. |
| 439 test_observer_->reset_network_change_count(); |
| 440 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 441 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 442 connection_state_ready_value); |
| 443 message_loop_.RunUntilIdle(); |
| 444 EXPECT_EQ(shill::kStateReady, |
| 371 test_observer_->default_network_connection_state()); | 445 test_observer_->default_network_connection_state()); |
| 372 // We should have seen 2 default network updates - for the default | 446 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 373 // service change, and for the state change. | |
| 374 EXPECT_EQ(2u, test_observer_->default_network_change_count()); | |
| 375 | 447 |
| 376 // Updating a property on the default network should trigger | 448 // Updating a property on the default network should trigger |
| 377 // a default network change. | 449 // a default network change. |
| 450 test_observer_->reset_network_change_count(); |
| 378 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 451 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
| 379 dbus::ObjectPath(wifi1), | 452 dbus::ObjectPath(wifi1), |
| 380 shill::kSecurityProperty, base::StringValue("TestSecurity"), | 453 shill::kSecurityProperty, base::StringValue("TestSecurity"), |
| 381 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 454 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
| 382 message_loop_.RunUntilIdle(); | 455 message_loop_.RunUntilIdle(); |
| 383 EXPECT_EQ(3u, test_observer_->default_network_change_count()); | 456 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 384 | 457 |
| 385 // No default network updates for signal strength changes. | 458 // No default network updates for signal strength changes. |
| 459 test_observer_->reset_network_change_count(); |
| 386 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 460 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
| 387 dbus::ObjectPath(wifi1), | 461 dbus::ObjectPath(wifi1), |
| 388 shill::kSignalStrengthProperty, base::FundamentalValue(32), | 462 shill::kSignalStrengthProperty, base::FundamentalValue(32), |
| 389 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 463 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
| 390 message_loop_.RunUntilIdle(); | 464 message_loop_.RunUntilIdle(); |
| 391 EXPECT_EQ(3u, test_observer_->default_network_change_count()); | 465 EXPECT_EQ(0u, test_observer_->default_network_change_count()); |
| 392 } | 466 } |
| 393 | 467 |
| 394 TEST_F(NetworkStateHandlerTest, RequestUpdate) { | 468 TEST_F(NetworkStateHandlerTest, RequestUpdate) { |
| 395 // Request an update for kShillManagerClientStubDefaultWireless. | 469 // Request an update for kShillManagerClientStubDefaultWireless. |
| 396 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 470 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
| 397 kShillManagerClientStubDefaultWireless)); | 471 kShillManagerClientStubDefaultWireless)); |
| 398 network_state_handler_->RequestUpdateForNetwork( | 472 network_state_handler_->RequestUpdateForNetwork( |
| 399 kShillManagerClientStubDefaultWireless); | 473 kShillManagerClientStubDefaultWireless); |
| 400 message_loop_.RunUntilIdle(); | 474 message_loop_.RunUntilIdle(); |
| 401 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 475 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| 402 kShillManagerClientStubDefaultWireless)); | 476 kShillManagerClientStubDefaultWireless)); |
| 403 | 477 |
| 404 // Request an update for all networks. | 478 // Request an update for all networks. |
| 405 network_state_handler_->RequestUpdateForAllNetworks(); | 479 network_state_handler_->RequestUpdateForAllNetworks(); |
| 406 message_loop_.RunUntilIdle(); | 480 message_loop_.RunUntilIdle(); |
| 407 // kShillManagerClientStubDefaultWireless should now have 3 updates | 481 // kShillManagerClientStubDefaultWireless should now have 3 updates |
| 408 EXPECT_EQ(3, test_observer_->PropertyUpdatesForService( | 482 EXPECT_EQ(3, test_observer_->PropertyUpdatesForService( |
| 409 kShillManagerClientStubDefaultWireless)); | 483 kShillManagerClientStubDefaultWireless)); |
| 410 // Other networks should have 2 updates (inital + request). | 484 // Other networks should have 2 updates (inital + request). |
| 411 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 485 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| 412 kShillManagerClientStubDefaultService)); | 486 kShillManagerClientStubDefaultService)); |
| 413 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 487 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| 414 kShillManagerClientStubWireless2)); | 488 kShillManagerClientStubWireless2)); |
| 415 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 489 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| 416 kShillManagerClientStubCellular)); | 490 kShillManagerClientStubCellular)); |
| 417 } | 491 } |
| 418 | 492 |
| 419 } // namespace chromeos | 493 } // namespace chromeos |
| OLD | NEW |