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 |