shill: Cellular: cleanup proxy interfaces
Remove dbus-c++ dependency from cellular proxy interfaces.
The changes include:
- Replace DBusPropertiesMap with KeyValueStore.
- Replace DBus::Path with std::string.
- Initialize proxies using service's well known name (service_name)
instead of service owner's name (owner), since there can only
be one owner per service and it is easier to use service_name with
the new proxy setup.
- Replace DBus::Struct with std::tuple.
An upcoming CL will implement proxies using chromeos dbus, and integrate
them into ChromeosDBusControl.
BUG=chromium:517680
TEST=USE="chromeos_dbus asan clang" FEATURES=test emerge-$BOARD shill
Change-Id: I041369f69e7160a471efc8f90eef1d909df1a776
Reviewed-on: https://chromium-review.googlesource.com/293796
Commit-Ready: Zeping Qiu <zqiu@chromium.org>
Tested-by: Zeping Qiu <zqiu@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/cellular/modem_manager_unittest.cc b/cellular/modem_manager_unittest.cc
index 7c84bfb..8779fbe 100644
--- a/cellular/modem_manager_unittest.cc
+++ b/cellular/modem_manager_unittest.cc
@@ -13,8 +13,8 @@
#include "shill/cellular/mock_modem_manager_proxy.h"
#include "shill/manager.h"
#include "shill/mock_control.h"
-#include "shill/mock_dbus_service_proxy.h"
#include "shill/mock_manager.h"
+#include "shill/test_event_dispatcher.h"
#include "shill/testing.h"
using std::string;
@@ -34,101 +34,67 @@
public:
ModemManagerTest()
: manager_(&control_, &dispatcher_, nullptr, nullptr),
- modem_info_(&control_, &dispatcher_, nullptr, &manager_, nullptr),
- dbus_service_proxy_(nullptr) {}
+ modem_info_(&control_, &dispatcher_, nullptr, &manager_, nullptr) {}
virtual void SetUp() {
modem_.reset(
- new StrictModem(kOwner, kService, kModemPath, &modem_info_, &control_));
- manager_.dbus_manager_.reset(new DBusManager(&control_));
- dbus_service_proxy_ = new MockDBusServiceProxy();
- // Ownership of |dbus_service_proxy_| is transferred to
- // |manager_.dbus_manager_|.
- manager_.dbus_manager_->proxy_.reset(dbus_service_proxy_);
+ new StrictModem(kService, kModemPath, &modem_info_, &control_));
}
protected:
static const char kService[];
static const char kPath[];
- static const char kOwner[];
static const char kModemPath[];
shared_ptr<StrictModem> modem_;
- EventDispatcher dispatcher_;
+ EventDispatcherForTest dispatcher_;
MockControl control_;
MockManager manager_;
MockModemInfo modem_info_;
- MockDBusServiceProxy* dbus_service_proxy_;
};
const char ModemManagerTest::kService[] = "org.chromium.ModemManager";
const char ModemManagerTest::kPath[] = "/org/chromium/ModemManager";
-const char ModemManagerTest::kOwner[] = ":1.17";
const char ModemManagerTest::kModemPath[] = "/org/blah/Modem/blah/0";
+class ModemManagerForTest : public ModemManager {
+ public:
+ ModemManagerForTest(ControlInterface* control_interface,
+ const string& service,
+ const string& path,
+ ModemInfo* modem_info)
+ : ModemManager(control_interface, service, path, modem_info) {}
+
+ MOCK_METHOD0(Start, void());
+ MOCK_METHOD0(Stop, void());
+};
+
class ModemManagerCoreTest : public ModemManagerTest {
public:
ModemManagerCoreTest()
: ModemManagerTest(),
- modem_manager_(nullptr, kService, kPath, &modem_info_) {}
+ modem_manager_(&control_, kService, kPath, &modem_info_) {}
protected:
- ModemManager modem_manager_;
+ ModemManagerForTest modem_manager_;
};
-TEST_F(ModemManagerCoreTest, StartStopWithModemManagerServiceAbsent) {
- StringCallback get_name_owner_callback;
- EXPECT_CALL(*dbus_service_proxy_, GetNameOwner(kService, _, _, _))
- .WillOnce(SaveArg<2>(&get_name_owner_callback));
- modem_manager_.Start();
- get_name_owner_callback.Run("", Error());
- EXPECT_EQ("", modem_manager_.owner_);
-
- modem_manager_.Stop();
- EXPECT_EQ("", modem_manager_.owner_);
-}
-
-TEST_F(ModemManagerCoreTest, StartStopWithModemManagerServicePresent) {
- StringCallback get_name_owner_callback;
- EXPECT_CALL(*dbus_service_proxy_, GetNameOwner(kService, _, _, _))
- .WillOnce(SaveArg<2>(&get_name_owner_callback));
- modem_manager_.Start();
- get_name_owner_callback.Run(kOwner, Error());
- EXPECT_EQ(kOwner, modem_manager_.owner_);
-
- modem_manager_.Stop();
- EXPECT_EQ("", modem_manager_.owner_);
-}
-
-TEST_F(ModemManagerCoreTest, OnAppearVanish) {
- EXPECT_CALL(*dbus_service_proxy_, GetNameOwner(kService, _, _, _));
- modem_manager_.Start();
- EXPECT_EQ("", modem_manager_.owner_);
-
- manager_.dbus_manager()->OnNameOwnerChanged(kService, "", kOwner);
- EXPECT_EQ(kOwner, modem_manager_.owner_);
-
- manager_.dbus_manager()->OnNameOwnerChanged(kService, kOwner, "");
- EXPECT_EQ("", modem_manager_.owner_);
-}
-
TEST_F(ModemManagerCoreTest, ConnectDisconnect) {
- EXPECT_EQ("", modem_manager_.owner_);
- modem_manager_.Connect(kOwner);
- EXPECT_EQ(kOwner, modem_manager_.owner_);
- EXPECT_EQ(0, modem_manager_.modems_.size());
+ EXPECT_FALSE(modem_manager_.service_connected_);
+ modem_manager_.Connect();
+ EXPECT_TRUE(modem_manager_.service_connected_);
modem_manager_.RecordAddedModem(modem_);
EXPECT_EQ(1, modem_manager_.modems_.size());
modem_manager_.ModemManager::Disconnect();
- EXPECT_EQ("", modem_manager_.owner_);
EXPECT_EQ(0, modem_manager_.modems_.size());
+ EXPECT_FALSE(modem_manager_.service_connected_);
}
TEST_F(ModemManagerCoreTest, AddRemoveModem) {
- modem_manager_.Connect(kOwner);
+ modem_manager_.Connect();
EXPECT_FALSE(modem_manager_.ModemExists(kModemPath));
// Remove non-existent modem path.
@@ -170,28 +136,35 @@
protected:
ModemManagerClassicMockInit modem_manager_;
- std::unique_ptr<MockModemManagerProxy> proxy_;
+ MockModemManagerProxy* proxy_;
};
+TEST_F(ModemManagerClassicTest, StartStop) {
+ EXPECT_EQ(nullptr, modem_manager_.proxy_.get());
+
+ EXPECT_CALL(control_, CreateModemManagerProxy(_, kPath, kService, _, _))
+ .WillOnce(Return(proxy_));
+ modem_manager_.Start();
+ EXPECT_NE(nullptr, modem_manager_.proxy_.get());
+
+ modem_manager_.Stop();
+ EXPECT_EQ(nullptr, modem_manager_.proxy_.get());
+}
+
TEST_F(ModemManagerClassicTest, Connect) {
- EXPECT_EQ("", modem_manager_.owner_);
+ // Setup proxy.
+ modem_manager_.proxy_.reset(proxy_);
- EXPECT_CALL(control_, CreateModemManagerProxy(_, kPath, kOwner))
- .WillOnce(ReturnAndReleasePointee(&proxy_));
EXPECT_CALL(*proxy_, EnumerateDevices())
- .WillOnce(Return(vector<DBus::Path>(1, kModemPath)));
-
+ .WillOnce(Return(vector<string>(1, kModemPath)));
EXPECT_CALL(modem_manager_,
InitModemClassic(
Pointee(Field(&Modem::path_, StrEq(kModemPath)))));
-
- modem_manager_.Connect(kOwner);
- EXPECT_EQ(kOwner, modem_manager_.owner_);
+ modem_manager_.Connect();
EXPECT_EQ(1, modem_manager_.modems_.size());
ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
}
-
class ModemManager1MockInit : public ModemManager1 {
public:
ModemManager1MockInit(ControlInterface* control_interface,
@@ -200,7 +173,7 @@
ModemInfo* modem_info_) :
ModemManager1(control_interface, service, path, modem_info_) {}
MOCK_METHOD2(InitModem1, void(shared_ptr<Modem1>,
- const DBusInterfaceToProperties&));
+ const InterfaceToProperties&));
};
@@ -216,50 +189,66 @@
proxy_->IgnoreSetCallbacks();
}
- void Connect(const DBusObjectsWithProperties& expected_objects) {
- EXPECT_CALL(control_, CreateDBusObjectManagerProxy(kPath, kOwner))
- .WillOnce(ReturnAndReleasePointee(&proxy_));
- EXPECT_CALL(*proxy_, set_interfaces_added_callback(_));
- EXPECT_CALL(*proxy_, set_interfaces_removed_callback(_));
+ void Connect(const ObjectsWithProperties& expected_objects) {
ManagedObjectsCallback get_managed_objects_callback;
EXPECT_CALL(*proxy_, GetManagedObjects(_, _, _))
.WillOnce(SaveArg<1>(&get_managed_objects_callback));
- modem_manager_.Connect(kOwner);
+ modem_manager_.Connect();
get_managed_objects_callback.Run(expected_objects, Error());
}
- static DBusObjectsWithProperties GetModemWithProperties() {
- DBusPropertiesMap o_fd_mm1_modem;
+ static ObjectsWithProperties GetModemWithProperties() {
+ KeyValueStore o_fd_mm1_modem;
- DBusInterfaceToProperties properties;
+ InterfaceToProperties properties;
properties[MM_DBUS_INTERFACE_MODEM] = o_fd_mm1_modem;
- DBusObjectsWithProperties objects_with_properties;
+ ObjectsWithProperties objects_with_properties;
objects_with_properties[kModemPath] = properties;
return objects_with_properties;
}
ModemManager1MockInit modem_manager_;
- std::unique_ptr<MockDBusObjectManagerProxy> proxy_;
+ MockDBusObjectManagerProxy* proxy_;
MockControl control_;
};
+TEST_F(ModemManager1Test, StartStop) {
+ EXPECT_EQ(nullptr, modem_manager_.proxy_.get());
+
+ EXPECT_CALL(control_, CreateDBusObjectManagerProxy(kPath, kService, _, _))
+ .WillOnce(Return(proxy_));
+ EXPECT_CALL(*proxy_, set_interfaces_added_callback(_));
+ EXPECT_CALL(*proxy_, set_interfaces_removed_callback(_));
+ modem_manager_.Start();
+ EXPECT_NE(nullptr, modem_manager_.proxy_.get());
+
+ modem_manager_.Stop();
+ EXPECT_EQ(nullptr, modem_manager_.proxy_.get());
+}
+
TEST_F(ModemManager1Test, Connect) {
+ // Setup proxy.
+ modem_manager_.proxy_.reset(proxy_);
+
Connect(GetModemWithProperties());
EXPECT_EQ(1, modem_manager_.modems_.size());
EXPECT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
}
TEST_F(ModemManager1Test, AddRemoveInterfaces) {
+ // Setup proxy.
+ modem_manager_.proxy_.reset(proxy_);
+
// Have nothing come back from GetManagedObjects
- Connect(DBusObjectsWithProperties());
+ Connect(ObjectsWithProperties());
EXPECT_EQ(0, modem_manager_.modems_.size());
// Add an object that doesn't have a modem interface. Nothing should be added
EXPECT_CALL(modem_manager_, InitModem1(_, _)).Times(0);
modem_manager_.OnInterfacesAddedSignal(kModemPath,
- DBusInterfaceToProperties());
+ InterfaceToProperties());
EXPECT_EQ(0, modem_manager_.modems_.size());
// Actually add a modem