Add FlimflamProfileClientTest

BUG=chromium-os:16557
TEST=chromeos_unittests --gtest_filter="FlimflamProfileClientTest.*"

Review URL: https://chromiumcodereview.appspot.com/10038011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@132513 0039d316-1c4b-4281-b951-d872f2087c98
parent 097fef76
...@@ -148,6 +148,7 @@ ...@@ -148,6 +148,7 @@
'dbus/flimflam_client_unittest_base.h', 'dbus/flimflam_client_unittest_base.h',
'dbus/flimflam_manager_client_unittest.cc', 'dbus/flimflam_manager_client_unittest.cc',
'dbus/flimflam_network_client_unittest.cc', 'dbus/flimflam_network_client_unittest.cc',
'dbus/flimflam_profile_client_unittest.cc',
], ],
'include_dirs': [ 'include_dirs': [
'..', '..',
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "chromeos/dbus/flimflam_client_unittest_base.h" #include "chromeos/dbus/flimflam_client_unittest_base.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/json/json_writer.h"
#include "base/values.h" #include "base/values.h"
#include "dbus/message.h" #include "dbus/message.h"
#include "dbus/object_path.h" #include "dbus/object_path.h"
...@@ -20,7 +21,10 @@ using ::testing::Return; ...@@ -20,7 +21,10 @@ using ::testing::Return;
namespace chromeos { namespace chromeos {
FlimflamClientUnittestBase::FlimflamClientUnittestBase( FlimflamClientUnittestBase::FlimflamClientUnittestBase(
const std::string& interface_name) : interface_name_(interface_name) { const std::string& interface_name,
const dbus::ObjectPath& object_path)
: interface_name_(interface_name),
object_path_(object_path) {
} }
FlimflamClientUnittestBase::~FlimflamClientUnittestBase() { FlimflamClientUnittestBase::~FlimflamClientUnittestBase() {
...@@ -36,7 +40,7 @@ void FlimflamClientUnittestBase::SetUp() { ...@@ -36,7 +40,7 @@ void FlimflamClientUnittestBase::SetUp() {
mock_proxy_ = new dbus::MockObjectProxy( mock_proxy_ = new dbus::MockObjectProxy(
mock_bus_.get(), mock_bus_.get(),
flimflam::kFlimflamServiceName, flimflam::kFlimflamServiceName,
dbus::ObjectPath(flimflam::kFlimflamServicePath)); object_path_);
// Set an expectation so mock_proxy's CallMethod() will use OnCallMethod() // Set an expectation so mock_proxy's CallMethod() will use OnCallMethod()
// to return responses. // to return responses.
...@@ -53,9 +57,8 @@ void FlimflamClientUnittestBase::SetUp() { ...@@ -53,9 +57,8 @@ void FlimflamClientUnittestBase::SetUp() {
// Set an expectation so mock_bus's GetObjectProxy() for the given // Set an expectation so mock_bus's GetObjectProxy() for the given
// service name and the object path will return mock_proxy_. // service name and the object path will return mock_proxy_.
EXPECT_CALL(*mock_bus_, GetObjectProxy( EXPECT_CALL(*mock_bus_, GetObjectProxy(flimflam::kFlimflamServiceName,
flimflam::kFlimflamServiceName, object_path_))
dbus::ObjectPath(flimflam::kFlimflamServicePath)))
.WillOnce(Return(mock_proxy_.get())); .WillOnce(Return(mock_proxy_.get()));
// ShutdownAndBlock() will be called in TearDown(). // ShutdownAndBlock() will be called in TearDown().
...@@ -151,7 +154,11 @@ void FlimflamClientUnittestBase::ExpectDictionaryValueResult( ...@@ -151,7 +154,11 @@ void FlimflamClientUnittestBase::ExpectDictionaryValueResult(
DBusMethodCallStatus call_status, DBusMethodCallStatus call_status,
const base::DictionaryValue& result) { const base::DictionaryValue& result) {
EXPECT_EQ(DBUS_METHOD_CALL_SUCCESS, call_status); EXPECT_EQ(DBUS_METHOD_CALL_SUCCESS, call_status);
EXPECT_TRUE(expected_result->Equals(&result)); std::string expected_result_string;
base::JSONWriter::Write(expected_result, &expected_result_string);
std::string result_string;
base::JSONWriter::Write(&result, &result_string);
EXPECT_EQ(expected_result_string, result_string);
} }
void FlimflamClientUnittestBase::OnConnectToSignal( void FlimflamClientUnittestBase::OnConnectToSignal(
......
...@@ -34,7 +34,8 @@ namespace chromeos { ...@@ -34,7 +34,8 @@ namespace chromeos {
// A class to provide functionalities needed for testing Flimflam D-Bus clients. // A class to provide functionalities needed for testing Flimflam D-Bus clients.
class FlimflamClientUnittestBase : public testing::Test { class FlimflamClientUnittestBase : public testing::Test {
public: public:
explicit FlimflamClientUnittestBase(const std::string& interface_name); explicit FlimflamClientUnittestBase(const std::string& interface_name,
const dbus::ObjectPath& object_path);
virtual ~FlimflamClientUnittestBase(); virtual ~FlimflamClientUnittestBase();
virtual void SetUp() OVERRIDE; virtual void SetUp() OVERRIDE;
...@@ -112,6 +113,8 @@ class FlimflamClientUnittestBase : public testing::Test { ...@@ -112,6 +113,8 @@ class FlimflamClientUnittestBase : public testing::Test {
// The interface name. // The interface name.
const std::string interface_name_; const std::string interface_name_;
// The object path.
const dbus::ObjectPath object_path_;
// The mock object proxy. // The mock object proxy.
scoped_refptr<dbus::MockObjectProxy> mock_proxy_; scoped_refptr<dbus::MockObjectProxy> mock_proxy_;
// The PropertyChanged signal handler given by the tested client. // The PropertyChanged signal handler given by the tested client.
......
...@@ -99,7 +99,9 @@ base::DictionaryValue* CreateExampleProperties() { ...@@ -99,7 +99,9 @@ base::DictionaryValue* CreateExampleProperties() {
class FlimflamManagerClientTest : public FlimflamClientUnittestBase { class FlimflamManagerClientTest : public FlimflamClientUnittestBase {
public: public:
FlimflamManagerClientTest() FlimflamManagerClientTest()
: FlimflamClientUnittestBase(flimflam::kFlimflamManagerInterface) { : FlimflamClientUnittestBase(
flimflam::kFlimflamManagerInterface,
dbus::ObjectPath(flimflam::kFlimflamServicePath)) {
} }
virtual void SetUp() { virtual void SetUp() {
......
...@@ -16,7 +16,9 @@ namespace chromeos { ...@@ -16,7 +16,9 @@ namespace chromeos {
class FlimflamNetworkClientTest : public FlimflamClientUnittestBase { class FlimflamNetworkClientTest : public FlimflamClientUnittestBase {
public: public:
FlimflamNetworkClientTest() FlimflamNetworkClientTest()
: FlimflamClientUnittestBase(flimflam::kFlimflamNetworkInterface) { : FlimflamClientUnittestBase(
flimflam::kFlimflamNetworkInterface,
dbus::ObjectPath(flimflam::kFlimflamServicePath)) {
} }
virtual void SetUp() { virtual void SetUp() {
......
// 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 "base/bind.h"
#include "base/values.h"
#include "chromeos/dbus/flimflam_client_unittest_base.h"
#include "chromeos/dbus/flimflam_profile_client.h"
#include "dbus/message.h"
#include "dbus/object_path.h"
#include "dbus/values_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
namespace {
const char kDefaultProfilePath[] = "/profile/default";
const char kExampleEntryPath[] = "example_entry_path";
void AppendVariantOfArrayOfStrings(dbus::MessageWriter* writer,
const std::vector<std::string>& strings) {
dbus::MessageWriter variant_writer(NULL);
writer->OpenVariant("as", &variant_writer);
variant_writer.AppendArrayOfStrings(strings);
writer->CloseContainer(&variant_writer);
}
} // namespace
class FlimflamProfileClientTest : public FlimflamClientUnittestBase {
public:
FlimflamProfileClientTest()
: FlimflamClientUnittestBase(flimflam::kFlimflamProfileInterface,
dbus::ObjectPath(kDefaultProfilePath)) {
}
virtual void SetUp() {
FlimflamClientUnittestBase::SetUp();
// Create a client with the mock bus.
client_.reset(FlimflamProfileClient::Create(REAL_DBUS_CLIENT_IMPLEMENTATION,
mock_bus_));
// Run the message loop to run the signal connection result callback.
message_loop_.RunAllPending();
}
virtual void TearDown() {
FlimflamClientUnittestBase::TearDown();
}
protected:
scoped_ptr<FlimflamProfileClient> client_;
};
TEST_F(FlimflamProfileClientTest, PropertyChanged) {
// Create a signal.
dbus::Signal signal(flimflam::kFlimflamProfileInterface,
flimflam::kMonitorPropertyChanged);
dbus::MessageWriter writer(&signal);
writer.AppendString(flimflam::kEntriesProperty);
AppendVariantOfArrayOfStrings(&writer,
std::vector<std::string>(1, kExampleEntryPath));
// Set expectations.
base::ListValue* value = new base::ListValue;
value->Append(base::Value::CreateStringValue(kExampleEntryPath));
client_->SetPropertyChangedHandler(dbus::ObjectPath(kDefaultProfilePath),
base::Bind(&ExpectPropertyChanged,
flimflam::kEntriesProperty,
value));
// Run the signal callback.
SendPropertyChangedSignal(&signal);
// Reset the handler.
client_->ResetPropertyChangedHandler(dbus::ObjectPath(kDefaultProfilePath));
}
TEST_F(FlimflamProfileClientTest, GetProperties) {
// Create response.
scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
dbus::MessageWriter writer(response.get());
dbus::MessageWriter array_writer(NULL);
writer.OpenArray("{sv}", &array_writer);
dbus::MessageWriter entry_writer(NULL);
array_writer.OpenDictEntry(&entry_writer);
entry_writer.AppendString(flimflam::kEntriesProperty);
AppendVariantOfArrayOfStrings(&entry_writer,
std::vector<std::string>(1, kExampleEntryPath));
array_writer.CloseContainer(&entry_writer);
writer.CloseContainer(&array_writer);
// Create the expected value.
base::ListValue* entries = new base::ListValue;
entries->Append(base::Value::CreateStringValue(kExampleEntryPath));
base::DictionaryValue value;
value.SetWithoutPathExpansion(flimflam::kEntriesProperty, entries);
// Set expectations.
PrepareForMethodCall(flimflam::kGetPropertiesFunction,
base::Bind(&ExpectNoArgument),
response.get());
// Call method.
client_->GetProperties(dbus::ObjectPath(kDefaultProfilePath),
base::Bind(&ExpectDictionaryValueResult, &value));
// Run the message loop.
message_loop_.RunAllPending();
}
TEST_F(FlimflamProfileClientTest, GetEntry) {
// Create response.
scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
dbus::MessageWriter writer(response.get());
dbus::MessageWriter array_writer(NULL);
writer.OpenArray("{sv}", &array_writer);
dbus::MessageWriter entry_writer(NULL);
array_writer.OpenDictEntry(&entry_writer);
entry_writer.AppendString(flimflam::kTypeProperty);
entry_writer.AppendVariantOfString(flimflam::kTypeWifi);
array_writer.CloseContainer(&entry_writer);
writer.CloseContainer(&array_writer);
// Create the expected value.
base::DictionaryValue value;
value.SetWithoutPathExpansion(
flimflam::kTypeProperty,
base::Value::CreateStringValue(flimflam::kTypeWifi));
// Set expectations.
PrepareForMethodCall(flimflam::kGetEntryFunction,
base::Bind(&ExpectStringArgument, kExampleEntryPath),
response.get());
// Call method.
client_->GetEntry(dbus::ObjectPath(kDefaultProfilePath),
kExampleEntryPath,
base::Bind(&ExpectDictionaryValueResult, &value));
// Run the message loop.
message_loop_.RunAllPending();
}
TEST_F(FlimflamProfileClientTest, DeleteEntry) {
// Create response.
scoped_ptr<dbus::Response> response(dbus::Response::CreateEmpty());
// Create the expected value.
base::DictionaryValue value;
value.SetWithoutPathExpansion(flimflam::kOfflineModeProperty,
base::Value::CreateBooleanValue(true));
// Set expectations.
PrepareForMethodCall(flimflam::kDeleteEntryFunction,
base::Bind(&ExpectStringArgument, kExampleEntryPath),
response.get());
// Call method.
client_->DeleteEntry(dbus::ObjectPath(kDefaultProfilePath),
kExampleEntryPath,
base::Bind(&ExpectNoResultValue));
// Run the message loop.
message_loop_.RunAllPending();
}
} // namespace chromeos
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment