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/shill_property_handler.h" | 5 #include "chromeos/network/shill_property_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 | 75 |
76 virtual void CheckPortalListChanged( | 76 virtual void CheckPortalListChanged( |
77 const std::string& check_portal_list) OVERRIDE { | 77 const std::string& check_portal_list) OVERRIDE { |
78 } | 78 } |
79 | 79 |
80 virtual void ManagedStateListChanged( | 80 virtual void ManagedStateListChanged( |
81 ManagedState::ManagedType type) OVERRIDE { | 81 ManagedState::ManagedType type) OVERRIDE { |
82 AddStateListUpdate(GetTypeString(type)); | 82 AddStateListUpdate(GetTypeString(type)); |
83 } | 83 } |
84 | 84 |
| 85 virtual void DefaultNetworkServiceChanged( |
| 86 const std::string& service_path) OVERRIDE { |
| 87 } |
| 88 |
85 std::vector<std::string>& entries(const std::string& type) { | 89 std::vector<std::string>& entries(const std::string& type) { |
86 return entries_[type]; | 90 return entries_[type]; |
87 } | 91 } |
88 std::map<std::string, int>& property_updates(const std::string& type) { | 92 std::map<std::string, int>& property_updates(const std::string& type) { |
89 return property_updates_[type]; | 93 return property_updates_[type]; |
90 } | 94 } |
91 std::map<std::string, int>& initial_property_updates( | 95 std::map<std::string, int>& initial_property_updates( |
92 const std::string& type) { | 96 const std::string& type) { |
93 return initial_property_updates_[type]; | 97 return initial_property_updates_[type]; |
94 } | 98 } |
95 int list_updates(const std::string& type) { return list_updates_[type]; } | 99 int list_updates(const std::string& type) { return list_updates_[type]; } |
| 100 void reset_list_updates() { list_updates_.clear(); } |
96 int technology_list_updates() { return technology_list_updates_; } | 101 int technology_list_updates() { return technology_list_updates_; } |
97 int errors() { return errors_; } | 102 int errors() { return errors_; } |
98 | 103 |
99 private: | 104 private: |
100 std::string GetTypeString(ManagedState::ManagedType type) { | 105 std::string GetTypeString(ManagedState::ManagedType type) { |
101 if (type == ManagedState::MANAGED_TYPE_NETWORK) { | 106 if (type == ManagedState::MANAGED_TYPE_NETWORK) { |
102 return shill::kServicesProperty; | 107 return shill::kServicesProperty; |
103 } else if (type == ManagedState::MANAGED_TYPE_FAVORITE) { | 108 } else if (type == ManagedState::MANAGED_TYPE_FAVORITE) { |
104 return shill::kServiceCompleteListProperty; | 109 return shill::kServiceCompleteListProperty; |
105 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { | 110 } else if (type == ManagedState::MANAGED_TYPE_DEVICE) { |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 330 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
326 message_loop_.RunUntilIdle(); | 331 message_loop_.RunUntilIdle(); |
327 EXPECT_EQ(initial_technology_updates + 4, | 332 EXPECT_EQ(initial_technology_updates + 4, |
328 listener_->technology_list_updates()); | 333 listener_->technology_list_updates()); |
329 EXPECT_TRUE(shill_property_handler_->IsTechnologyEnabled(shill::kTypeWimax)); | 334 EXPECT_TRUE(shill_property_handler_->IsTechnologyEnabled(shill::kTypeWimax)); |
330 | 335 |
331 EXPECT_EQ(0, listener_->errors()); | 336 EXPECT_EQ(0, listener_->errors()); |
332 } | 337 } |
333 | 338 |
334 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerDevicePropertyChanged) { | 339 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerDevicePropertyChanged) { |
335 EXPECT_EQ(1, listener_->list_updates(shill::kDevicesProperty)); | |
336 const size_t kNumShillManagerClientStubImplDevices = 2; | 340 const size_t kNumShillManagerClientStubImplDevices = 2; |
337 EXPECT_EQ(kNumShillManagerClientStubImplDevices, | 341 EXPECT_EQ(kNumShillManagerClientStubImplDevices, |
338 listener_->entries(shill::kDevicesProperty).size()); | 342 listener_->entries(shill::kDevicesProperty).size()); |
339 // Add a device. | 343 // Add a device. |
| 344 listener_->reset_list_updates(); |
340 const std::string kTestDevicePath("test_wifi_device1"); | 345 const std::string kTestDevicePath("test_wifi_device1"); |
341 AddDevice(shill::kTypeWifi, kTestDevicePath); | 346 AddDevice(shill::kTypeWifi, kTestDevicePath); |
342 message_loop_.RunUntilIdle(); | 347 message_loop_.RunUntilIdle(); |
343 EXPECT_EQ(2, listener_->list_updates(shill::kDevicesProperty)); | 348 EXPECT_EQ(1, listener_->list_updates(shill::kDevicesProperty)); |
344 EXPECT_EQ(kNumShillManagerClientStubImplDevices + 1, | 349 EXPECT_EQ(kNumShillManagerClientStubImplDevices + 1, |
345 listener_->entries(shill::kDevicesProperty).size()); | 350 listener_->entries(shill::kDevicesProperty).size()); |
346 // Device changes are not observed. | 351 // Device changes are not observed. |
347 // Remove a device | 352 // Remove a device |
| 353 listener_->reset_list_updates(); |
348 RemoveDevice(kTestDevicePath); | 354 RemoveDevice(kTestDevicePath); |
349 message_loop_.RunUntilIdle(); | 355 message_loop_.RunUntilIdle(); |
350 EXPECT_EQ(3, listener_->list_updates(shill::kDevicesProperty)); | 356 EXPECT_EQ(1, listener_->list_updates(shill::kDevicesProperty)); |
351 EXPECT_EQ(kNumShillManagerClientStubImplDevices, | 357 EXPECT_EQ(kNumShillManagerClientStubImplDevices, |
352 listener_->entries(shill::kDevicesProperty).size()); | 358 listener_->entries(shill::kDevicesProperty).size()); |
353 | 359 |
354 EXPECT_EQ(0, listener_->errors()); | 360 EXPECT_EQ(0, listener_->errors()); |
355 } | 361 } |
356 | 362 |
357 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerServicePropertyChanged) { | 363 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerServicePropertyChanged) { |
358 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); | |
359 const size_t kNumShillManagerClientStubImplServices = 4; | 364 const size_t kNumShillManagerClientStubImplServices = 4; |
360 EXPECT_EQ(kNumShillManagerClientStubImplServices, | 365 EXPECT_EQ(kNumShillManagerClientStubImplServices, |
361 listener_->entries(shill::kServicesProperty).size()); | 366 listener_->entries(shill::kServicesProperty).size()); |
362 | 367 |
363 // Add an unwatched service. | 368 // Add an unwatched service. |
| 369 listener_->reset_list_updates(); |
364 const std::string kTestServicePath("test_wifi_service1"); | 370 const std::string kTestServicePath("test_wifi_service1"); |
365 AddService(shill::kTypeWifi, kTestServicePath, shill::kStateIdle, false); | 371 AddService(shill::kTypeWifi, kTestServicePath, shill::kStateIdle, false); |
366 message_loop_.RunUntilIdle(); | 372 message_loop_.RunUntilIdle(); |
367 // Watched and unwatched services trigger a service list update. | 373 // Watched and unwatched services trigger a service list update. |
368 EXPECT_EQ(2, listener_->list_updates(shill::kServicesProperty)); | 374 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); |
369 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, | 375 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, |
370 listener_->entries(shill::kServicesProperty).size()); | 376 listener_->entries(shill::kServicesProperty).size()); |
371 // Service receives an initial property update. | 377 // Service receives an initial property update. |
372 EXPECT_EQ(1, listener_->initial_property_updates( | 378 EXPECT_EQ(1, listener_->initial_property_updates( |
373 shill::kServicesProperty)[kTestServicePath]); | 379 shill::kServicesProperty)[kTestServicePath]); |
374 // Change a property. | 380 // Change a property. |
375 base::FundamentalValue scan_interval(3); | 381 base::FundamentalValue scan_interval(3); |
376 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 382 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
377 dbus::ObjectPath(kTestServicePath), | 383 dbus::ObjectPath(kTestServicePath), |
378 shill::kScanIntervalProperty, | 384 shill::kScanIntervalProperty, |
379 scan_interval, | 385 scan_interval, |
380 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 386 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
381 message_loop_.RunUntilIdle(); | 387 message_loop_.RunUntilIdle(); |
382 // Property change triggers an update. | 388 // Property change triggers an update. |
383 EXPECT_EQ(1, listener_->property_updates( | 389 EXPECT_EQ(1, listener_->property_updates( |
384 shill::kServicesProperty)[kTestServicePath]); | 390 shill::kServicesProperty)[kTestServicePath]); |
385 | 391 |
386 // Add the existing service to the watch list. | 392 // Add the existing service to the watch list. |
| 393 listener_->reset_list_updates(); |
387 AddService(shill::kTypeWifi, kTestServicePath, shill::kStateIdle, true); | 394 AddService(shill::kTypeWifi, kTestServicePath, shill::kStateIdle, true); |
388 message_loop_.RunUntilIdle(); | 395 message_loop_.RunUntilIdle(); |
389 // Service list update should be received when watch list changes. | 396 // Service list update should be received when watch list changes. |
390 EXPECT_EQ(2, listener_->list_updates(shill::kServicesProperty)); | 397 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); |
391 // Number of services shouldn't change. | 398 // Number of services shouldn't change. |
392 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, | 399 EXPECT_EQ(kNumShillManagerClientStubImplServices + 1, |
393 listener_->entries(shill::kServicesProperty).size()); | 400 listener_->entries(shill::kServicesProperty).size()); |
394 | 401 |
395 // Change a property. | 402 // Change a property. |
396 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 403 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
397 dbus::ObjectPath(kTestServicePath), | 404 dbus::ObjectPath(kTestServicePath), |
398 shill::kScanIntervalProperty, | 405 shill::kScanIntervalProperty, |
399 scan_interval, | 406 scan_interval, |
400 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 407 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
401 message_loop_.RunUntilIdle(); | 408 message_loop_.RunUntilIdle(); |
402 // Property change should trigger another update. | 409 // Property change should trigger another update. |
403 EXPECT_EQ(2, listener_->property_updates( | 410 EXPECT_EQ(2, listener_->property_updates( |
404 shill::kServicesProperty)[kTestServicePath]); | 411 shill::kServicesProperty)[kTestServicePath]); |
405 | 412 |
406 // Remove a service | 413 // Remove a service |
| 414 listener_->reset_list_updates(); |
407 RemoveService(kTestServicePath); | 415 RemoveService(kTestServicePath); |
408 message_loop_.RunUntilIdle(); | 416 message_loop_.RunUntilIdle(); |
409 EXPECT_EQ(3, listener_->list_updates(shill::kServicesProperty)); | 417 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); |
410 EXPECT_EQ(kNumShillManagerClientStubImplServices, | 418 EXPECT_EQ(kNumShillManagerClientStubImplServices, |
411 listener_->entries(shill::kServicesProperty).size()); | 419 listener_->entries(shill::kServicesProperty).size()); |
412 | 420 |
413 EXPECT_EQ(0, listener_->errors()); | 421 EXPECT_EQ(0, listener_->errors()); |
414 } | 422 } |
415 | 423 |
416 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerIPConfigPropertyChanged) { | 424 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerIPConfigPropertyChanged) { |
417 // Set the properties for an IP Config object. | 425 // Set the properties for an IP Config object. |
418 const std::string kTestIPConfigPath("test_ip_config_path"); | 426 const std::string kTestIPConfigPath("test_ip_config_path"); |
419 | 427 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 AddServiceWithIPConfig(shill::kTypeWifi, kTestServicePath2, | 473 AddServiceWithIPConfig(shill::kTypeWifi, kTestServicePath2, |
466 shill::kStateIdle, kTestIPConfigPath, true); | 474 shill::kStateIdle, kTestIPConfigPath, true); |
467 message_loop_.RunUntilIdle(); | 475 message_loop_.RunUntilIdle(); |
468 // A watched service with the IPConfig property already set must trigger | 476 // A watched service with the IPConfig property already set must trigger |
469 // property updates for IP Address, DNS, prefixlen, and gateway when added. | 477 // property updates for IP Address, DNS, prefixlen, and gateway when added. |
470 EXPECT_EQ(4, listener_->property_updates( | 478 EXPECT_EQ(4, listener_->property_updates( |
471 shill::kServicesProperty)[kTestServicePath2]); | 479 shill::kServicesProperty)[kTestServicePath2]); |
472 } | 480 } |
473 | 481 |
474 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerServiceCompleteList) { | 482 TEST_F(ShillPropertyHandlerTest, ShillPropertyHandlerServiceCompleteList) { |
475 // Initial list updates. | 483 // Add a new entry to the profile only (triggers a Services update). |
| 484 const std::string kTestServicePath1("stub_wifi_profile_only1"); |
| 485 AddServiceToProfile(shill::kTypeWifi, kTestServicePath1, false); |
| 486 message_loop_.RunUntilIdle(); |
| 487 |
| 488 // Update the Manager properties. This should trigger a single list update |
| 489 // for both Services and ServiceCompleteList, and a single property update |
| 490 // for ServiceCompleteList. |
| 491 listener_->reset_list_updates(); |
| 492 shill_property_handler_->UpdateManagerProperties(); |
| 493 message_loop_.RunUntilIdle(); |
476 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); | 494 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); |
477 EXPECT_EQ(1, listener_->list_updates(shill::kServiceCompleteListProperty)); | 495 EXPECT_EQ(1, listener_->list_updates(shill::kServiceCompleteListProperty)); |
478 | |
479 // Add a new entry to the profile only; should trigger a single list update | |
480 // for both Services and ServiceCompleteList, and a single property update | |
481 // for ServiceCompleteList. | |
482 const std::string kTestServicePath1("stub_wifi_profile_only1"); | |
483 AddServiceToProfile(shill::kTypeWifi, kTestServicePath1, false); | |
484 shill_property_handler_->UpdateManagerProperties(); | |
485 message_loop_.RunUntilIdle(); | |
486 EXPECT_EQ(2, listener_->list_updates(shill::kServicesProperty)); | |
487 EXPECT_EQ(2, listener_->list_updates(shill::kServiceCompleteListProperty)); | |
488 EXPECT_EQ(0, listener_->initial_property_updates( | 496 EXPECT_EQ(0, listener_->initial_property_updates( |
489 shill::kServicesProperty)[kTestServicePath1]); | 497 shill::kServicesProperty)[kTestServicePath1]); |
490 EXPECT_EQ(1, listener_->initial_property_updates( | 498 EXPECT_EQ(1, listener_->initial_property_updates( |
491 shill::kServiceCompleteListProperty)[kTestServicePath1]); | 499 shill::kServiceCompleteListProperty)[kTestServicePath1]); |
492 EXPECT_EQ(0, listener_->property_updates( | 500 EXPECT_EQ(0, listener_->property_updates( |
493 shill::kServicesProperty)[kTestServicePath1]); | 501 shill::kServicesProperty)[kTestServicePath1]); |
494 EXPECT_EQ(0, listener_->property_updates( | 502 EXPECT_EQ(0, listener_->property_updates( |
495 shill::kServiceCompleteListProperty)[kTestServicePath1]); | 503 shill::kServiceCompleteListProperty)[kTestServicePath1]); |
496 | 504 |
497 // Add a new entry to the services and the profile; should also trigger a | 505 // Add a new entry to the services and the profile; should also trigger a |
498 // single list update for both Services and ServiceCompleteList, and should | 506 // single list update for both Services and ServiceCompleteList, and should |
499 // trigger tow property updates for Services (one when the Profile propety | 507 // trigger tow property updates for Services (one when the Profile propety |
500 // changes, and one for the Request) and one ServiceCompleteList change for | 508 // changes, and one for the Request) and one ServiceCompleteList change for |
501 // the Request. | 509 // the Request. |
| 510 listener_->reset_list_updates(); |
502 const std::string kTestServicePath2("stub_wifi_profile_only2"); | 511 const std::string kTestServicePath2("stub_wifi_profile_only2"); |
503 AddServiceToProfile(shill::kTypeWifi, kTestServicePath2, true); | 512 AddServiceToProfile(shill::kTypeWifi, kTestServicePath2, true); |
504 shill_property_handler_->UpdateManagerProperties(); | 513 shill_property_handler_->UpdateManagerProperties(); |
505 message_loop_.RunUntilIdle(); | 514 message_loop_.RunUntilIdle(); |
506 EXPECT_EQ(3, listener_->list_updates(shill::kServicesProperty)); | 515 EXPECT_EQ(1, listener_->list_updates(shill::kServicesProperty)); |
507 EXPECT_EQ(3, listener_->list_updates(shill::kServiceCompleteListProperty)); | 516 EXPECT_EQ(1, listener_->list_updates(shill::kServiceCompleteListProperty)); |
508 EXPECT_EQ(1, listener_->initial_property_updates( | 517 EXPECT_EQ(1, listener_->initial_property_updates( |
509 shill::kServicesProperty)[kTestServicePath2]); | 518 shill::kServicesProperty)[kTestServicePath2]); |
510 EXPECT_EQ(1, listener_->initial_property_updates( | 519 EXPECT_EQ(1, listener_->initial_property_updates( |
511 shill::kServiceCompleteListProperty)[kTestServicePath2]); | 520 shill::kServiceCompleteListProperty)[kTestServicePath2]); |
512 // Expect one property update for the Profile property of the Network. | 521 // Expect one property update for the Profile property of the Network. |
513 EXPECT_EQ(1, listener_->property_updates( | 522 EXPECT_EQ(1, listener_->property_updates( |
514 shill::kServicesProperty)[kTestServicePath2]); | 523 shill::kServicesProperty)[kTestServicePath2]); |
515 EXPECT_EQ(0, listener_->property_updates( | 524 EXPECT_EQ(0, listener_->property_updates( |
516 shill::kServiceCompleteListProperty)[kTestServicePath2]); | 525 shill::kServiceCompleteListProperty)[kTestServicePath2]); |
517 | 526 |
518 // Change a property of a Network in a Profile. | 527 // Change a property of a Network in a Profile. |
519 base::FundamentalValue scan_interval(3); | 528 base::FundamentalValue scan_interval(3); |
520 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( | 529 DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
521 dbus::ObjectPath(kTestServicePath2), | 530 dbus::ObjectPath(kTestServicePath2), |
522 shill::kScanIntervalProperty, | 531 shill::kScanIntervalProperty, |
523 scan_interval, | 532 scan_interval, |
524 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); | 533 base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction)); |
525 message_loop_.RunUntilIdle(); | 534 message_loop_.RunUntilIdle(); |
526 // Property change should trigger an update for the Network only; no | 535 // Property change should trigger an update for the Network only; no |
527 // property updates pushed by Shill affect Favorites. | 536 // property updates pushed by Shill affect Favorites. |
528 EXPECT_EQ(2, listener_->property_updates( | 537 EXPECT_EQ(2, listener_->property_updates( |
529 shill::kServicesProperty)[kTestServicePath2]); | 538 shill::kServicesProperty)[kTestServicePath2]); |
530 EXPECT_EQ(0, listener_->property_updates( | 539 EXPECT_EQ(0, listener_->property_updates( |
531 shill::kServiceCompleteListProperty)[kTestServicePath2]); | 540 shill::kServiceCompleteListProperty)[kTestServicePath2]); |
532 } | 541 } |
533 | 542 |
534 } // namespace chromeos | 543 } // namespace chromeos |
OLD | NEW |