| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..567f51d65efa0da4c5ba497151101906d650eb1e
|
| --- /dev/null
|
| +++ b/chromeos/network/network_state_handler_unittest.cc
|
| @@ -0,0 +1,182 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chromeos/network/network_state_handler.h"
|
| +
|
| +#include <map>
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/values.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chromeos/dbus/shill_service_client.h"
|
| +#include "chromeos/network/network_state.h"
|
| +#include "chromeos/network/network_state_handler_observer.h"
|
| +#include "dbus/object_path.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/cros_system_api/dbus/service_constants.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +namespace {
|
| +
|
| +void ErrorCallbackFunction(const std::string& error_name,
|
| + const std::string& error_message) {
|
| + LOG(ERROR) << "Shill Error: " << error_name << " : " << error_message;
|
| +}
|
| +
|
| +class TestObserver : public NetworkStateHandlerObserver {
|
| + public:
|
| + TestObserver()
|
| + : manager_changed_count_(0),
|
| + network_count_(0) {
|
| + }
|
| +
|
| + virtual ~TestObserver() {
|
| + }
|
| +
|
| + virtual void NetworkManagerChanged() {
|
| + ++manager_changed_count_;
|
| + }
|
| +
|
| + virtual void NetworkListChanged(
|
| + const NetworkStateHandler::NetworkStateList& networks) {
|
| + network_count_ = networks.size();
|
| + }
|
| +
|
| + virtual void ActiveNetworkChanged(const NetworkState* network) {
|
| + active_network_ = network ? network->path() : "";
|
| + active_network_state_ = network ? network->state() : "";
|
| + }
|
| +
|
| + virtual void ActiveNetworkStateChanged(const NetworkState* network) {
|
| + active_network_state_ = network ? network->state() : "";
|
| + }
|
| +
|
| + virtual void NetworkServiceChanged(const NetworkState* network) {
|
| + 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++;
|
| + }
|
| +
|
| + 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;
|
| + }
|
| +
|
| + private:
|
| + 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_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestObserver);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class NetworkStateHandlerTest : public testing::Test {
|
| + public:
|
| + NetworkStateHandlerTest() {}
|
| + virtual ~NetworkStateHandlerTest() {}
|
| +
|
| + virtual void SetUp() OVERRIDE {
|
| + // Initialize DBusThreadManager with a stub implementation.
|
| + DBusThreadManager::InitializeWithStub();
|
| + }
|
| +
|
| + virtual void TearDown() OVERRIDE {
|
| + DBusThreadManager::Shutdown();
|
| + }
|
| +
|
| + protected:
|
| + MessageLoopForUI message_loop_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(NetworkStateHandlerTest);
|
| +};
|
| +
|
| +TEST_F(NetworkStateHandlerTest, NetworkStateHandlerStub) {
|
| + // This relies on the stub dbus implementations for ShillManagerClient,
|
| + scoped_ptr<NetworkStateHandler> state_manager(new NetworkStateHandler());
|
| + scoped_ptr<TestObserver> test_observer(new TestObserver());
|
| + state_manager->AddObserver(test_observer.get());
|
| + state_manager->Init();
|
| + message_loop_.RunAllPending();
|
| + EXPECT_EQ(1u, test_observer->manager_changed_count());
|
| + // ShillManagerClient stub entries are in shill_manager_client.cc.
|
| + const size_t kNumShillManagerClientStubImplServices = 4;
|
| + EXPECT_EQ(kNumShillManagerClientStubImplServices,
|
| + test_observer->network_count());
|
| + EXPECT_EQ(kNumShillManagerClientStubImplServices,
|
| + state_manager->NumObservedNetworksForTest());
|
| + const std::string kShillManagerClientStubActiveService = "stub_ethernet";
|
| + EXPECT_EQ(kShillManagerClientStubActiveService,
|
| + test_observer->active_network());
|
| + EXPECT_EQ(kShillManagerClientStubActiveService,
|
| + state_manager->ActiveNetwork()->path());
|
| + EXPECT_EQ(kShillManagerClientStubActiveService,
|
| + state_manager->ConnectedNetworkByType(
|
| + flimflam::kTypeEthernet)->path());
|
| + // ShillServiceClient stub entries are in shill_service_client.cc.
|
| + const std::string kShillManagerClientStubActiveServiceState =
|
| + flimflam::kStateOnline;
|
| + EXPECT_EQ(kShillManagerClientStubActiveServiceState,
|
| + test_observer->active_network_state());
|
| +}
|
| +
|
| +TEST_F(NetworkStateHandlerTest, NetworkStateHandlerTechnologyChanged) {
|
| + // This relies on the stub dbus implementations for ShillManagerClient,
|
| + scoped_ptr<NetworkStateHandler> state_manager(new NetworkStateHandler());
|
| + scoped_ptr<TestObserver> test_observer(new TestObserver());
|
| + state_manager->AddObserver(test_observer.get());
|
| + state_manager->Init();
|
| + message_loop_.RunAllPending();
|
| + EXPECT_EQ(1u, test_observer->manager_changed_count());
|
| + // Enable a technology.
|
| + EXPECT_FALSE(state_manager->TechnologyEnabled(flimflam::kTypeWimax));
|
| + state_manager->SetTechnologyEnabled(flimflam::kTypeWimax, true);
|
| + message_loop_.RunAllPending();
|
| + // Ensure we get a manager changed callback when we change a property.
|
| + EXPECT_EQ(2u, test_observer->manager_changed_count());
|
| + EXPECT_TRUE(state_manager->TechnologyEnabled(flimflam::kTypeWimax));
|
| +}
|
| +
|
| +TEST_F(NetworkStateHandlerTest, NetworkStateHandlerServicePropertyChanged) {
|
| + // This relies on the stub dbus implementations for ShillManagerClient,
|
| + scoped_ptr<NetworkStateHandler> state_manager(new NetworkStateHandler());
|
| + scoped_ptr<TestObserver> test_observer(new TestObserver());
|
| + state_manager->AddObserver(test_observer.get());
|
| + state_manager->Init();
|
| + message_loop_.RunAllPending();
|
| + // Set a service property.
|
| + const std::string eth0 = "stub_ethernet";
|
| + EXPECT_EQ("none", state_manager->GetNetworkState(eth0)->security());
|
| + EXPECT_EQ(0, test_observer->PropertyChangesForService(eth0));
|
| + DBusThreadManager::Get()->GetShillServiceClient()->SetProperty(
|
| + dbus::ObjectPath(eth0),
|
| + flimflam::kSecurityProperty, base::StringValue("TestSecurity"),
|
| + base::Bind(&base::DoNothing), base::Bind(&ErrorCallbackFunction));
|
| + message_loop_.RunAllPending();
|
| + EXPECT_EQ("TestSecurity", state_manager->GetNetworkState(eth0)->security());
|
| + EXPECT_EQ(1, test_observer->PropertyChangesForService(eth0));
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|