Index: chromeos/network/network_state_handler_unittest.cc |
diff --git a/chromeos/network/network_state_handler_unittest.cc b/chromeos/network/network_state_handler_unittest.cc |
index 448bf4c98c8e3fffe059ec9c921b6e71450e75c8..20522eb2b9bea3c908ed264343e4f4e349b56dab 100644 |
--- a/chromeos/network/network_state_handler_unittest.cc |
+++ b/chromeos/network/network_state_handler_unittest.cc |
@@ -29,64 +29,78 @@ void ErrorCallbackFunction(const std::string& error_name, |
} |
using chromeos::NetworkState; |
+using chromeos::NetworkStateHandler; |
class TestObserver : public chromeos::NetworkStateHandlerObserver { |
public: |
- TestObserver() |
- : manager_changed_count_(0), |
+ explicit TestObserver(NetworkStateHandler* handler) |
+ : handler_(handler), |
+ manager_changed_count_(0), |
network_count_(0) { |
} |
virtual ~TestObserver() { |
} |
- virtual void NetworkManagerChanged() { |
+ virtual void NetworkManagerChanged() OVERRIDE { |
++manager_changed_count_; |
} |
virtual void NetworkListChanged( |
- const chromeos::NetworkStateHandler::NetworkStateList& networks) { |
+ const NetworkStateHandler::NetworkStateList& networks) OVERRIDE { |
network_count_ = networks.size(); |
+ if (network_count_ == 0) { |
+ default_network_ = ""; |
+ default_network_connection_state_ = ""; |
+ } |
} |
- virtual void ActiveNetworkChanged(const NetworkState* network) { |
- active_network_ = network ? network->path() : ""; |
- active_network_state_ = network ? network->state() : ""; |
+ virtual void DefaultNetworkChanged(const NetworkState* network) OVERRIDE { |
+ default_network_ = network ? network->path() : ""; |
+ default_network_connection_state_ = |
+ network ? network->connection_state() : ""; |
} |
- virtual void ActiveNetworkStateChanged(const NetworkState* network) { |
- active_network_state_ = network ? network->state() : ""; |
+ virtual void NetworkConnectionStateChanged( |
+ const NetworkState* network) OVERRIDE { |
+ network_connection_state_[network->path()] = network->connection_state(); |
+ connection_state_changes_[network->path()]++; |
} |
- virtual void NetworkServiceChanged(const NetworkState* network) { |
+ virtual void NetworkPropertiesUpdated(const NetworkState* network) OVERRIDE { |
DCHECK(network); |
- std::map<std::string, int>::iterator iter = |
- property_changes_.find(network->path()); |
- if (iter == property_changes_.end()) |
- property_changes_[network->path()] = 1; |
- else |
- iter->second++; |
+ property_updates_[network->path()]++; |
} |
size_t manager_changed_count() { return manager_changed_count_; } |
size_t network_count() { return network_count_; } |
- std::string active_network() { return active_network_; } |
- std::string active_network_state() { return active_network_state_; } |
- |
- int PropertyChangesForService(const std::string& service_path) { |
- std::map<std::string, int>::iterator iter = |
- property_changes_.find(service_path); |
- if (iter == property_changes_.end()) |
- return 0; |
- return iter->second; |
+ std::string default_network() { return default_network_; } |
+ std::string default_network_connection_state() { |
+ return default_network_connection_state_; |
+ } |
+ |
+ int PropertyUpdatesForService(const std::string& service_path) { |
+ return property_updates_[service_path]; |
+ } |
+ |
+ int ConnectionStateChangesForService(const std::string& service_path) { |
+ return connection_state_changes_[service_path]; |
+ } |
+ |
+ std::string NetworkConnectionStateForService( |
+ const std::string& service_path) { |
+ return network_connection_state_[service_path]; |
} |
private: |
+ NetworkStateHandler* handler_; |
size_t manager_changed_count_; |
size_t network_count_; |
- std::string active_network_; |
- std::string active_network_state_; |
- std::map<std::string, int> property_changes_; |
+ std::string default_network_; |
+ std::string default_network_connection_state_; |
+ std::map<std::string, int> property_updates_; |
+ std::map<std::string, int> connection_state_changes_; |
+ std::map<std::string, std::string> network_connection_state_; |
DISALLOW_COPY_AND_ASSIGN(TestObserver); |
}; |
@@ -112,8 +126,8 @@ class NetworkStateHandlerTest : public testing::Test { |
} |
void SetupNetworkStateHandler() { |
- test_observer_.reset(new TestObserver); |
network_state_handler_.reset(new NetworkStateHandler); |
+ test_observer_.reset(new TestObserver(network_state_handler_.get())); |
network_state_handler_->AddObserver(test_observer_.get()); |
network_state_handler_->InitShillPropertyHandler(); |
} |
@@ -136,19 +150,25 @@ TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) { |
const size_t kNumShillManagerClientStubImplServices = 4; |
EXPECT_EQ(kNumShillManagerClientStubImplServices, |
test_observer_->network_count()); |
- // Ensure that the first stub network is the active network. |
- const std::string kShillManagerClientStubActiveService = "stub_ethernet"; |
- EXPECT_EQ(kShillManagerClientStubActiveService, |
- test_observer_->active_network()); |
- EXPECT_EQ(kShillManagerClientStubActiveService, |
- network_state_handler_->ActiveNetwork()->path()); |
- EXPECT_EQ(kShillManagerClientStubActiveService, |
+ // Ensure that the first stub network is the default network. |
+ const std::string kShillManagerClientStubDefaultService = "stub_ethernet"; |
+ EXPECT_EQ(kShillManagerClientStubDefaultService, |
+ test_observer_->default_network()); |
+ EXPECT_EQ(kShillManagerClientStubDefaultService, |
+ network_state_handler_->ConnectedNetworkByType( |
+ NetworkStateHandler::kMatchTypeDefault)->path()); |
+ EXPECT_EQ(kShillManagerClientStubDefaultService, |
network_state_handler_->ConnectedNetworkByType( |
flimflam::kTypeEthernet)->path()); |
- EXPECT_EQ(flimflam::kStateOnline, test_observer_->active_network_state()); |
+ const std::string kShillManagerClientStubDefaultWireless = "stub_wifi1"; |
+ EXPECT_EQ(kShillManagerClientStubDefaultWireless, |
+ network_state_handler_->ConnectedNetworkByType( |
+ NetworkStateHandler::kMatchTypeWireless)->path()); |
+ EXPECT_EQ(flimflam::kStateOnline, |
+ test_observer_->default_network_connection_state()); |
} |
-TEST_F(NetworkStateHandlerTest, NetworkStateHandlerTechnologyChanged) { |
+TEST_F(NetworkStateHandlerTest, TechnologyChanged) { |
// This relies on the stub dbus implementations for ShillManagerClient, |
SetupNetworkStateHandler(); |
message_loop_.RunUntilIdle(); |
@@ -163,14 +183,14 @@ TEST_F(NetworkStateHandlerTest, NetworkStateHandlerTechnologyChanged) { |
EXPECT_TRUE(network_state_handler_->TechnologyEnabled(flimflam::kTypeWimax)); |
} |
-TEST_F(NetworkStateHandlerTest, NetworkStateHandlerServicePropertyChanged) { |
+TEST_F(NetworkStateHandlerTest, ServicePropertyChanged) { |
// This relies on the stub dbus implementations for ShillManagerClient, |
SetupNetworkStateHandler(); |
message_loop_.RunUntilIdle(); |
// Set a service property. |
const std::string eth0 = "stub_ethernet"; |
EXPECT_EQ("", network_state_handler_->GetNetworkState(eth0)->security()); |
- EXPECT_EQ(1, test_observer_->PropertyChangesForService(eth0)); |
+ EXPECT_EQ(1, test_observer_->PropertyUpdatesForService(eth0)); |
base::StringValue security_value("TestSecurity"); |
DBusThreadManager::Get()->GetShillServiceClient()->SetProperty( |
dbus::ObjectPath(eth0), |
@@ -179,36 +199,56 @@ TEST_F(NetworkStateHandlerTest, NetworkStateHandlerServicePropertyChanged) { |
message_loop_.RunUntilIdle(); |
EXPECT_EQ("TestSecurity", |
network_state_handler_->GetNetworkState(eth0)->security()); |
- EXPECT_EQ(2, test_observer_->PropertyChangesForService(eth0)); |
+ EXPECT_EQ(2, test_observer_->PropertyUpdatesForService(eth0)); |
+} |
+ |
+TEST_F(NetworkStateHandlerTest, NetworkConnectionStateChanged) { |
+ // This relies on the stub dbus implementations for ShillManagerClient, |
+ SetupNetworkStateHandler(); |
+ message_loop_.RunUntilIdle(); |
+ // Change a network state. |
+ ShillServiceClient::TestInterface* service_test = |
+ DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
+ const std::string eth0 = "stub_ethernet"; |
+ base::StringValue connection_state_idle_value(flimflam::kStateIdle); |
+ service_test->SetServiceProperty(eth0, flimflam::kStateProperty, |
+ connection_state_idle_value); |
+ message_loop_.RunUntilIdle(); |
+ EXPECT_EQ(flimflam::kStateIdle, |
+ test_observer_->NetworkConnectionStateForService(eth0)); |
+ EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth0)); |
+ // Confirm that changing the connection state to the same value does *not* |
+ // signal the observer. |
+ service_test->SetServiceProperty(eth0, flimflam::kStateProperty, |
+ connection_state_idle_value); |
+ message_loop_.RunUntilIdle(); |
+ EXPECT_EQ(2, test_observer_->ConnectionStateChangesForService(eth0)); |
} |
-TEST_F(NetworkStateHandlerTest, NetworkStateHandlerActiveServiceChanged) { |
+TEST_F(NetworkStateHandlerTest, DefaultServiceChanged) { |
// This relies on the stub dbus implementations for ShillManagerClient, |
SetupNetworkStateHandler(); |
message_loop_.RunUntilIdle(); |
- // Change the active network by inserting wifi1 at the front of the list. |
ShillManagerClient::TestInterface* manager_test = |
DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface(); |
ASSERT_TRUE(manager_test); |
- const std::string wifi1 = "stub_wifi1"; |
- manager_test->AddServiceAtIndex(wifi1, 0, true); |
- message_loop_.RunUntilIdle(); |
- EXPECT_EQ(wifi1, test_observer_->active_network()); |
- EXPECT_EQ(flimflam::kStateOnline, test_observer_->active_network_state()); |
- |
- // Change the state of wifi1, ensure that triggers the active state changed |
- // observer. |
ShillServiceClient::TestInterface* service_test = |
DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
ASSERT_TRUE(service_test); |
- base::StringValue state_value(flimflam::kStateConfiguration); |
- service_test->SetServiceProperty(wifi1, flimflam::kStateProperty, |
- state_value); |
+ |
+ // Change the default network by inserting wifi1 at the front of the list |
+ // and changing the state of stub_ethernet to Idle. |
+ const std::string wifi1 = "stub_wifi1"; |
+ manager_test->AddServiceAtIndex(wifi1, 0, true); |
+ const std::string eth0 = "stub_ethernet"; |
+ base::StringValue connection_state_idle_value(flimflam::kStateIdle); |
+ service_test->SetServiceProperty(eth0, flimflam::kStateProperty, |
+ connection_state_idle_value); |
message_loop_.RunUntilIdle(); |
- EXPECT_EQ(wifi1, test_observer_->active_network()); |
- EXPECT_EQ(flimflam::kStateConfiguration, |
- test_observer_->active_network_state()); |
+ EXPECT_EQ(wifi1, test_observer_->default_network()); |
+ EXPECT_EQ(flimflam::kStateOnline, |
+ test_observer_->default_network_connection_state()); |
} |
} // namespace chromeos |