diff --git a/src/test/util_test.cpp b/src/test/util_test.cpp
index 8f53510..a4b796c 100644
--- a/src/test/util_test.cpp
+++ b/src/test/util_test.cpp
@@ -1,5 +1,11 @@
+#include "getConfig.hpp"
+
+#include <unistd.h>
+
+#include <boost/container/flat_map.hpp>
 #include <util.hpp>
 
+#include <filesystem>
 #include <fstream>
 
 #include <gmock/gmock-matchers.h>
@@ -49,4 +55,136 @@
     EXPECT_EQ(findPredictedMediaLifeLeftPercent(prefixName), 255);
 }
 
+/* Test case where we successfully find the device file. */
+TEST(utilTest, findDevicePass)
+{
+    estoraged::StorageData data;
+
+    /* Set up the map of properties. */
+    data.emplace(std::string("Type"),
+                 estoraged::BasicVariantType("EmmcDevice"));
+    data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
+
+    /* Create a dummy device file. */
+    const std::string testDevName("mmcblk0");
+    std::ofstream testFile;
+    testFile.open(testDevName,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Create another dummy file. */
+    const std::string testDummyFilename("abc");
+    testFile.open(testDummyFilename,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Look for the device file. */
+    std::filesystem::path deviceFile, sysfsDir;
+    std::string luksName;
+    EXPECT_TRUE(estoraged::util::findDevice(data, std::filesystem::path("./"),
+                                            deviceFile, sysfsDir, luksName));
+
+    /* Validate the results. */
+    EXPECT_EQ("/dev/mmcblk0", deviceFile.string());
+    EXPECT_EQ("./mmcblk0/device", sysfsDir.string());
+    EXPECT_EQ("luks-mmcblk0", luksName);
+
+    /* Delete the dummy files. */
+    EXPECT_EQ(0, unlink(testDevName.c_str()));
+    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+}
+
+/* Test case where the "Type" property doesn't exist. */
+TEST(utilTest, findDeviceNoTypeFail)
+{
+    estoraged::StorageData data;
+
+    /* Set up the map of properties (with the "Type" property missing). */
+    data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
+
+    /* Create a dummy device file. */
+    const std::string testDevName("mmcblk0");
+    std::ofstream testFile;
+    testFile.open(testDevName,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Create another dummy file. */
+    const std::string testDummyFilename("abc");
+    testFile.open(testDummyFilename,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Look for the device file. */
+    std::filesystem::path deviceFile, sysfsDir;
+    std::string luksName;
+    EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
+                                             deviceFile, sysfsDir, luksName));
+
+    /* Delete the dummy files. */
+    EXPECT_EQ(0, unlink(testDevName.c_str()));
+    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+}
+
+/* Test case where the device type is not supported. */
+TEST(utilTest, findDeviceUnsupportedTypeFail)
+{
+    estoraged::StorageData data;
+
+    /* Set up the map of properties (with an unsupported "Type"). */
+    data.emplace(std::string("Type"), estoraged::BasicVariantType("NvmeDrive"));
+    data.emplace(std::string("Name"),
+                 estoraged::BasicVariantType("some_drive"));
+
+    /* Create a dummy device file. */
+    const std::string testDevName("mmcblk0");
+    std::ofstream testFile;
+    testFile.open(testDevName,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Create another dummy file. */
+    const std::string testDummyFilename("abc");
+    testFile.open(testDummyFilename,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Look for the device file. */
+    std::filesystem::path deviceFile, sysfsDir;
+    std::string luksName;
+    EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
+                                             deviceFile, sysfsDir, luksName));
+
+    /* Delete the dummy files. */
+    EXPECT_EQ(0, unlink(testDevName.c_str()));
+    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+}
+
+/* Test case where we can't find the device file. */
+TEST(utilTest, findDeviceNotFoundFail)
+{
+    estoraged::StorageData data;
+
+    /* Set up the map of properties. */
+    data.emplace(std::string("Type"),
+                 estoraged::BasicVariantType("EmmcDevice"));
+    data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
+
+    /* Create a dummy file. */
+    const std::string testDummyFilename("abc");
+    std::ofstream testFile;
+    testFile.open(testDummyFilename,
+                  std::ios::out | std::ios::binary | std::ios::trunc);
+    testFile.close();
+
+    /* Look for the device file. */
+    std::filesystem::path deviceFile, sysfsDir;
+    std::string luksName;
+    EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
+                                             deviceFile, sysfsDir, luksName));
+
+    /* Delete the dummy file. */
+    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+}
+
 } // namespace estoraged_test
