diff --git a/test/meson.build b/test/meson.build
new file mode 100644
index 0000000..4df0d46
--- /dev/null
+++ b/test/meson.build
@@ -0,0 +1,38 @@
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+if not gtest_dep.found() or not gmock_dep.found()
+    gtest_proj = import('cmake').subproject('googletest', required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+    else
+        assert(
+            not get_option('tests').enabled(),
+            'Googletest is required if tests are enabled'
+        )
+    endif
+endif
+
+test(
+    'test_health_metric_config',
+    executable(
+        'test_health_metric_config',
+        'test_health_metric_config.cpp',
+        '../health_metric_config.cpp',
+        dependencies: [
+            gtest_dep,
+            gmock_dep,
+            phosphor_logging_dep,
+            phosphor_dbus_interfaces_dep,
+            sdbusplus_dep,
+            nlohmann_json_dep
+        ],
+        include_directories: '../',
+    )
+)
diff --git a/test/test_health_metric_config.cpp b/test/test_health_metric_config.cpp
new file mode 100644
index 0000000..471bf2b
--- /dev/null
+++ b/test/test_health_metric_config.cpp
@@ -0,0 +1,73 @@
+#include "health_metric_config.hpp"
+
+#include <sdbusplus/test/sdbus_mock.hpp>
+
+#include <iostream>
+#include <set>
+#include <utility>
+
+#include <gtest/gtest.h>
+
+using namespace phosphor::health;
+using namespace phosphor::health::metric::config;
+
+constexpr auto minConfigSize = 1;
+
+TEST(HealthMonitorConfigTest, TestConfigSize)
+{
+    auto healthMetricConfigs = getHealthMetricConfigs();
+    EXPECT_GE(healthMetricConfigs.size(), minConfigSize);
+}
+
+bool isValidSubType(metric::Type type, metric::SubType subType)
+{
+    std::cout << "Metric Type: " << std::to_underlying(type)
+              << " Metric SubType: " << std::to_underlying(subType)
+              << std::endl;
+
+    using set_t = std::set<metric::SubType>;
+
+    switch (type)
+    {
+        case metric::Type::cpu:
+            return set_t{metric::SubType::cpuTotal, metric::SubType::cpuKernel,
+                         metric::SubType::cpuUser}
+                .contains(subType);
+
+        case metric::Type::memory:
+            return set_t{metric::SubType::memoryAvailable,
+                         metric::SubType::memoryBufferedAndCached,
+                         metric::SubType::memoryFree,
+                         metric::SubType::memoryShared,
+                         metric::SubType::memoryTotal}
+                .contains(subType);
+
+        case metric::Type::storage:
+            return set_t{metric::SubType::storageReadWrite, metric::SubType::NA}
+                .contains(subType);
+
+        case metric::Type::inode:
+            return set_t{metric::SubType::NA}.contains(subType);
+
+        default:
+            return false;
+    }
+}
+
+TEST(HealthMonitorConfigTest, TestConfigValues)
+{
+    auto healthMetricConfigs = getHealthMetricConfigs();
+    for (const auto& [type, configs] : healthMetricConfigs)
+    {
+        EXPECT_NE(type, metric::Type::unknown);
+        EXPECT_GE(configs.size(), minConfigSize);
+        for (const auto& config : configs)
+        {
+            EXPECT_NE(config.name, std::string(""));
+            EXPECT_TRUE(isValidSubType(type, config.subType));
+            EXPECT_GE(config.collectionFreq, HealthMetric::defaults::frequency);
+            EXPECT_GE(config.windowSize, HealthMetric::defaults::windowSize);
+            EXPECT_GE(config.thresholds.size(), minConfigSize);
+        }
+    }
+}
