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 two changes: first when wifi1 becomes disconnected, second when |
| 395 // "" becomes the default. |
| 396 EXPECT_EQ(2u, test_observer_->default_network_change_count()); |
| 397 EXPECT_EQ("", test_observer_->default_network()); |
| 398 } |
| 399 |
| 400 TEST_F(NetworkStateHandlerTest, DefaultServiceConnected) { |
| 401 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 402 const std::string wifi1 = kShillManagerClientStubDefaultWireless; |
| 403 |
| 404 // Disconnect ethernet and wifi. |
| 405 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 406 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 407 connection_state_idle_value); |
| 408 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 409 connection_state_idle_value); |
| 410 message_loop_.RunUntilIdle(); |
| 411 EXPECT_EQ(std::string(), test_observer_->default_network()); |
| 412 |
| 413 // Connect ethernet, should become the default network. |
| 414 test_observer_->reset_network_change_count(); |
| 415 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 416 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 417 connection_state_ready_value); |
| 418 message_loop_.RunUntilIdle(); |
| 419 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 420 EXPECT_EQ(shill::kStateReady, |
| 421 test_observer_->default_network_connection_state()); |
| 422 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 423 } |
| 424 |
| 425 TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { |
| 426 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 427 // The default service should be eth1. |
| 428 EXPECT_EQ(eth1, test_observer_->default_network()); |
| 429 |
| 430 // Change the default network by changing Manager.DefaultService. |
| 431 test_observer_->reset_network_change_count(); |
| 432 const std::string wifi1 = kShillManagerClientStubDefaultWireless; |
| 433 base::StringValue wifi1_value(wifi1); |
| 434 manager_test_->SetManagerProperty( |
| 435 shill::kDefaultServiceProperty, wifi1_value); |
368 message_loop_.RunUntilIdle(); | 436 message_loop_.RunUntilIdle(); |
369 EXPECT_EQ(wifi1, test_observer_->default_network()); | 437 EXPECT_EQ(wifi1, test_observer_->default_network()); |
370 EXPECT_EQ(shill::kStateOnline, | 438 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
| 439 |
| 440 // Change the state of the default network. |
| 441 test_observer_->reset_network_change_count(); |
| 442 base::StringValue connection_state_ready_value(shill::kStateReady); |
| 443 service_test_->SetServiceProperty(wifi1, shill::kStateProperty, |
| 444 connection_state_ready_value); |
| 445 message_loop_.RunUntilIdle(); |
| 446 EXPECT_EQ(shill::kStateReady, |
371 test_observer_->default_network_connection_state()); | 447 test_observer_->default_network_connection_state()); |
372 // We should have seen 2 default network updates - for the default | 448 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 | 449 |
376 // Updating a property on the default network should trigger | 450 // Updating a property on the default network should trigger |
377 // a default network change. | 451 // a default network change. |
| 452 test_observer_->reset_network_change_count(); |
378 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 453 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
379 dbus::ObjectPath(wifi1), | 454 dbus::ObjectPath(wifi1), |
380 shill::kSecurityProperty, base::StringValue("TestSecurity"), | 455 shill::kSecurityProperty, base::StringValue("TestSecurity"), |
381 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 456 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
382 message_loop_.RunUntilIdle(); | 457 message_loop_.RunUntilIdle(); |
383 EXPECT_EQ(3u, test_observer_->default_network_change_count()); | 458 EXPECT_EQ(1u, test_observer_->default_network_change_count()); |
384 | 459 |
385 // No default network updates for signal strength changes. | 460 // No default network updates for signal strength changes. |
| 461 test_observer_->reset_network_change_count(); |
386 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 462 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
387 dbus::ObjectPath(wifi1), | 463 dbus::ObjectPath(wifi1), |
388 shill::kSignalStrengthProperty, base::FundamentalValue(32), | 464 shill::kSignalStrengthProperty, base::FundamentalValue(32), |
389 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 465 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
390 message_loop_.RunUntilIdle(); | 466 message_loop_.RunUntilIdle(); |
391 EXPECT_EQ(3u, test_observer_->default_network_change_count()); | 467 EXPECT_EQ(0u, test_observer_->default_network_change_count()); |
392 } | 468 } |
393 | 469 |
394 TEST_F(NetworkStateHandlerTest, RequestUpdate) { | 470 TEST_F(NetworkStateHandlerTest, RequestUpdate) { |
395 // Request an update for kShillManagerClientStubDefaultWireless. | 471 // Request an update for kShillManagerClientStubDefaultWireless. |
396 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 472 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
397 kShillManagerClientStubDefaultWireless)); | 473 kShillManagerClientStubDefaultWireless)); |
398 network_state_handler_->RequestUpdateForNetwork( | 474 network_state_handler_->RequestUpdateForNetwork( |
399 kShillManagerClientStubDefaultWireless); | 475 kShillManagerClientStubDefaultWireless); |
400 message_loop_.RunUntilIdle(); | 476 message_loop_.RunUntilIdle(); |
401 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 477 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
402 kShillManagerClientStubDefaultWireless)); | 478 kShillManagerClientStubDefaultWireless)); |
403 | 479 |
404 // Request an update for all networks. | 480 // Request an update for all networks. |
405 network_state_handler_->RequestUpdateForAllNetworks(); | 481 network_state_handler_->RequestUpdateForAllNetworks(); |
406 message_loop_.RunUntilIdle(); | 482 message_loop_.RunUntilIdle(); |
407 // kShillManagerClientStubDefaultWireless should now have 3 updates | 483 // kShillManagerClientStubDefaultWireless should now have 3 updates |
408 EXPECT_EQ(3, test_observer_->PropertyUpdatesForService( | 484 EXPECT_EQ(3, test_observer_->PropertyUpdatesForService( |
409 kShillManagerClientStubDefaultWireless)); | 485 kShillManagerClientStubDefaultWireless)); |
410 // Other networks should have 2 updates (inital + request). | 486 // Other networks should have 2 updates (inital + request). |
411 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 487 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
412 kShillManagerClientStubDefaultService)); | 488 kShillManagerClientStubDefaultService)); |
413 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 489 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
414 kShillManagerClientStubWireless2)); | 490 kShillManagerClientStubWireless2)); |
415 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( | 491 EXPECT_EQ(2, test_observer_->PropertyUpdatesForService( |
416 kShillManagerClientStubCellular)); | 492 kShillManagerClientStubCellular)); |
417 } | 493 } |
418 | 494 |
419 } // namespace chromeos | 495 } // namespace chromeos |
OLD | NEW |