diff --git a/test/meson.build b/test/meson.build
index 2de2b21..7a6a9e7 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -58,4 +58,5 @@
   ])
 
 test('util', test_util)
-test('phosphor_psu_manager', test_phosphor_psu_manager)
+#test('phosphor_psu_manager', test_phosphor_psu_manager)
+test('phosphor_psu_manager', test_phosphor_psu_manager, workdir: meson.current_source_dir())
diff --git a/test/psu-images-one-valid-one-invalid/model-1/MANIFEST b/test/psu-images-one-valid-one-invalid/model-1/MANIFEST
new file mode 100644
index 0000000..09ceb08
--- /dev/null
+++ b/test/psu-images-one-valid-one-invalid/model-1/MANIFEST
@@ -0,0 +1,4 @@
+purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU
+version=psu-test.v0.4
+extended_version=model=model-1,manufacture=test-manu
+
diff --git a/test/psu-images-one-valid-one-invalid/model-2/MANIFEST b/test/psu-images-one-valid-one-invalid/model-2/MANIFEST
new file mode 100644
index 0000000..f4dc679
--- /dev/null
+++ b/test/psu-images-one-valid-one-invalid/model-2/MANIFEST
@@ -0,0 +1,3 @@
+purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU
+version=psu-test.v0.5
+extended_version=model=unmatch
diff --git a/test/psu-images-valid-version0/model-3/MANIFEST b/test/psu-images-valid-version0/model-3/MANIFEST
new file mode 100644
index 0000000..4e9c33c
--- /dev/null
+++ b/test/psu-images-valid-version0/model-3/MANIFEST
@@ -0,0 +1,3 @@
+purpose=xyz.openbmc_project.Software.Version.VersionPurpose.PSU
+version=version0
+extended_version=model=model-3
diff --git a/test/test_activation.cpp b/test/test_activation.cpp
index 088e3ba..0c45a37 100644
--- a/test/test_activation.cpp
+++ b/test/test_activation.cpp
@@ -72,6 +72,14 @@
         &mockedAssociationInterface, filePath);
 }
 
+TEST_F(TestActivation, ctorWithInvalidExtVersion)
+{
+    extVersion = "invalid text";
+    activation = std::make_unique<Activation>(
+        mockedBus, dBusPath, versionId, extVersion, status, associations,
+        &mockedAssociationInterface, filePath);
+}
+
 namespace phosphor::software::updater::internal
 {
 extern std::string getUpdateService(const std::string& psuInventoryPath,
diff --git a/test/test_item_updater.cpp b/test/test_item_updater.cpp
index b020c28..fb6ea93 100644
--- a/test/test_item_updater.cpp
+++ b/test/test_item_updater.cpp
@@ -8,6 +8,7 @@
 
 using namespace phosphor::software::updater;
 using ::testing::_;
+using ::testing::Pointee;
 using ::testing::Return;
 using ::testing::ReturnArg;
 using ::testing::StrEq;
@@ -49,6 +50,11 @@
         itemUpdater->onPsuInventoryChanged(psuPath, properties);
     }
 
+    void scanDirectory(const fs::path& p)
+    {
+        itemUpdater->scanDirectory(p);
+    }
+
     static constexpr auto dBusPath = SOFTWARE_OBJPATH;
     sdbusplus::SdBusMock sdbusMock;
     sdbusplus::bus::bus mockedBus = sdbusplus::get_mocked_new(&sdbusMock);
@@ -408,3 +414,77 @@
     EXPECT_CALL(sdbusMock, sd_bus_emit_object_removed(_, StrEq(dBusPath)))
         .Times(1);
 }
+
+TEST_F(TestItemUpdater, scanDirOnNoPSU)
+{
+    constexpr auto psuPath = "/com/example/inventory/psu0";
+    constexpr auto service = "com.example.Software.Psu";
+    constexpr auto version = "version0";
+    std::string objPath = getObjPath(version);
+    EXPECT_CALL(mockedUtils, getPSUInventoryPath(_))
+        .WillOnce(Return(std::vector<std::string>({psuPath})));
+    EXPECT_CALL(mockedUtils, getService(_, StrEq(psuPath), _))
+        .WillOnce(Return(service));
+    EXPECT_CALL(mockedUtils, getVersion(StrEq(psuPath)))
+        .WillOnce(Return(std::string(version)));
+    EXPECT_CALL(mockedUtils, getPropertyImpl(_, StrEq(service), StrEq(psuPath),
+                                             _, StrEq(PRESENT)))
+        .WillOnce(Return(any(PropertyType(false)))); // not present
+
+    // The item updater itself
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(dBusPath)))
+        .Times(1);
+
+    // No activation/version objects are created
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(objPath)))
+        .Times(0);
+    itemUpdater = std::make_unique<ItemUpdater>(mockedBus, dBusPath);
+
+    // The valid image in test/psu-images-one-valid-one-invalid/model-1/
+    auto objPathValid = getObjPath("psu-test.v0.4");
+    auto objPathInvalid = getObjPath("psu-test.v0.5");
+    // activation and version object will be added on scan dir
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(objPathValid)))
+        .Times(2);
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(objPathInvalid)))
+        .Times(0);
+    scanDirectory("./psu-images-one-valid-one-invalid");
+}
+
+TEST_F(TestItemUpdater, scanDirOnSamePSUVersion)
+{
+    constexpr auto psuPath = "/com/example/inventory/psu0";
+    constexpr auto service = "com.example.Software.Psu";
+    constexpr auto version = "version0";
+    std::string objPath = getObjPath(version);
+    EXPECT_CALL(mockedUtils, getPSUInventoryPath(_))
+        .WillOnce(Return(std::vector<std::string>({psuPath})));
+    EXPECT_CALL(mockedUtils, getService(_, StrEq(psuPath), _))
+        .WillOnce(Return(service));
+    EXPECT_CALL(mockedUtils, getVersion(StrEq(psuPath)))
+        .WillOnce(Return(std::string(version)));
+    EXPECT_CALL(mockedUtils, getPropertyImpl(_, StrEq(service), StrEq(psuPath),
+                                             _, StrEq(PRESENT)))
+        .WillOnce(Return(any(PropertyType(true)))); // present
+
+    // The item updater itself
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(dBusPath)))
+        .Times(1);
+
+    // activation and version object will be added
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(objPath)))
+        .Times(2);
+    itemUpdater = std::make_unique<ItemUpdater>(mockedBus, dBusPath);
+
+    // The valid image in test/psu-images-valid-version0/model-3/ has the same
+    // version as the running PSU, so no objects will be created, but only the
+    // path will be set to the version object
+    EXPECT_CALL(sdbusMock, sd_bus_emit_object_added(_, StrEq(objPath)))
+        .Times(0);
+    EXPECT_CALL(sdbusMock, sd_bus_emit_properties_changed_strv(
+                               _, StrEq(objPath),
+                               StrEq("xyz.openbmc_project.Common.FilePath"),
+                               Pointee(StrEq("Path"))))
+        .Times(1);
+    scanDirectory("./psu-images-valid-version0");
+}
