diff options
-rw-r--r-- | chromeos/chromeos.gyp | 1 | ||||
-rw-r--r-- | chromeos/dbus/flimflam_client_unittest_base.cc | 19 | ||||
-rw-r--r-- | chromeos/dbus/flimflam_client_unittest_base.h | 5 | ||||
-rw-r--r-- | chromeos/dbus/flimflam_manager_client_unittest.cc | 4 | ||||
-rw-r--r-- | chromeos/dbus/flimflam_network_client_unittest.cc | 4 | ||||
-rw-r--r-- | chromeos/dbus/flimflam_profile_client_unittest.cc | 160 |
6 files changed, 184 insertions, 9 deletions
diff --git a/chromeos/chromeos.gyp b/chromeos/chromeos.gyp index a5f463f..1bdf2bc 100644 --- a/chromeos/chromeos.gyp +++ b/chromeos/chromeos.gyp @@ -148,6 +148,7 @@ 'dbus/flimflam_client_unittest_base.h', 'dbus/flimflam_manager_client_unittest.cc', 'dbus/flimflam_network_client_unittest.cc', + 'dbus/flimflam_profile_client_unittest.cc', ], 'include_dirs': [ '..', diff --git a/chromeos/dbus/flimflam_client_unittest_base.cc b/chromeos/dbus/flimflam_client_unittest_base.cc index 0dc149a..d64e579 100644 --- a/chromeos/dbus/flimflam_client_unittest_base.cc +++ b/chromeos/dbus/flimflam_client_unittest_base.cc @@ -5,6 +5,7 @@ #include "chromeos/dbus/flimflam_client_unittest_base.h" #include "base/bind.h" +#include "base/json/json_writer.h" #include "base/values.h" #include "dbus/message.h" #include "dbus/object_path.h" @@ -20,7 +21,10 @@ using ::testing::Return; namespace chromeos { 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() { @@ -36,7 +40,7 @@ void FlimflamClientUnittestBase::SetUp() { mock_proxy_ = new dbus::MockObjectProxy( mock_bus_.get(), flimflam::kFlimflamServiceName, - dbus::ObjectPath(flimflam::kFlimflamServicePath)); + object_path_); // Set an expectation so mock_proxy's CallMethod() will use OnCallMethod() // to return responses. @@ -53,9 +57,8 @@ void FlimflamClientUnittestBase::SetUp() { // Set an expectation so mock_bus's GetObjectProxy() for the given // service name and the object path will return mock_proxy_. - EXPECT_CALL(*mock_bus_, GetObjectProxy( - flimflam::kFlimflamServiceName, - dbus::ObjectPath(flimflam::kFlimflamServicePath))) + EXPECT_CALL(*mock_bus_, GetObjectProxy(flimflam::kFlimflamServiceName, + object_path_)) .WillOnce(Return(mock_proxy_.get())); // ShutdownAndBlock() will be called in TearDown(). @@ -151,7 +154,11 @@ void FlimflamClientUnittestBase::ExpectDictionaryValueResult( DBusMethodCallStatus call_status, const base::DictionaryValue& result) { 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( diff --git a/chromeos/dbus/flimflam_client_unittest_base.h b/chromeos/dbus/flimflam_client_unittest_base.h index f8c7947..3fadcf7 100644 --- a/chromeos/dbus/flimflam_client_unittest_base.h +++ b/chromeos/dbus/flimflam_client_unittest_base.h @@ -34,7 +34,8 @@ namespace chromeos { // A class to provide functionalities needed for testing Flimflam D-Bus clients. class FlimflamClientUnittestBase : public testing::Test { public: - explicit FlimflamClientUnittestBase(const std::string& interface_name); + explicit FlimflamClientUnittestBase(const std::string& interface_name, + const dbus::ObjectPath& object_path); virtual ~FlimflamClientUnittestBase(); virtual void SetUp() OVERRIDE; @@ -112,6 +113,8 @@ class FlimflamClientUnittestBase : public testing::Test { // The interface name. const std::string interface_name_; + // The object path. + const dbus::ObjectPath object_path_; // The mock object proxy. scoped_refptr<dbus::MockObjectProxy> mock_proxy_; // The PropertyChanged signal handler given by the tested client. diff --git a/chromeos/dbus/flimflam_manager_client_unittest.cc b/chromeos/dbus/flimflam_manager_client_unittest.cc index 453b644..6dcc0df 100644 --- a/chromeos/dbus/flimflam_manager_client_unittest.cc +++ b/chromeos/dbus/flimflam_manager_client_unittest.cc @@ -99,7 +99,9 @@ base::DictionaryValue* CreateExampleProperties() { class FlimflamManagerClientTest : public FlimflamClientUnittestBase { public: FlimflamManagerClientTest() - : FlimflamClientUnittestBase(flimflam::kFlimflamManagerInterface) { + : FlimflamClientUnittestBase( + flimflam::kFlimflamManagerInterface, + dbus::ObjectPath(flimflam::kFlimflamServicePath)) { } virtual void SetUp() { diff --git a/chromeos/dbus/flimflam_network_client_unittest.cc b/chromeos/dbus/flimflam_network_client_unittest.cc index aa89918..1507498 100644 --- a/chromeos/dbus/flimflam_network_client_unittest.cc +++ b/chromeos/dbus/flimflam_network_client_unittest.cc @@ -16,7 +16,9 @@ namespace chromeos { class FlimflamNetworkClientTest : public FlimflamClientUnittestBase { public: FlimflamNetworkClientTest() - : FlimflamClientUnittestBase(flimflam::kFlimflamNetworkInterface) { + : FlimflamClientUnittestBase( + flimflam::kFlimflamNetworkInterface, + dbus::ObjectPath(flimflam::kFlimflamServicePath)) { } virtual void SetUp() { diff --git a/chromeos/dbus/flimflam_profile_client_unittest.cc b/chromeos/dbus/flimflam_profile_client_unittest.cc new file mode 100644 index 0000000..7e2e837 --- /dev/null +++ b/chromeos/dbus/flimflam_profile_client_unittest.cc @@ -0,0 +1,160 @@ +// 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 |