| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <string> | 12 #include <string> |
| 13 | 13 |
| 14 #include "base/bind.h" | 14 #include "base/bind.h" |
| 15 #include "base/command_line.h" |
| 15 #include "base/macros.h" | 16 #include "base/macros.h" |
| 16 #include "base/message_loop/message_loop.h" | 17 #include "base/message_loop/message_loop.h" |
| 17 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
| 18 #include "base/values.h" | 19 #include "base/values.h" |
| 20 #include "chromeos/chromeos_switches.h" |
| 19 #include "chromeos/dbus/dbus_thread_manager.h" | 21 #include "chromeos/dbus/dbus_thread_manager.h" |
| 20 #include "chromeos/dbus/shill_device_client.h" | 22 #include "chromeos/dbus/shill_device_client.h" |
| 21 #include "chromeos/dbus/shill_ipconfig_client.h" | 23 #include "chromeos/dbus/shill_ipconfig_client.h" |
| 22 #include "chromeos/dbus/shill_manager_client.h" | 24 #include "chromeos/dbus/shill_manager_client.h" |
| 23 #include "chromeos/dbus/shill_profile_client.h" | 25 #include "chromeos/dbus/shill_profile_client.h" |
| 24 #include "chromeos/dbus/shill_service_client.h" | 26 #include "chromeos/dbus/shill_service_client.h" |
| 25 #include "chromeos/network/device_state.h" | 27 #include "chromeos/network/device_state.h" |
| 26 #include "chromeos/network/network_state.h" | 28 #include "chromeos/network/network_state.h" |
| 27 #include "chromeos/network/network_state_handler.h" | 29 #include "chromeos/network/network_state_handler.h" |
| 28 #include "chromeos/network/network_state_handler_observer.h" | 30 #include "chromeos/network/network_state_handler_observer.h" |
| 29 #include "dbus/object_path.h" | 31 #include "dbus/object_path.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| 31 #include "third_party/cros_system_api/dbus/service_constants.h" | 33 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 32 | 34 |
| 33 namespace { | 35 namespace { |
| 34 | 36 |
| 35 void ErrorCallbackFunction(const std::string& error_name, | 37 void ErrorCallbackFunction(const std::string& error_name, |
| 36 const std::string& error_message) { | 38 const std::string& error_message) { |
| 37 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; | 39 LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message; |
| 38 } | 40 } |
| 39 | 41 |
| 40 const char kShillManagerClientStubWifiDevice[] = "/device/stub_wifi_device1"; | 42 const char kShillManagerClientStubWifiDevice[] = "/device/stub_wifi_device1"; |
| 41 const char kShillManagerClientStubCellularDevice[] = | 43 const char kShillManagerClientStubCellularDevice[] = |
| 42 "/device/stub_cellular_device1"; | 44 "/device/stub_cellular_device1"; |
| 43 const char kShillManagerClientStubDefaultService[] = "/service/eth1"; | 45 const char kShillManagerClientStubDefaultService[] = "/service/eth1"; |
| 44 const char kShillManagerClientStubDefaultWifi[] = "/service/wifi1"; | 46 const char kShillManagerClientStubDefaultWifi[] = "/service/wifi1"; |
| 45 const char kShillManagerClientStubWifi2[] = "/service/wifi2"; | 47 const char kShillManagerClientStubWifi2[] = "/service/wifi2"; |
| 46 const char kShillManagerClientStubCellular[] = "/service/cellular1"; | 48 const char kShillManagerClientStubCellular[] = "/service/cellular1"; |
| 47 | 49 |
| 48 const char kTetherName[] = "Device"; | 50 const char kTetherGuid1[] = "tether1"; |
| 51 const char kTetherGuid2[] = "tether2"; |
| 52 const char kTetherName1[] = "Device1"; |
| 53 const char kTetherName2[] = "Device2"; |
| 49 | 54 |
| 50 using chromeos::DeviceState; | 55 using chromeos::DeviceState; |
| 51 using chromeos::NetworkState; | 56 using chromeos::NetworkState; |
| 52 using chromeos::NetworkStateHandler; | 57 using chromeos::NetworkStateHandler; |
| 53 | 58 |
| 54 class TestObserver : public chromeos::NetworkStateHandlerObserver { | 59 class TestObserver : public chromeos::NetworkStateHandlerObserver { |
| 55 public: | 60 public: |
| 56 explicit TestObserver(NetworkStateHandler* handler) | 61 explicit TestObserver(NetworkStateHandler* handler) |
| 57 : handler_(handler), | 62 : handler_(handler), |
| 58 device_list_changed_count_(0), | 63 device_list_changed_count_(0), |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 EXPECT_EQ(kNumShillManagerClientStubImplServices, networks.size()); | 369 EXPECT_EQ(kNumShillManagerClientStubImplServices, networks.size()); |
| 365 // Get configured (profile) networks. | 370 // Get configured (profile) networks. |
| 366 network_state_handler_->GetNetworkListByType(NetworkTypePattern::Default(), | 371 network_state_handler_->GetNetworkListByType(NetworkTypePattern::Default(), |
| 367 true /* configured_only */, | 372 true /* configured_only */, |
| 368 false /* visible_only */, | 373 false /* visible_only */, |
| 369 0 /* no limit */, | 374 0 /* no limit */, |
| 370 &networks); | 375 &networks); |
| 371 EXPECT_EQ(1u, networks.size()); | 376 EXPECT_EQ(1u, networks.size()); |
| 372 } | 377 } |
| 373 | 378 |
| 379 TEST_F(NetworkStateHandlerTest, GetTetherNetworkList) { |
| 380 NetworkStateHandler::NetworkStateList tether_networks; |
| 381 |
| 382 network_state_handler_->GetTetherNetworkList(0 /* no limit */, |
| 383 &tether_networks); |
| 384 EXPECT_EQ(0u, tether_networks.size()); |
| 385 |
| 386 network_state_handler_->AddTetherNetworkState(kTetherGuid1, kTetherName1); |
| 387 |
| 388 network_state_handler_->GetTetherNetworkList(0 /* no limit */, |
| 389 &tether_networks); |
| 390 EXPECT_EQ(1u, tether_networks.size()); |
| 391 |
| 392 network_state_handler_->AddTetherNetworkState(kTetherGuid2, kTetherName2); |
| 393 |
| 394 network_state_handler_->GetTetherNetworkList(0 /* no limit */, |
| 395 &tether_networks); |
| 396 EXPECT_EQ(2u, tether_networks.size()); |
| 397 |
| 398 network_state_handler_->GetTetherNetworkList(1 /* no limit */, |
| 399 &tether_networks); |
| 400 EXPECT_EQ(1u, tether_networks.size()); |
| 401 } |
| 402 |
| 374 TEST_F(NetworkStateHandlerTest, NetworkListChanged) { | 403 TEST_F(NetworkStateHandlerTest, NetworkListChanged) { |
| 375 size_t stub_network_count = test_observer_->network_count(); | 404 size_t stub_network_count = test_observer_->network_count(); |
| 376 // Set up two additional visible networks. | 405 // Set up two additional visible networks. |
| 377 const std::string wifi3 = "/service/wifi3"; | 406 const std::string wifi3 = "/service/wifi3"; |
| 378 const std::string wifi4 = "/service/wifi4"; | 407 const std::string wifi4 = "/service/wifi4"; |
| 379 service_test_->SetServiceProperties( | 408 service_test_->SetServiceProperties( |
| 380 wifi3, "wifi3_guid", "wifi3", | 409 wifi3, "wifi3_guid", "wifi3", |
| 381 shill::kTypeWifi, shill::kStateIdle, true /* visible */); | 410 shill::kTypeWifi, shill::kStateIdle, true /* visible */); |
| 382 service_test_->SetServiceProperties( | 411 service_test_->SetServiceProperties( |
| 383 wifi4, "wifi4_guid", "wifi4", | 412 wifi4, "wifi4_guid", "wifi4", |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 NetworkStateHandler::TECHNOLOGY_ENABLED, | 519 NetworkStateHandler::TECHNOLOGY_ENABLED, |
| 491 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 520 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 492 | 521 |
| 493 manager_test_->RemoveTechnology(shill::kTypeWimax); | 522 manager_test_->RemoveTechnology(shill::kTypeWimax); |
| 494 base::RunLoop().RunUntilIdle(); | 523 base::RunLoop().RunUntilIdle(); |
| 495 EXPECT_EQ( | 524 EXPECT_EQ( |
| 496 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, | 525 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, |
| 497 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); | 526 network_state_handler_->GetTechnologyState(NetworkTypePattern::Wimax())); |
| 498 } | 527 } |
| 499 | 528 |
| 529 TEST_F(NetworkStateHandlerTest, TetherTechnologyState) { |
| 530 EXPECT_EQ( |
| 531 NetworkStateHandler::TECHNOLOGY_UNAVAILABLE, |
| 532 network_state_handler_->GetTechnologyState(NetworkTypePattern::Tether())); |
| 533 |
| 534 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 535 chromeos::switches::kEnableTether); |
| 536 |
| 537 EXPECT_EQ( |
| 538 NetworkStateHandler::TECHNOLOGY_ENABLED, |
| 539 network_state_handler_->GetTechnologyState(NetworkTypePattern::Tether())); |
| 540 } |
| 541 |
| 500 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { | 542 TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { |
| 501 // Set a service property. | 543 // Set a service property. |
| 502 const std::string eth1 = kShillManagerClientStubDefaultService; | 544 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 503 const NetworkState* ethernet = network_state_handler_->GetNetworkState(eth1); | 545 const NetworkState* ethernet = network_state_handler_->GetNetworkState(eth1); |
| 504 ASSERT_TRUE(ethernet); | 546 ASSERT_TRUE(ethernet); |
| 505 EXPECT_EQ("", ethernet->security_class()); | 547 EXPECT_EQ("", ethernet->security_class()); |
| 506 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService(eth1)); | 548 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService(eth1)); |
| 507 base::StringValue security_class_value("TestSecurityClass"); | 549 base::StringValue security_class_value("TestSecurityClass"); |
| 508 SetServiceProperty(eth1, shill::kSecurityClassProperty, security_class_value); | 550 SetServiceProperty(eth1, shill::kSecurityClassProperty, security_class_value); |
| 509 base::RunLoop().RunUntilIdle(); | 551 base::RunLoop().RunUntilIdle(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 540 | 582 |
| 541 // Remove the service, verify that there is no longer a NetworkState for it. | 583 // Remove the service, verify that there is no longer a NetworkState for it. |
| 542 service_test_->RemoveService(wifi_path); | 584 service_test_->RemoveService(wifi_path); |
| 543 UpdateManagerProperties(); | 585 UpdateManagerProperties(); |
| 544 EXPECT_FALSE(network_state_handler_->GetNetworkState(wifi_path)); | 586 EXPECT_FALSE(network_state_handler_->GetNetworkState(wifi_path)); |
| 545 } | 587 } |
| 546 | 588 |
| 547 TEST_F(NetworkStateHandlerTest, TetherNetworkState) { | 589 TEST_F(NetworkStateHandlerTest, TetherNetworkState) { |
| 548 EXPECT_EQ(0u, test_observer_->network_list_changed_count()); | 590 EXPECT_EQ(0u, test_observer_->network_list_changed_count()); |
| 549 | 591 |
| 550 const std::string& guid = | 592 network_state_handler_->AddTetherNetworkState(kTetherGuid1, kTetherName1); |
| 551 network_state_handler_->CreateTetherNetworkState(kTetherName); | |
| 552 | 593 |
| 553 EXPECT_EQ(1u, test_observer_->network_list_changed_count()); | 594 EXPECT_EQ(1u, test_observer_->network_list_changed_count()); |
| 554 | 595 |
| 555 const NetworkState* tether_network = | 596 const NetworkState* tether_network = |
| 556 network_state_handler_->GetNetworkStateFromGuid(guid); | 597 network_state_handler_->GetNetworkStateFromGuid(kTetherGuid1); |
| 557 ASSERT_TRUE(tether_network); | 598 ASSERT_TRUE(tether_network); |
| 558 EXPECT_EQ(kTetherName, tether_network->name()); | 599 EXPECT_EQ(kTetherName1, tether_network->name()); |
| 559 | 600 |
| 560 network_state_handler_->RemoveTetherNetworkState(guid); | 601 network_state_handler_->RemoveTetherNetworkState(kTetherGuid1); |
| 561 | 602 |
| 562 EXPECT_EQ(2u, test_observer_->network_list_changed_count()); | 603 EXPECT_EQ(2u, test_observer_->network_list_changed_count()); |
| 563 | 604 |
| 564 ASSERT_FALSE(network_state_handler_->GetNetworkStateFromGuid(guid)); | 605 ASSERT_FALSE(network_state_handler_->GetNetworkStateFromGuid(kTetherGuid1)); |
| 565 } | 606 } |
| 566 | 607 |
| 567 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { | 608 TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { |
| 568 const std::string eth1 = kShillManagerClientStubDefaultService; | 609 const std::string eth1 = kShillManagerClientStubDefaultService; |
| 569 EXPECT_EQ(0, test_observer_->ConnectionStateChangesForService(eth1)); | 610 EXPECT_EQ(0, test_observer_->ConnectionStateChangesForService(eth1)); |
| 570 | 611 |
| 571 // Change a network state. | 612 // Change a network state. |
| 572 base::StringValue connection_state_idle_value(shill::kStateIdle); | 613 base::StringValue connection_state_idle_value(shill::kStateIdle); |
| 573 service_test_->SetServiceProperty(eth1, shill::kStateProperty, | 614 service_test_->SetServiceProperty(eth1, shill::kStateProperty, |
| 574 connection_state_idle_value); | 615 connection_state_idle_value); |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 kShillManagerClientStubDefaultWifi, shill::kIPConfigProperty, | 859 kShillManagerClientStubDefaultWifi, shill::kIPConfigProperty, |
| 819 base::StringValue(kIPConfigPath)); | 860 base::StringValue(kIPConfigPath)); |
| 820 UpdateManagerProperties(); | 861 UpdateManagerProperties(); |
| 821 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice( | 862 EXPECT_EQ(1, test_observer_->PropertyUpdatesForDevice( |
| 822 kShillManagerClientStubWifiDevice)); | 863 kShillManagerClientStubWifiDevice)); |
| 823 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( | 864 EXPECT_EQ(1, test_observer_->PropertyUpdatesForService( |
| 824 kShillManagerClientStubDefaultWifi)); | 865 kShillManagerClientStubDefaultWifi)); |
| 825 } | 866 } |
| 826 | 867 |
| 827 } // namespace chromeos | 868 } // namespace chromeos |
| OLD | NEW |