diff --git a/phosphor-power-sequencer/test/meson.build b/phosphor-power-sequencer/test/meson.build
new file mode 100644
index 0000000..ab03041
--- /dev/null
+++ b/phosphor-power-sequencer/test/meson.build
@@ -0,0 +1,16 @@
+test('phosphor-power-sequencer-tests',
+     executable('phosphor-power-sequencer-tests',
+                'rail_tests.cpp',
+                dependencies: [
+                    gtest,
+                    nlohmann_json_dep
+                ],
+                link_args: dynamic_linker,
+                build_rpath: get_option('oe-sdk').allowed() ? rpath : '',
+                implicit_include_directories: false,
+                include_directories: [
+                    '.',
+                    '../src'
+                ]
+     )
+)
diff --git a/phosphor-power-sequencer/test/rail_tests.cpp b/phosphor-power-sequencer/test/rail_tests.cpp
new file mode 100644
index 0000000..3caf573
--- /dev/null
+++ b/phosphor-power-sequencer/test/rail_tests.cpp
@@ -0,0 +1,240 @@
+/**
+ * Copyright © 2024 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "rail.hpp"
+
+#include <cstdint>
+#include <optional>
+#include <string>
+
+#include <gtest/gtest.h>
+
+using namespace phosphor::power::sequencer;
+
+TEST(GPIOTests, Initialization)
+{
+    // Default initialization
+    {
+        GPIO gpio;
+        EXPECT_EQ(gpio.line, 0);
+        EXPECT_FALSE(gpio.activeLow);
+    }
+
+    // Explicit initialization
+    {
+        GPIO gpio{48, true};
+        EXPECT_EQ(gpio.line, 48);
+        EXPECT_TRUE(gpio.activeLow);
+    }
+}
+
+TEST(RailTests, Constructor)
+{
+    // Test where succeeds: No optional parameters have values
+    {
+        std::string name{"VDD1"};
+        std::optional<std::string> presence{};
+        std::optional<uint8_t> page{};
+        bool checkStatusVout{false};
+        bool compareVoltageToLimits{false};
+        std::optional<GPIO> gpio{};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+
+        EXPECT_EQ(rail.getName(), "VDD1");
+        EXPECT_FALSE(rail.getPresence().has_value());
+        EXPECT_FALSE(rail.getPage().has_value());
+        EXPECT_FALSE(rail.getCheckStatusVout());
+        EXPECT_FALSE(rail.getCompareVoltageToLimits());
+        EXPECT_FALSE(rail.getGPIO().has_value());
+    }
+
+    // Test where succeeds: All optional parameters have values
+    {
+        std::string name{"VCS_CPU1"};
+        std::optional<std::string> presence{
+            "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1"};
+        std::optional<uint8_t> page{11};
+        bool checkStatusVout{true};
+        bool compareVoltageToLimits{true};
+        std::optional<GPIO> gpio{GPIO(60, true)};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+
+        EXPECT_EQ(rail.getName(), "VCS_CPU1");
+        EXPECT_TRUE(rail.getPresence().has_value());
+        EXPECT_EQ(
+            rail.getPresence().value(),
+            "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1");
+        EXPECT_TRUE(rail.getPage().has_value());
+        EXPECT_EQ(rail.getPage().value(), 11);
+        EXPECT_TRUE(rail.getCheckStatusVout());
+        EXPECT_TRUE(rail.getCompareVoltageToLimits());
+        EXPECT_TRUE(rail.getGPIO().has_value());
+        EXPECT_EQ(rail.getGPIO().value().line, 60);
+        EXPECT_TRUE(rail.getGPIO().value().activeLow);
+    }
+
+    // Test where fails: checkStatusVout is true and page has no value
+    {
+        std::string name{"VDD1"};
+        std::optional<std::string> presence{};
+        std::optional<uint8_t> page{};
+        bool checkStatusVout{true};
+        bool compareVoltageToLimits{false};
+        std::optional<GPIO> gpio{};
+        EXPECT_THROW((Rail{name, presence, page, checkStatusVout,
+                           compareVoltageToLimits, gpio}),
+                     std::invalid_argument);
+    }
+
+    // Test where fails: compareVoltageToLimits is true and page has no value
+    {
+        std::string name{"VDD1"};
+        std::optional<std::string> presence{};
+        std::optional<uint8_t> page{};
+        bool checkStatusVout{false};
+        bool compareVoltageToLimits{true};
+        std::optional<GPIO> gpio{};
+        EXPECT_THROW((Rail{name, presence, page, checkStatusVout,
+                           compareVoltageToLimits, gpio}),
+                     std::invalid_argument);
+    }
+}
+
+TEST(RailTests, GetName)
+{
+    std::string name{"VDD2"};
+    std::optional<std::string> presence{};
+    std::optional<uint8_t> page{};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{false};
+    std::optional<GPIO> gpio{};
+    Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+              gpio};
+
+    EXPECT_EQ(rail.getName(), "VDD2");
+}
+
+TEST(RailTests, GetPresence)
+{
+    std::string name{"VDDR2"};
+    std::optional<uint8_t> page{};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{false};
+    std::optional<GPIO> gpio{};
+
+    // Test where presence has no value
+    {
+        std::optional<std::string> presence{};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_FALSE(rail.getPresence().has_value());
+    }
+
+    // Test where presence has a value
+    {
+        std::optional<std::string> presence{
+            "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2"};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_TRUE(rail.getPresence().has_value());
+        EXPECT_EQ(
+            rail.getPresence().value(),
+            "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2");
+    }
+}
+
+TEST(RailTests, GetPage)
+{
+    std::string name{"VDD2"};
+    std::optional<std::string> presence{};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{false};
+    std::optional<GPIO> gpio{};
+
+    // Test where page has no value
+    {
+        std::optional<uint8_t> page{};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_FALSE(rail.getPage().has_value());
+    }
+
+    // Test where page has a value
+    {
+        std::optional<uint8_t> page{7};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_TRUE(rail.getPage().has_value());
+        EXPECT_EQ(rail.getPage().value(), 7);
+    }
+}
+
+TEST(RailTests, GetCheckStatusVout)
+{
+    std::string name{"VDD2"};
+    std::optional<std::string> presence{};
+    std::optional<uint8_t> page{};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{false};
+    std::optional<GPIO> gpio{};
+    Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+              gpio};
+
+    EXPECT_FALSE(rail.getCheckStatusVout());
+}
+
+TEST(RailTests, GetCompareVoltageToLimits)
+{
+    std::string name{"VDD2"};
+    std::optional<std::string> presence{};
+    std::optional<uint8_t> page{13};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{true};
+    std::optional<GPIO> gpio{};
+    Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+              gpio};
+
+    EXPECT_TRUE(rail.getCompareVoltageToLimits());
+}
+
+TEST(RailTests, GetGPIO)
+{
+    std::string name{"VDD2"};
+    std::optional<std::string> presence{};
+    std::optional<uint8_t> page{};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimits{false};
+
+    // Test where gpio has no value
+    {
+        std::optional<GPIO> gpio{};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_FALSE(rail.getGPIO().has_value());
+    }
+
+    // Test where gpio has a value
+    {
+        std::optional<GPIO> gpio{GPIO(12, false)};
+        Rail rail{name, presence, page, checkStatusVout, compareVoltageToLimits,
+                  gpio};
+        EXPECT_TRUE(rail.getGPIO().has_value());
+        EXPECT_EQ(rail.getGPIO().value().line, 12);
+        EXPECT_FALSE(rail.getGPIO().value().activeLow);
+    }
+}
