sdbusplus::server::manager:: leverage getInterface

To allow testing, the sdbusplus::server::manager object
needs to grab the SdBusInterface the bus passed in uses,
and then use that for its sdbus library calls.  This will
work in every case, testing or none.

Change-Id: I255a6a286f37a8b193932f56c109cf4105a62a20
Signed-off-by: Patrick Venture <venture@google.com>
diff --git a/sdbusplus/sdbus.hpp b/sdbusplus/sdbus.hpp
index d0c6311..0f2772f 100644
--- a/sdbusplus/sdbus.hpp
+++ b/sdbusplus/sdbus.hpp
@@ -13,6 +13,9 @@
   public:
     virtual ~SdBusInterface() = default;
 
+    virtual int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot,
+                                          const char *path) = 0;
+
     virtual int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) = 0;
 
     virtual int sd_bus_call(sd_bus *bus, sd_bus_message *m, uint64_t usec,
@@ -120,6 +123,12 @@
     SdBusImpl(SdBusImpl &&) = default;
     SdBusImpl &operator=(SdBusImpl &&) = default;
 
+    int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot,
+                                  const char *path) override
+    {
+        return ::sd_bus_add_object_manager(bus, slot, path);
+    }
+
     int sd_bus_attach_event(sd_bus *bus, sd_event *e, int priority) override
     {
         return ::sd_bus_attach_event(bus, e, priority);
diff --git a/sdbusplus/server/manager.hpp b/sdbusplus/server/manager.hpp
index 55c2011..7c10bb3 100644
--- a/sdbusplus/server/manager.hpp
+++ b/sdbusplus/server/manager.hpp
@@ -1,7 +1,8 @@
 #pragma once
 
-#include <sdbusplus/slot.hpp>
 #include <sdbusplus/bus.hpp>
+#include <sdbusplus/sdbus.hpp>
+#include <sdbusplus/slot.hpp>
 
 namespace sdbusplus
 {
@@ -43,7 +44,9 @@
     manager(sdbusplus::bus::bus& bus, const char* path) : _slot(nullptr)
     {
         sd_bus_slot* slot = nullptr;
-        sd_bus_add_object_manager(bus.get(), &slot, path);
+        sdbusplus::SdBusInterface* intf = bus.getInterface();
+
+        intf->sd_bus_add_object_manager(bus.get(), &slot, path);
 
         _slot = decltype(_slot){slot};
     }
diff --git a/sdbusplus/test/sdbus_mock.hpp b/sdbusplus/test/sdbus_mock.hpp
index 5b47d58..c3b5454 100644
--- a/sdbusplus/test/sdbus_mock.hpp
+++ b/sdbusplus/test/sdbus_mock.hpp
@@ -12,6 +12,8 @@
   public:
     virtual ~SdBusMock(){};
 
+    MOCK_METHOD3(sd_bus_add_object_manager,
+                 int(sd_bus *, sd_bus_slot **, const char *));
     MOCK_METHOD3(sd_bus_attach_event, int(sd_bus *, sd_event *, int));
     MOCK_METHOD5(sd_bus_call, int(sd_bus *, sd_bus_message *, uint64_t,
                                   sd_bus_error *, sd_bus_message **));