user-mgr: add unit test for executeCmd

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I0a7110c12504b547192e186db334e4b62eaaea4e
diff --git a/test/execute_cmd_test.cpp b/test/execute_cmd_test.cpp
new file mode 100644
index 0000000..8e38ce8
--- /dev/null
+++ b/test/execute_cmd_test.cpp
@@ -0,0 +1,39 @@
+#include "user_mgr.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(ExecuteCmdTest, CommandReturnsEmptyOutput)
+{
+    std::vector<std::string> output = phosphor::user::executeCmd("/bin/true");
+    ASSERT_TRUE(output.empty());
+}
+
+TEST(ExecuteCmdTest, CommandWithArgs)
+{
+    std::vector<std::string> output = phosphor::user::executeCmd(
+        "/bin/echo", "testing", "with", "multiple", "args");
+    ASSERT_EQ(output.size(), 1);
+    EXPECT_EQ(output[0], "testing with multiple args");
+}
+
+TEST(ExecuteCmdTest, CommandReturnsOutput)
+{
+    std::vector<std::string> output =
+        phosphor::user::executeCmd("/bin/echo", "-e", "hello\\nworld");
+    ASSERT_EQ(output.size(), 2);
+    EXPECT_EQ(output[0], "hello");
+    EXPECT_EQ(output[1], "world");
+}
+
+TEST(ExecuteCmdTest, NonExistentCommand)
+{
+    EXPECT_THROW(phosphor::user::executeCmd("/path/to/nonexistent_command"),
+                 boost::process::process_error);
+}
+
+TEST(ExecuteCmdTest, CommandReturnsNonZeroExitCode)
+{
+    EXPECT_THROW(
+        phosphor::user::executeCmd("/bin/false"),
+        sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure);
+}
diff --git a/test/meson.build b/test/meson.build
index 2bdc805..adb9651 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -46,3 +46,13 @@
         dependencies: [gtest_dep, gmock_dep, user_manager_dep],
     ),
 )
+
+test(
+    'execute_cmd_test',
+    executable(
+        'execute_cmd_test',
+        'execute_cmd_test.cpp',
+        include_directories: '..',
+        dependencies: [gtest_dep, gmock_dep, phosphor_logging_dep],
+    ),
+)