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 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chromeos/dbus/dbus_thread_manager.h" | 15 #include "chromeos/dbus/dbus_thread_manager.h" |
| 16 #include "chromeos/dbus/shill_device_client.h" | 16 #include "chromeos/dbus/shill_device_client.h" |
| 17 #include "chromeos/dbus/shill_ipconfig_client.h" | |
| 17 #include "chromeos/dbus/shill_manager_client.h" | 18 #include "chromeos/dbus/shill_manager_client.h" |
| 18 #include "chromeos/dbus/shill_profile_client.h" | 19 #include "chromeos/dbus/shill_profile_client.h" |
| 19 #include "chromeos/dbus/shill_service_client.h" | 20 #include "chromeos/dbus/shill_service_client.h" |
| 21 #include "chromeos/network/device_state.h" | |
| 20 #include "chromeos/network/network_state.h" | 22 #include "chromeos/network/network_state.h" |
| 21 #include "chromeos/network/network_state_handler.h" | 23 #include "chromeos/network/network_state_handler.h" |
| 22 #include "chromeos/network/network_state_handler_observer.h" | 24 #include "chromeos/network/network_state_handler_observer.h" |
| 23 #include "dbus/object_path.h" | 25 #include "dbus/object_path.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 25 #include "third_party/cros_system_api/dbus/service_constants.h" | 27 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 26 | 28 |
| 27 namespace { | 29 namespace { |
| 28 | 30 |
| 29 void ErrorCallbackFunction(const std::string& error_name, | 31 void ErrorCallbackFunction(const std::string& error_name, |
| 30 const std::string& error_message) { | 32 const std::string& error_message) { |
| 31 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; | 33 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; |
| 32 } | 34 } |
| 33 | 35 |
| 36 const std::string kShillManagerClientStubWifiDevice = | |
| 37 "/device/stub_wifi_device1"; | |
| 38 const std::string kShillManagerClientStubCellularDevice = | |
| 39 "/device/stub_cellular_device1"; | |
| 34 const std::string kShillManagerClientStubDefaultService = "/service/eth1"; | 40 const std::string kShillManagerClientStubDefaultService = "/service/eth1"; |
| 35 const std::string kShillManagerClientStubDefaultWifi = "/service/wifi1"; | 41 const std::string kShillManagerClientStubDefaultWifi = "/service/wifi1"; |
| 36 const std::string kShillManagerClientStubWifi2 = "/service/wifi2"; | 42 const std::string kShillManagerClientStubWifi2 = "/service/wifi2"; |
| 37 const std::string kShillManagerClientStubCellular = "/service/cellular1"; | 43 const std::string kShillManagerClientStubCellular = "/service/cellular1"; |
| 38 | 44 |
| 45 using chromeos::DeviceState; | |
| 39 using chromeos::NetworkState; | 46 using chromeos::NetworkState; |
| 40 using chromeos::NetworkStateHandler; | 47 using chromeos::NetworkStateHandler; |
| 41 | 48 |
| 42 class TestObserver : public chromeos::NetworkStateHandlerObserver { | 49 class TestObserver : public chromeos::NetworkStateHandlerObserver { |
| 43 public: | 50 public: |
| 44 explicit TestObserver(NetworkStateHandler* handler) | 51 explicit TestObserver(NetworkStateHandler* handler) |
| 45 : handler_(handler), | 52 : handler_(handler), |
| 46 device_list_changed_count_(0), | 53 device_list_changed_count_(0), |
| 47 device_count_(0), | 54 device_count_(0), |
| 48 network_list_changed_count_(0), | 55 network_list_changed_count_(0), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 88 const NetworkState* network) OVERRIDE { | 95 const NetworkState* network) OVERRIDE { |
| 89 network_connection_state_[network->path()] = network->connection_state(); | 96 network_connection_state_[network->path()] = network->connection_state(); |
| 90 connection_state_changes_[network->path()]++; | 97 connection_state_changes_[network->path()]++; |
| 91 } | 98 } |
| 92 | 99 |
| 93 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { | 100 virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { |
| 94 DCHECK(network); | 101 DCHECK(network); |
| 95 property_updates_[network->path()]++; | 102 property_updates_[network->path()]++; |
| 96 } | 103 } |
| 97 | 104 |
| 105 virtual void DevicePropertiesUpdated(const DeviceState* device) OVERRIDE { | |
| 106 DCHECK(device); | |
| 107 device_property_updates_[device->path()]++; | |
| 108 } | |
| 109 | |
| 98 size_t device_list_changed_count() { return device_list_changed_count_; } | 110 size_t device_list_changed_count() { return device_list_changed_count_; } |
| 99 size_t device_count() { return device_count_; } | 111 size_t device_count() { return device_count_; } |
| 100 size_t network_list_changed_count() { return network_list_changed_count_; } | 112 size_t network_list_changed_count() { return network_list_changed_count_; } |
| 101 size_t network_count() { return network_count_; } | 113 size_t network_count() { return network_count_; } |
| 102 size_t default_network_change_count() { | 114 size_t default_network_change_count() { |
| 103 return default_network_change_count_; | 115 return default_network_change_count_; |
| 104 } | 116 } |
| 105 void reset_change_counts() { | 117 void reset_change_counts() { |
| 106 DVLOG(1) << "=== RESET CHANGE COUNTS ==="; | 118 DVLOG(1) << "=== RESET CHANGE COUNTS ==="; |
| 107 default_network_change_count_ = 0; | 119 default_network_change_count_ = 0; |
| 108 device_list_changed_count_ = 0; | 120 device_list_changed_count_ = 0; |
| 109 network_list_changed_count_ = 0; | 121 network_list_changed_count_ = 0; |
| 122 connection_state_changes_.clear(); | |
| 123 } | |
| 124 void reset_updates() { | |
| 125 property_updates_.clear(); | |
| 126 device_property_updates_.clear(); | |
| 110 } | 127 } |
| 111 std::string default_network() { return default_network_; } | 128 std::string default_network() { return default_network_; } |
| 112 std::string default_network_connection_state() { | 129 std::string default_network_connection_state() { |
| 113 return default_network_connection_state_; | 130 return default_network_connection_state_; |
| 114 } | 131 } |
| 115 | 132 |
| 116 int PropertyUpdatesForService(const std::string& service_path) { | 133 int PropertyUpdatesForService(const std::string& service_path) { |
| 117 return property_updates_[service_path]; | 134 return property_updates_[service_path]; |
| 118 } | 135 } |
| 119 | 136 |
| 137 int PropertyUpdatesForDevice(const std::string& device_path) { | |
| 138 return device_property_updates_[device_path]; | |
| 139 } | |
| 140 | |
| 120 int ConnectionStateChangesForService(const std::string& service_path) { | 141 int ConnectionStateChangesForService(const std::string& service_path) { |
| 121 return connection_state_changes_[service_path]; | 142 return connection_state_changes_[service_path]; |
| 122 } | 143 } |
| 123 | 144 |
| 124 std::string NetworkConnectionStateForService( | 145 std::string NetworkConnectionStateForService( |
| 125 const std::string& service_path) { | 146 const std::string& service_path) { |
| 126 return network_connection_state_[service_path]; | 147 return network_connection_state_[service_path]; |
| 127 } | 148 } |
| 128 | 149 |
| 129 private: | 150 private: |
| 130 NetworkStateHandler* handler_; | 151 NetworkStateHandler* handler_; |
| 131 size_t device_list_changed_count_; | 152 size_t device_list_changed_count_; |
| 132 size_t device_count_; | 153 size_t device_count_; |
| 133 size_t network_list_changed_count_; | 154 size_t network_list_changed_count_; |
| 134 size_t network_count_; | 155 size_t network_count_; |
| 135 size_t default_network_change_count_; | 156 size_t default_network_change_count_; |
| 136 std::string default_network_; | 157 std::string default_network_; |
| 137 std::string default_network_connection_state_; | 158 std::string default_network_connection_state_; |
| 138 std::map<std::string, int> property_updates_; | 159 std::map<std::string, int> property_updates_; |
| 160 std::map<std::string, int> device_property_updates_; | |
| 139 std::map<std::string, int> connection_state_changes_; | 161 std::map<std::string, int> connection_state_changes_; |
| 140 std::map<std::string, std::string> network_connection_state_; | 162 std::map<std::string, std::string> network_connection_state_; |
| 141 | 163 |
| 142 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 164 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
| 143 }; | 165 }; |
| 144 | 166 |
| 145 } // namespace | 167 } // namespace |
| 146 | 168 |
| 147 namespace chromeos { | 169 namespace chromeos { |
| 148 | 170 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 service_test_->AddService(service_path, guid, name, type, state, | 205 service_test_->AddService(service_path, guid, name, type, state, |
| 184 true /* add_to_visible */); | 206 true /* add_to_visible */); |
| 185 } | 207 } |
| 186 | 208 |
| 187 void SetupDefaultShillState() { | 209 void SetupDefaultShillState() { |
| 188 message_loop_.RunUntilIdle(); // Process any pending updates | 210 message_loop_.RunUntilIdle(); // Process any pending updates |
| 189 device_test_ = | 211 device_test_ = |
| 190 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); | 212 DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); |
| 191 ASSERT_TRUE(device_test_); | 213 ASSERT_TRUE(device_test_); |
| 192 device_test_->ClearDevices(); | 214 device_test_->ClearDevices(); |
| 193 device_test_->AddDevice( | 215 device_test_->AddDevice(kShillManagerClientStubWifiDevice, |
| 194 "/device/stub_wifi_device1", shill::kTypeWifi, "stub_wifi_device1"); | 216 shill::kTypeWifi, "stub_wifi_device1"); |
| 195 device_test_->AddDevice("/device/stub_cellular_device1", | 217 device_test_->AddDevice(kShillManagerClientStubCellularDevice, |
| 196 shill::kTypeCellular, | 218 shill::kTypeCellular, "stub_cellular_device1"); |
| 197 "stub_cellular_device1"); | |
| 198 | 219 |
| 199 manager_test_ = | 220 manager_test_ = |
| 200 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); | 221 DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); |
| 201 ASSERT_TRUE(manager_test_); | 222 ASSERT_TRUE(manager_test_); |
| 202 | 223 |
| 203 profile_test_ = | 224 profile_test_ = |
| 204 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); | 225 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); |
| 205 ASSERT_TRUE(profile_test_); | 226 ASSERT_TRUE(profile_test_); |
| 206 profile_test_->ClearProfiles(); | 227 profile_test_->ClearProfiles(); |
| 207 | 228 |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 514 network_state_handler_->GetNetworkStateFromGuid(wifi_network->guid()); | 535 network_state_handler_->GetNetworkStateFromGuid(wifi_network->guid()); |
| 515 EXPECT_EQ(wifi_network, wifi_network_guid); | 536 EXPECT_EQ(wifi_network, wifi_network_guid); |
| 516 | 537 |
| 517 // Remove the service, verify that there is no longer a NetworkState for it. | 538 // Remove the service, verify that there is no longer a NetworkState for it. |
| 518 service_test_->RemoveService(wifi_path); | 539 service_test_->RemoveService(wifi_path); |
| 519 UpdateManagerProperties(); | 540 UpdateManagerProperties(); |
| 520 EXPECT_FALSE(network_state_handler_->GetNetworkState(wifi_path)); | 541 EXPECT_FALSE(network_state_handler_->GetNetworkState(wifi_path)); |
| 521 } | 542 } |
| 522 | 543 |
| 523 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { | 544 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { |
| 545 const std::string eth1 = kShillManagerClientStubDefaultService; | |
| 546 EXPECT_EQ(0, test_observer_->ConnectionStateChangesForService(eth1)); | |
| 547 | |
| 524 // Change a network state. | 548 // Change a network state. |
| 525 const std::string eth1 = kShillManagerClientStubDefaultService; | |
| 526 base::StringValue connection_state_idle_value(shill::kStateIdle); | 549 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 527 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 550 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 528 connection_state_idle_value); | 551 connection_state_idle_value); |
| 529 message_loop_.RunUntilIdle(); | 552 message_loop_.RunUntilIdle(); |
| 530 EXPECT_EQ(shill::kStateIdle, | 553 EXPECT_EQ(shill::kStateIdle, |
| 531 test_observer_->NetworkConnectionStateForService(eth1)); | 554 test_observer_->NetworkConnectionStateForService(eth1)); |
| 532 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); | 555 EXPECT_EQ(1, test_observer_->ConnectionStateChangesForService(eth1)); |
|
pneubeck (no reviews)
2014/07/16 21:43:35
I'm confused, maybe because it's to late. Why did
stevenjb
2014/07/16 22:14:15
reset_change_counts() which gets called in SetUp()
| |
| 533 // Confirm that changing the connection state to the same value does *not* | 556 // Confirm that changing the connection state to the same value does *not* |
| 534 // signal the observer. | 557 // signal the observer. |
| 535 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 558 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 536 connection_state_idle_value); | 559 connection_state_idle_value); |
| 537 message_loop_.RunUntilIdle(); | 560 message_loop_.RunUntilIdle(); |
| 538 EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth1)); | 561 EXPECT_EQ(1, test_observer_->ConnectionStateChangesForService(eth1)); |
| 539 } | 562 } |
| 540 | 563 |
| 541 TEST_F(NetworkStateHandlerTest, DefaultServiceDisconnected) { | 564 TEST_F(NetworkStateHandlerTest, DefaultServiceDisconnected) { |
| 542 const std::string eth1 = kShillManagerClientStubDefaultService; | 565 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 543 const std::string wifi1 = kShillManagerClientStubDefaultWifi; | 566 const std::string wifi1 = kShillManagerClientStubDefaultWifi; |
| 544 | 567 |
| 545 EXPECT_EQ(0u, test_observer_->default_network_change_count()); | 568 EXPECT_EQ(0u, test_observer_->default_network_change_count()); |
| 546 // Disconnect ethernet. | 569 // Disconnect ethernet. |
| 547 base::StringValue connection_state_idle_value(shill::kStateIdle); | 570 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 548 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 571 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 706 // the NetworkState was created with the same GUID. | 729 // the NetworkState was created with the same GUID. |
| 707 AddService(wifi_path, "" /* guid */, wifi_name, | 730 AddService(wifi_path, "" /* guid */, wifi_name, |
| 708 shill::kTypeWifi, shill::kStateOnline); | 731 shill::kTypeWifi, shill::kStateOnline); |
| 709 UpdateManagerProperties(); | 732 UpdateManagerProperties(); |
| 710 network = network_state_handler_->GetNetworkStateFromServicePath( | 733 network = network_state_handler_->GetNetworkStateFromServicePath( |
| 711 wifi_path, is_service_configured); | 734 wifi_path, is_service_configured); |
| 712 ASSERT_TRUE(network); | 735 ASSERT_TRUE(network); |
| 713 EXPECT_EQ(wifi_guid, network->guid()); | 736 EXPECT_EQ(wifi_guid, network->guid()); |
| 714 } | 737 } |
| 715 | 738 |
| 739 TEST_F(NetworkStateHandlerTest, DeviceListChanged) { | |
| 740 size_t stub_device_count = test_observer_->device_count(); | |
| 741 // Add an additional device. | |
| 742 const std::string wifi_device = "/service/stub_wifi_device2"; | |
| 743 device_test_->AddDevice(wifi_device, shill::kTypeWifi, "stub_wifi_device2"); | |
| 744 UpdateManagerProperties(); | |
| 745 // Expect a device list update. | |
| 746 EXPECT_EQ(stub_device_count + 1, test_observer_->device_count()); | |
| 747 EXPECT_EQ(0, test_observer_->PropertyUpdatesForDevice(wifi_device)); | |
| 748 // Change a device property. | |
| 749 device_test_->SetDeviceProperty( | |
| 750 wifi_device, shill::kScanningProperty, base::FundamentalValue(true)); | |
| 751 UpdateManagerProperties(); | |
| 752 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice(wifi_device)); | |
| 753 } | |
| 754 | |
| 755 TEST_F(NetworkStateHandlerTest, IPConfigChanged) { | |
| 756 test_observer_->reset_updates(); | |
| 757 EXPECT_EQ(0, test_observer_->PropertyUpdatesForDevice( | |
| 758 kShillManagerClientStubWifiDevice)); | |
| 759 EXPECT_EQ(0, test_observer_->PropertyUpdatesForService( | |
| 760 kShillManagerClientStubDefaultWifi)); | |
| 761 | |
| 762 // Change IPConfigs property. | |
| 763 ShillIPConfigClient::TestInterface* ip_config_test = | |
| 764 DBusThreadManager::Get()->GetShillIPConfigClient()->GetTestInterface(); | |
| 765 const std::string kIPConfigPath = "test_ip_config"; | |
| 766 base::DictionaryValue ip_config_properties; | |
| 767 ip_config_test->AddIPConfig(kIPConfigPath, ip_config_properties); | |
| 768 base::ListValue device_ip_configs; | |
| 769 device_ip_configs.Append(new base::StringValue(kIPConfigPath)); | |
| 770 device_test_->SetDeviceProperty( | |
| 771 kShillManagerClientStubWifiDevice, shill::kIPConfigsProperty, | |
| 772 device_ip_configs); | |
| 773 service_test_->SetServiceProperty( | |
| 774 kShillManagerClientStubDefaultWifi, shill::kIPConfigProperty, | |
| 775 base::StringValue(kIPConfigPath)); | |
| 776 UpdateManagerProperties(); | |
| 777 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice( | |
| 778 kShillManagerClientStubWifiDevice)); | |
| 779 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | |
| 780 kShillManagerClientStubDefaultWifi)); | |
| 781 } | |
| 782 | |
| 716 } // namespace chromeos | 783 } // namespace chromeos |
| OLD | NEW |