diff --git a/src/test/associations.cpp b/src/test/associations.cpp
index ce3c9eb..e443043 100644
--- a/src/test/associations.cpp
+++ b/src/test/associations.cpp
@@ -167,6 +167,7 @@
 TEST_F(TestAssociations, associationChangedEmptyEndpoint)
 {
     std::vector<Association> associations = {{"inventory", "error", ""}};
+    interface_map_type interfaceMap;
 
     AssociationMaps assocMaps;
     assocMaps.owners = createDefaultOwnerAssociation();
@@ -174,7 +175,7 @@
 
     // Empty endpoint will result in deletion of corresponding assocInterface
     associationChanged(*server, associations, DEFAULT_SOURCE_PATH,
-                       DEFAULT_DBUS_SVC, assocMaps);
+                       DEFAULT_DBUS_SVC, interfaceMap, assocMaps);
 
     // Both of these should be 0 since we have an invalid endpoint
     auto intfEndpoints =
@@ -182,6 +183,8 @@
     EXPECT_EQ(intfEndpoints.size(), 0);
     intfEndpoints = std::get<endpointsPos>(assocMaps.ifaces[DEFAULT_REV_PATH]);
     EXPECT_EQ(intfEndpoints.size(), 0);
+
+    EXPECT_EQ(assocMaps.pending.size(), 0);
 }
 
 // Add a new association with endpoint
@@ -194,8 +197,13 @@
     assocMaps.owners = createDefaultOwnerAssociation();
     assocMaps.ifaces = createDefaultInterfaceAssociation(server);
 
+    // Make it look like the assoc endpoints are on D-Bus
+    interface_map_type interfaceMap = {
+        {"/new/source/path", {{DEFAULT_DBUS_SVC, {"a"}}}},
+        {"/xyz/openbmc_project/new/endpoint", {{DEFAULT_DBUS_SVC, {"a"}}}}};
+
     associationChanged(*server, associations, "/new/source/path",
-                       DEFAULT_DBUS_SVC, assocMaps);
+                       DEFAULT_DBUS_SVC, interfaceMap, assocMaps);
 
     // Two source paths
     EXPECT_EQ(assocMaps.owners.size(), 2);
@@ -203,6 +211,9 @@
     // Four interfaces
     EXPECT_EQ(assocMaps.ifaces.size(), 4);
 
+    // Nothing pending
+    EXPECT_EQ(assocMaps.pending.size(), 0);
+
     // New endpoint so assocMaps.ifaces should be same size
     auto intfEndpoints =
         std::get<endpointsPos>(assocMaps.ifaces[DEFAULT_FWD_PATH]);
@@ -222,12 +233,18 @@
     // changed association and interface
     AssociationMaps assocMaps;
 
+    // Make it look like the assoc endpoints are on D-Bus
+    interface_map_type interfaceMap = createDefaultInterfaceMap();
+
     associationChanged(*server, associations, DEFAULT_SOURCE_PATH,
-                       DEFAULT_DBUS_SVC, assocMaps);
+                       DEFAULT_DBUS_SVC, interfaceMap, assocMaps);
 
     // New associations so ensure it now contains a single entry
     EXPECT_EQ(assocMaps.owners.size(), 1);
 
+    // Nothing pending
+    EXPECT_EQ(assocMaps.pending.size(), 0);
+
     // Verify corresponding assoc paths each have one endpoint in assoc
     // interfaces and that those endpoints match
     auto singleOwner = assocMaps.owners[DEFAULT_SOURCE_PATH];
@@ -248,12 +265,15 @@
         {"inventory", "error",
          "/xyz/openbmc_project/inventory/system/chassis"}};
 
+    // Make it look like the assoc endpoints are on D-Bus
+    interface_map_type interfaceMap = createDefaultInterfaceMap();
+
     AssociationMaps assocMaps;
     assocMaps.owners = createDefaultOwnerAssociation();
     assocMaps.ifaces = createDefaultInterfaceAssociation(server);
 
     associationChanged(*server, associations, DEFAULT_SOURCE_PATH, newOwner,
-                       assocMaps);
+                       interfaceMap, assocMaps);
 
     // New endpoint so assocOwners should be same size
     EXPECT_EQ(assocMaps.owners.size(), 1);
@@ -267,6 +287,9 @@
     auto a = assocMaps.owners.find(DEFAULT_SOURCE_PATH);
     auto o = a->second.find(newOwner);
     EXPECT_EQ(o->second.size(), 2);
+
+    // Nothing pending
+    EXPECT_EQ(assocMaps.pending.size(), 0);
 }
 
 // Add a new association to existing interface path
