diff --git a/test/meson.build b/test/meson.build
new file mode 100644
index 0000000..4d644cf
--- /dev/null
+++ b/test/meson.build
@@ -0,0 +1,39 @@
+oe_sdk = get_option('oe-sdk')
+if oe_sdk.enabled()
+  # Setup OE SYSROOT
+  OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
+  if OECORE_TARGET_SYSROOT == ''
+      error('Unable to get $OECORE_TARGET_SYSROOT, check your environment.')
+  endif
+  message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
+  rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
+  ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
+  dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
+else
+  dynamic_linker = []
+endif
+
+gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
+gmock = dependency('gmock', disabler: true, required: build_tests)
+
+configure_file(output: 'config.h',
+  configuration: cdata,
+)
+test_inc = include_directories('.')
+
+utest = executable(
+  'utest',
+  '../src/utils.cpp',
+  'test_utils.cpp',
+  include_directories: [psu_inc, test_inc],
+  link_args: dynamic_linker,
+  build_rpath: oe_sdk.enabled() ? rpath : '',
+  dependencies: [
+    gtest,
+    gmock,
+    phosphor_logging,
+    phosphor_dbus_interfaces,
+    sdbusplus,
+  ])
+
+test('all', utest)
diff --git a/test/test_utils.cpp b/test/test_utils.cpp
new file mode 100644
index 0000000..08eecf7
--- /dev/null
+++ b/test/test_utils.cpp
@@ -0,0 +1,62 @@
+#include "utils.hpp"
+
+#include <sdbusplus/test/sdbus_mock.hpp>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::IsNull;
+using ::testing::Return;
+using ::testing::StrEq;
+
+TEST(Utils, GetPSUInventoryPath)
+{
+    sdbusplus::SdBusMock sdbusMock;
+    auto bus = sdbusplus::get_mocked_new(&sdbusMock);
+
+    EXPECT_CALL(sdbusMock, sd_bus_message_new_method_call(
+                               _, _, _, _, _, StrEq("GetSubTreePaths")));
+
+    EXPECT_CALL(sdbusMock, sd_bus_message_ref(IsNull()))
+        .WillOnce(Return(nullptr));
+    sdbusplus::message::message msg(nullptr, &sdbusMock);
+
+    const char* path0 = "/com/example/chassis/powersupply0";
+    const char* path1 = "/com/example/chassis/powersupply1";
+
+    // std::vector
+    EXPECT_CALL(sdbusMock,
+                sd_bus_message_enter_container(IsNull(), 'a', StrEq("s")))
+        .WillOnce(Return(1));
+
+    // while !at_end()
+    EXPECT_CALL(sdbusMock, sd_bus_message_at_end(IsNull(), 0))
+        .WillOnce(Return(0))
+        .WillOnce(Return(0))
+        .WillOnce(Return(1)); // So it exits the loop after reading two strings.
+
+    // std::string
+    EXPECT_CALL(sdbusMock, sd_bus_message_read_basic(IsNull(), 's', _))
+        .WillOnce(Invoke([&](sd_bus_message*, char, void* p) {
+            const char** s = static_cast<const char**>(p);
+            // Read the first parameter, the string.
+            *s = path0;
+            return 0;
+        }))
+        .WillOnce(Invoke([&](sd_bus_message*, char, void* p) {
+            const char** s = static_cast<const char**>(p);
+            // Read the first parameter, the string.
+            *s = path1;
+            return 0;
+        }));
+
+    EXPECT_CALL(sdbusMock, sd_bus_message_exit_container(IsNull()))
+        .WillOnce(Return(0)); /* end of std::vector */
+
+    auto ret = utils::getPSUInventoryPath(bus);
+    EXPECT_EQ(2u, ret.size());
+    EXPECT_EQ(path0, ret[0]);
+    EXPECT_EQ(path1, ret[1]);
+}
