diff --git a/test/Makefile.am.include b/test/Makefile.am.include
new file mode 100644
index 0000000..95bf636
--- /dev/null
+++ b/test/Makefile.am.include
@@ -0,0 +1,4 @@
+test_systemd_parser_SOURCES = %reldir%/systemd_parser.cpp systemd_target_parser.cpp
+
+check_PROGRAMS += \
+	%reldir%/systemd_parser
diff --git a/test/systemd_parser.cpp b/test/systemd_parser.cpp
new file mode 100644
index 0000000..7ca94b9
--- /dev/null
+++ b/test/systemd_parser.cpp
@@ -0,0 +1,109 @@
+#include <systemd_target_parser.hpp>
+#include <gtest/gtest.h>
+
+#include <iostream>
+#include <cstdio>
+#include <cstdlib>
+#include <filesystem>
+
+namespace fs = std::filesystem;
+
+// Enable debug by default for debug when needed
+bool gVerbose = true;
+
+TEST(TargetJsonParser, BasicGoodPath)
+{
+    auto defaultData1 = R"(
+        {
+            "targets" : {
+                "multi-user.target" : {
+                    "errorsToMonitor": ["default"],
+                    "errorToLog": "xyz.openbmc_project.State.BMC.Error.MultiUserTargetFailure"},
+                "obmc-chassis-poweron@0.target" : {
+                    "errorsToMonitor": ["timeout", "failed"],
+                    "errorToLog": "xyz.openbmc_project.State.Chassis.Error.PowerOnTargetFailure"}
+                }
+        }
+    )"_json;
+
+    auto defaultData2 = R"(
+        {
+            "targets" : {
+                "obmc-host-start@0.target" : {
+                    "errorsToMonitor": ["default"],
+                    "errorToLog": "xyz.openbmc_project.State.Host.Error.HostStartFailure"},
+                "obmc-host-stop@0.target" : {
+                    "errorsToMonitor": ["dependency"],
+                    "errorToLog": "xyz.openbmc_project.State.Host.Error.HostStopFailure"}
+                }
+        }
+    )"_json;
+
+    std::FILE* tmpf = fopen("/tmp/good_file1.json", "w");
+    std::fputs(defaultData1.dump().c_str(), tmpf);
+    std::fclose(tmpf);
+
+    tmpf = fopen("/tmp/good_file2.json", "w");
+    std::fputs(defaultData2.dump().c_str(), tmpf);
+    std::fclose(tmpf);
+
+    std::vector<std::string> filePaths;
+    filePaths.push_back("/tmp/good_file1.json");
+    filePaths.push_back("/tmp/good_file2.json");
+
+    TargetErrorData targetData = parseFiles(filePaths);
+
+    EXPECT_EQ(targetData.size(), 4);
+    EXPECT_NE(targetData.find("multi-user.target"), targetData.end());
+    EXPECT_NE(targetData.find("obmc-chassis-poweron@0.target"),
+              targetData.end());
+    EXPECT_NE(targetData.find("obmc-host-start@0.target"), targetData.end());
+    EXPECT_NE(targetData.find("obmc-host-stop@0.target"), targetData.end());
+    targetEntry tgt = targetData["obmc-chassis-poweron@0.target"];
+    EXPECT_EQ(tgt.errorToLog,
+              "xyz.openbmc_project.State.Chassis.Error.PowerOnTargetFailure");
+    EXPECT_EQ(tgt.errorsToMonitor.size(), 2);
+
+    std::remove("/tmp/good_file1.json");
+    std::remove("/tmp/good_file2.json");
+}
+
+TEST(TargetJsonParser, InvalidErrorToMonitor)
+{
+    auto invalidDataError = R"(
+        {
+            "targets" : {
+                "obmc-chassis-poweron@0.target" : {
+                    "errorsToMonitor": ["timeout", "invalid"],
+                    "errorToLog": "xyz.openbmc_project.State.Chassis.Error.PowerOnTargetFailure"}
+                }
+        }
+    )"_json;
+
+    std::FILE* tmpf = fopen("/tmp/invalid_error_file.json", "w");
+    std::fputs(invalidDataError.dump().c_str(), tmpf);
+    std::fclose(tmpf);
+
+    std::vector<std::string> filePaths;
+    filePaths.push_back("/tmp/invalid_error_file.json");
+
+    // Verify exception thrown on invalid errorsToMonitor
+    EXPECT_THROW(TargetErrorData targetData = parseFiles(filePaths),
+                 std::out_of_range);
+    std::remove("/tmp/invalid_error_file.json");
+}
+
+TEST(TargetJsonParser, InvalidFileFormat)
+{
+    std::FILE* tmpf = fopen("/tmp/invalid_json_file.json", "w");
+    std::fputs("{\"targets\":{\"missing closing quote}}", tmpf);
+    fclose(tmpf);
+
+    std::vector<std::string> filePaths;
+    filePaths.push_back("/tmp/invalid_json_file.json");
+
+    // Verify exception thrown on invalid json file format
+    EXPECT_THROW(TargetErrorData targetData = parseFiles(filePaths),
+                 nlohmann::detail::parse_error);
+    std::remove("/tmp/invalid_json_file.json");
+}