@@ -275,12 +298,15 @@
     std::vector<Association> associations = {
         {"abc", "error", "/xyz/openbmc_project/inventory/system/chassis"}};
 
+    // Make it look like the assoc endpoints are on D-Bus
+    interface_map_type interfaceMap = createDefaultInterfaceMap();
+
     AssociationMaps assocMaps;
     assocMaps.owners = createDefaultOwnerAssociation();
     assocMaps.ifaces = createDefaultInterfaceAssociation(server);
 
     associationChanged(*server, associations, DEFAULT_SOURCE_PATH,
-                       DEFAULT_DBUS_SVC, assocMaps);
+                       DEFAULT_DBUS_SVC, interfaceMap, assocMaps);
 
     // Should have 3 entries in AssociationInterfaces, one is just missing an
     // endpoint
@@ -298,4 +324,6 @@
 
     // Added to an existing owner path so still 1
     EXPECT_EQ(assocMaps.owners.size(), 1);
+
+    EXPECT_EQ(assocMaps.pending.size(), 0);
 }
diff --git a/src/test/interfaces_added.cpp b/src/test/interfaces_added.cpp
index 4f0d2c4..bee978f 100644
--- a/src/test/interfaces_added.cpp
+++ b/src/test/interfaces_added.cpp
@@ -34,7 +34,7 @@
 // Verify good path of interfaces added function
 TEST_F(TestInterfacesAdded, InterfacesAddedGoodPath)
 {
-    interface_map_type interfaceMap;
+    auto interfaceMap = createDefaultInterfaceMap();
     AssociationMaps assocMaps;
 
     auto intfAdded = createInterfacesAdded(
@@ -44,9 +44,9 @@
                           DEFAULT_DBUS_SVC, assocMaps, *server);
 
     // Interface map will get the following:
-    // /logging/entry/1 /logging/entry /logging/ /
+    // /logging/entry/1 /logging/entry /logging/ / system/chassis
     // dump_InterfaceMapType(interfaceMap);
-    EXPECT_EQ(interfaceMap.size(), 4);
+    EXPECT_EQ(interfaceMap.size(), 5);
 
     // New association ower created so ensure it now contains a single entry
     // dump_AssociationOwnersType(assocOwners);
@@ -55,11 +55,14 @@
     // Ensure the 2 association interfaces were created
     // dump_AssociationInterfaces(assocInterfaces);
     EXPECT_EQ(assocMaps.ifaces.size(), 2);
+
+    // No pending associations
+    EXPECT_EQ(assocMaps.pending.size(), 0);
 }
 
 TEST_F(TestInterfacesAdded, OrgOpenBmcInterfacesAddedGoodPath)
 {
-    interface_map_type interfaceMap;
+    auto interfaceMap = createDefaultInterfaceMap();
     AssociationMaps assocMaps;
 
     auto intfAdded = createInterfacesAdded(
@@ -70,9 +73,8 @@
                           DEFAULT_DBUS_SVC, assocMaps, *server);
 
     // Interface map will get the following:
-    // /logging/entry/1 /logging/entry /logging/ /
-    // dump_InterfaceMapType(interfaceMap);
-    EXPECT_EQ(interfaceMap.size(), 4);
+    // /logging/entry/1 /logging/entry /logging/ /  system/chassis
+    EXPECT_EQ(interfaceMap.size(), 5);
 
     // New association ower created so ensure it now contains a single entry
     // dump_AssociationOwnersType(assocOwners);
@@ -81,4 +83,7 @@
     // Ensure the 2 association interfaces were created
     // dump_AssociationInterfaces(assocInterfaces);
     EXPECT_EQ(assocMaps.ifaces.size(), 2);
+
+    // No pending associations
+    EXPECT_EQ(assocMaps.pending.size(), 0);
 }
diff --git a/src/test/util/association_objects.hpp b/src/test/util/association_objects.hpp
index 45b89d6..632e5ff 100644
--- a/src/test/util/association_objects.hpp
+++ b/src/test/util/association_objects.hpp
@@ -58,3 +58,14 @@
     interface_map_type interfaceMap = {{path, connectionMap}};
     return interfaceMap;
 }
+
+// Create a default interface_map_type with 2 entries with the same
+// owner.
+interface_map_type createDefaultInterfaceMap()
+{
+    interface_map_type interfaceMap = {
+        {DEFAULT_SOURCE_PATH, {{DEFAULT_DBUS_SVC, {"a"}}}},
+        {DEFAULT_ENDPOINT, {{DEFAULT_DBUS_SVC, {"b"}}}}};
+
+    return interfaceMap;
+}
