Chromium Code Reviews| 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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 &networks); | 75 &networks); |
| 76 network_count_ = networks.size(); | 76 network_count_ = networks.size(); |
| 77 if (network_count_ == 0) { | 77 if (network_count_ == 0) { |
| 78 default_network_ = ""; | 78 default_network_ = ""; |
| 79 default_network_connection_state_ = ""; | 79 default_network_connection_state_ = ""; |
| 80 } | 80 } |
| 81 ++network_list_changed_count_; | 81 ++network_list_changed_count_; |
| 82 } | 82 } |
| 83 | 83 |
| 84 void DefaultNetworkChanged(const NetworkState* network) override { | 84 void DefaultNetworkChanged(const NetworkState* network) override { |
| 85 EXPECT_TRUE(!network || network->IsConnectedState()); | |
| 85 ++default_network_change_count_; | 86 ++default_network_change_count_; |
| 86 default_network_ = network ? network->path() : ""; | 87 default_network_ = network ? network->path() : ""; |
| 87 default_network_connection_state_ = | 88 default_network_connection_state_ = |
| 88 network ? network->connection_state() : ""; | 89 network ? network->connection_state() : ""; |
| 89 DVLOG(1) << "DefaultNetworkChanged: " << default_network_ | 90 DVLOG(1) << "DefaultNetworkChanged: " << default_network_ |
| 90 << " State: " << default_network_connection_state_; | 91 << " State: " << default_network_connection_state_; |
| 91 } | 92 } |
| 92 | 93 |
| 93 void NetworkConnectionStateChanged(const NetworkState* network) override { | 94 void NetworkConnectionStateChanged(const NetworkState* network) override { |
| 94 network_connection_state_[network->path()] = network->connection_state(); | 95 network_connection_state_[network->path()] = network->connection_state(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 163 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
| 163 }; | 164 }; |
| 164 | 165 |
| 165 } // namespace | 166 } // namespace |
| 166 | 167 |
| 167 namespace chromeos { | 168 namespace chromeos { |
| 168 | 169 |
| 169 class NetworkStateHandlerTest : public testing::Test { | 170 class NetworkStateHandlerTest : public testing::Test { |
| 170 public: | 171 public: |
| 171 NetworkStateHandlerTest() | 172 NetworkStateHandlerTest() |
| 172 : device_test_(NULL), | 173 : device_test_(nullptr), |
|
pneubeck (no reviews)
2015/03/12 19:40:09
nit: you could put all of these also to the declar
stevenjb
2015/03/12 19:57:07
I'd rather do that consistently throughout these c
| |
| 173 manager_test_(NULL), | 174 manager_test_(nullptr), |
| 174 profile_test_(NULL), | 175 profile_test_(nullptr), |
| 175 service_test_(NULL) {} | 176 service_test_(nullptr) {} |
| 176 ~NetworkStateHandlerTest() override {} | 177 ~NetworkStateHandlerTest() override {} |
| 177 | 178 |
| 178 void SetUp() override { | 179 void SetUp() override { |
| 179 // Initialize DBusThreadManager with a stub implementation. | 180 // Initialize DBusThreadManager with a stub implementation. |
| 180 DBusThreadManager::Initialize(); | 181 DBusThreadManager::Initialize(); |
| 181 SetupDefaultShillState(); | 182 SetupDefaultShillState(); |
| 182 network_state_handler_.reset(new NetworkStateHandler); | 183 network_state_handler_.reset(new NetworkStateHandler); |
| 183 test_observer_.reset(new TestObserver(network_state_handler_.get())); | 184 test_observer_.reset(new TestObserver(network_state_handler_.get())); |
| 184 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); | 185 network_state_handler_->AddObserver(test_observer_.get(), FROM_HERE); |
| 185 network_state_handler_->InitShillPropertyHandler(); | 186 network_state_handler_->InitShillPropertyHandler(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 247 "cellular1_guid", | 248 "cellular1_guid", |
| 248 "cellular1", | 249 "cellular1", |
| 249 shill::kTypeCellular, | 250 shill::kTypeCellular, |
| 250 shill::kStateIdle); | 251 shill::kStateIdle); |
| 251 } | 252 } |
| 252 | 253 |
| 253 void UpdateManagerProperties() { | 254 void UpdateManagerProperties() { |
| 254 message_loop_.RunUntilIdle(); | 255 message_loop_.RunUntilIdle(); |
| 255 } | 256 } |
| 256 | 257 |
| 258 void SetServiceProperty(const std::string& service_path, | |
| 259 const std::string& key, | |
| 260 const base::Value& value) { | |
| 261 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | |
| 262 dbus::ObjectPath(service_path), key, value, | |
| 263 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 264 } | |
| 265 | |
| 257 base::MessageLoopForUI message_loop_; | 266 base::MessageLoopForUI message_loop_; |
| 258 scoped_ptr<NetworkStateHandler> network_state_handler_; | 267 scoped_ptr<NetworkStateHandler> network_state_handler_; |
| 259 scoped_ptr<TestObserver> test_observer_; | 268 scoped_ptr<TestObserver> test_observer_; |
| 260 ShillDeviceClient::TestInterface* device_test_; | 269 ShillDeviceClient::TestInterface* device_test_; |
| 261 ShillManagerClient::TestInterface* manager_test_; | 270 ShillManagerClient::TestInterface* manager_test_; |
| 262 ShillProfileClient::TestInterface* profile_test_; | 271 ShillProfileClient::TestInterface* profile_test_; |
| 263 ShillServiceClient::TestInterface* service_test_; | 272 ShillServiceClient::TestInterface* service_test_; |
| 264 | 273 |
| 265 private: | 274 private: |
| 266 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); | 275 DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 398 message_loop_.RunUntilIdle(); | 407 message_loop_.RunUntilIdle(); |
| 399 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, | 408 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, |
| 400 test_observer_->network_count()); | 409 test_observer_->network_count()); |
| 401 | 410 |
| 402 // Get visible networks. | 411 // Get visible networks. |
| 403 NetworkStateHandler::NetworkStateList networks; | 412 NetworkStateHandler::NetworkStateList networks; |
| 404 network_state_handler_->GetVisibleNetworkList(&networks); | 413 network_state_handler_->GetVisibleNetworkList(&networks); |
| 405 EXPECT_EQ(kNumShillManagerClientStubImplServices, networks.size()); | 414 EXPECT_EQ(kNumShillManagerClientStubImplServices, networks.size()); |
| 406 | 415 |
| 407 // Change the visible state of a network. | 416 // Change the visible state of a network. |
| 408 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 417 SetServiceProperty(kShillManagerClientStubWifi2, shill::kVisibleProperty, |
| 409 dbus::ObjectPath(kShillManagerClientStubWifi2), | 418 base::FundamentalValue(false)); |
| 410 shill::kVisibleProperty, base::FundamentalValue(false), | |
| 411 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 412 message_loop_.RunUntilIdle(); | 419 message_loop_.RunUntilIdle(); |
| 413 network_state_handler_->GetVisibleNetworkList(&networks); | 420 network_state_handler_->GetVisibleNetworkList(&networks); |
| 414 EXPECT_EQ(kNumShillManagerClientStubImplServices - 1, networks.size()); | 421 EXPECT_EQ(kNumShillManagerClientStubImplServices - 1, networks.size()); |
| 415 } | 422 } |
| 416 | 423 |
| 417 TEST_F(NetworkStateHandlerTest, TechnologyChanged) { | 424 TEST_F(NetworkStateHandlerTest, TechnologyChanged) { |
| 418 // Disable a technology. Will immediately set the state to AVAILABLE and | 425 // Disable a technology. Will immediately set the state to AVAILABLE and |
| 419 // notify observers. | 426 // notify observers. |
| 420 network_state_handler_->SetTechnologyEnabled( | 427 network_state_handler_->SetTechnologyEnabled( |
| 421 NetworkTypePattern::WiFi(), false, network_handler::ErrorCallback()); | 428 NetworkTypePattern::WiFi(), false, network_handler::ErrorCallback()); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 487 } | 494 } |
| 488 | 495 |
| 489 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { | 496 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { |
| 490 // Set a service property. | 497 // Set a service property. |
| 491 const std::string eth1 = kShillManagerClientStubDefaultService; | 498 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 492 const NetworkState* ethernet = network_state_handler_->GetNetworkState(eth1); | 499 const NetworkState* ethernet = network_state_handler_->GetNetworkState(eth1); |
| 493 ASSERT_TRUE(ethernet); | 500 ASSERT_TRUE(ethernet); |
| 494 EXPECT_EQ("", ethernet->security_class()); | 501 EXPECT_EQ("", ethernet->security_class()); |
| 495 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService(eth1)); | 502 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService(eth1)); |
| 496 base::StringValue security_class_value("TestSecurityClass"); | 503 base::StringValue security_class_value("TestSecurityClass"); |
| 497 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 504 SetServiceProperty(eth1, shill::kSecurityClassProperty, security_class_value); |
| 498 dbus::ObjectPath(eth1), | |
| 499 shill::kSecurityClassProperty, security_class_value, | |
| 500 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 501 message_loop_.RunUntilIdle(); | 505 message_loop_.RunUntilIdle(); |
| 502 ethernet = network_state_handler_->GetNetworkState(eth1); | 506 ethernet = network_state_handler_->GetNetworkState(eth1); |
| 503 EXPECT_EQ("TestSecurityClass", ethernet->security_class()); | 507 EXPECT_EQ("TestSecurityClass", ethernet->security_class()); |
| 504 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService(eth1)); | 508 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService(eth1)); |
| 505 | 509 |
| 506 // Changing a service to the existing value should not trigger an update. | 510 // Changing a service to the existing value should not trigger an update. |
| 507 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 511 SetServiceProperty(eth1, shill::kSecurityClassProperty, security_class_value); |
| 508 dbus::ObjectPath(eth1), | |
| 509 shill::kSecurityClassProperty, security_class_value, | |
| 510 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 511 message_loop_.RunUntilIdle(); | 512 message_loop_.RunUntilIdle(); |
| 512 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService(eth1)); | 513 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService(eth1)); |
| 513 } | 514 } |
| 514 | 515 |
| 515 TEST_F(NetworkStateHandlerTest, GetState) { | 516 TEST_F(NetworkStateHandlerTest, GetState) { |
| 516 const std::string profile = "/profile/profile1"; | 517 const std::string profile = "/profile/profile1"; |
| 517 const std::string wifi_path = kShillManagerClientStubDefaultWifi; | 518 const std::string wifi_path = kShillManagerClientStubDefaultWifi; |
| 518 | 519 |
| 519 // Add a wifi service to a Profile. | 520 // Add a wifi service to a Profile. |
| 520 profile_test_->AddProfile(profile, "" /* userhash */); | 521 profile_test_->AddProfile(profile, "" /* userhash */); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 608 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 609 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 609 } | 610 } |
| 610 | 611 |
| 611 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { | 612 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { |
| 612 const std::string eth1 = kShillManagerClientStubDefaultService; | 613 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 613 // The default service should be eth1. | 614 // The default service should be eth1. |
| 614 EXPECT_EQ(eth1, test_observer_->default_network()); | 615 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 615 | 616 |
| 616 // Change the default network by changing Manager.DefaultService. | 617 // Change the default network by changing Manager.DefaultService. |
| 617 const std::string wifi1 = kShillManagerClientStubDefaultWifi; | 618 const std::string wifi1 = kShillManagerClientStubDefaultWifi; |
| 618 base::StringValue wifi1_value(wifi1); | 619 SetServiceProperty(eth1, shill::kStateProperty, |
| 619 manager_test_->SetManagerProperty( | 620 base::StringValue(shill::kStateIdle)); |
|
pneubeck (no reviews)
2015/03/12 19:40:09
since both of these calls send a notification to N
stevenjb
2015/03/12 19:57:07
Done.
| |
| 620 shill::kDefaultServiceProperty, wifi1_value); | 621 manager_test_->SetManagerProperty(shill::kDefaultServiceProperty, |
| 622 base::StringValue(wifi1)); | |
| 621 message_loop_.RunUntilIdle(); | 623 message_loop_.RunUntilIdle(); |
| 622 EXPECT_EQ(wifi1, test_observer_->default_network()); | 624 EXPECT_EQ(wifi1, test_observer_->default_network()); |
| 623 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 625 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 624 | 626 |
| 625 // Change the state of the default network. | 627 // Change the state of the default network. |
| 626 test_observer_->reset_change_counts(); | 628 test_observer_->reset_change_counts(); |
| 627 base::StringValue connection_state_ready_value(shill::kStateReady); | |
| 628 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, | 629 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 629 connection_state_ready_value); | 630 base::StringValue(shill::kStateReady)); |
| 630 message_loop_.RunUntilIdle(); | 631 message_loop_.RunUntilIdle(); |
| 631 EXPECT_EQ(shill::kStateReady, | 632 EXPECT_EQ(shill::kStateReady, |
| 632 test_observer_->default_network_connection_state()); | 633 test_observer_->default_network_connection_state()); |
| 633 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 634 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 634 | 635 |
| 635 // Updating a property on the default network should trigger | 636 // Updating a property on the default network should trigger |
| 636 // a default network change. | 637 // a default network change. |
| 637 test_observer_->reset_change_counts(); | 638 test_observer_->reset_change_counts(); |
| 638 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 639 SetServiceProperty(wifi1, shill::kSecurityClassProperty, |
| 639 dbus::ObjectPath(wifi1), | 640 base::StringValue("TestSecurityClass")); |
| 640 shill::kSecurityClassProperty, base::StringValue("TestSecurityClass"), | |
| 641 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 642 message_loop_.RunUntilIdle(); | 641 message_loop_.RunUntilIdle(); |
| 643 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | 642 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 644 | 643 |
| 645 // No default network updates for signal strength changes. | 644 // No default network updates for signal strength changes. |
| 646 test_observer_->reset_change_counts(); | 645 test_observer_->reset_change_counts(); |
| 647 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 646 SetServiceProperty(wifi1, shill::kSignalStrengthProperty, |
| 648 dbus::ObjectPath(wifi1), | 647 base::FundamentalValue(32)); |
| 649 shill::kSignalStrengthProperty, base::FundamentalValue(32), | |
| 650 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | |
| 651 message_loop_.RunUntilIdle(); | 648 message_loop_.RunUntilIdle(); |
| 652 EXPECT_EQ(0u, test_observer_->default_network_change_count()); | 649 EXPECT_EQ(0u, test_observer_->default_network_change_count()); |
| 650 | |
| 651 // Change the default network to a Connecting network, then set the | |
| 652 // state to Connected. The DefaultNetworkChange dnotification should not | |
|
pneubeck (no reviews)
2015/03/12 19:40:09
dnotification -> notification
| |
| 653 // fire until the network is connected. | |
| 654 test_observer_->reset_change_counts(); | |
| 655 SetServiceProperty(wifi1, shill::kStateProperty, | |
| 656 base::StringValue(shill::kStateIdle)); | |
| 657 message_loop_.RunUntilIdle(); | |
| 658 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | |
| 659 EXPECT_EQ(std::string(), test_observer_->default_network()); | |
| 660 | |
| 661 const std::string wifi2 = kShillManagerClientStubWifi2; | |
| 662 manager_test_->SetManagerProperty(shill::kDefaultServiceProperty, | |
| 663 base::StringValue(wifi2)); | |
| 664 message_loop_.RunUntilIdle(); | |
| 665 EXPECT_EQ(1u, test_observer_->default_network_change_count()); | |
| 666 // Change the connection state of the default network, observer should fire. | |
| 667 SetServiceProperty(wifi2, shill::kStateProperty, | |
| 668 base::StringValue(shill::kStateReady)); | |
| 669 message_loop_.RunUntilIdle(); | |
| 670 EXPECT_EQ(wifi2, test_observer_->default_network()); | |
| 671 EXPECT_EQ(2u, test_observer_->default_network_change_count()); | |
| 653 } | 672 } |
| 654 | 673 |
| 655 TEST_F(NetworkStateHandlerTest, RequestUpdate) { | 674 TEST_F(NetworkStateHandlerTest, RequestUpdate) { |
| 656 // Request an update for kShillManagerClientStubDefaultWifi. | 675 // Request an update for kShillManagerClientStubDefaultWifi. |
| 657 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 676 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
| 658 kShillManagerClientStubDefaultWifi)); | 677 kShillManagerClientStubDefaultWifi)); |
| 659 network_state_handler_->RequestUpdateForNetwork( | 678 network_state_handler_->RequestUpdateForNetwork( |
| 660 kShillManagerClientStubDefaultWifi); | 679 kShillManagerClientStubDefaultWifi); |
| 661 message_loop_.RunUntilIdle(); | 680 message_loop_.RunUntilIdle(); |
| 662 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 681 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 772 kShillManagerClientStubDefaultWifi, shill::kIPConfigProperty, | 791 kShillManagerClientStubDefaultWifi, shill::kIPConfigProperty, |
| 773 base::StringValue(kIPConfigPath)); | 792 base::StringValue(kIPConfigPath)); |
| 774 UpdateManagerProperties(); | 793 UpdateManagerProperties(); |
| 775 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice( | 794 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice( |
| 776 kShillManagerClientStubWifiDevice)); | 795 kShillManagerClientStubWifiDevice)); |
| 777 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 796 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
| 778 kShillManagerClientStubDefaultWifi)); | 797 kShillManagerClientStubDefaultWifi)); |
| 779 } | 798 } |
| 780 | 799 |
| 781 } // namespace chromeos | 800 } // namespace chromeos |
| OLD | NEW |