diff --git a/phosphor-power-sequencer/test/meson.build b/phosphor-power-sequencer/test/meson.build
index b915859..21a4bb2 100644
--- a/phosphor-power-sequencer/test/meson.build
+++ b/phosphor-power-sequencer/test/meson.build
@@ -6,6 +6,7 @@
                 'pmbus_driver_device_tests.cpp',
                 'rail_tests.cpp',
                 'standard_device_tests.cpp',
+                'ucd90320_device_tests.cpp',
                 'ucd90x_device_tests.cpp',
                 dependencies: [
                     gmock,
diff --git a/phosphor-power-sequencer/test/ucd90320_device_tests.cpp b/phosphor-power-sequencer/test/ucd90320_device_tests.cpp
new file mode 100644
index 0000000..980b960
--- /dev/null
+++ b/phosphor-power-sequencer/test/ucd90320_device_tests.cpp
@@ -0,0 +1,268 @@
+/**
+ * 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 "mock_pmbus.hpp"
+#include "mock_services.hpp"
+#include "pmbus.hpp"
+#include "rail.hpp"
+#include "services.hpp"
+#include "ucd90320_device.hpp"
+
+#include <cstdint>
+#include <map>
+#include <memory>
+#include <optional>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+using namespace phosphor::power::sequencer;
+using namespace phosphor::pmbus;
+
+using ::testing::Return;
+
+/**
+ * Creates a Rail object that checks for a pgood fault using a GPIO.
+ *
+ * @param name Unique name for the rail
+ * @param gpio GPIO line to read to determine the pgood status of the rail
+ * @return Rail object
+ */
+static std::unique_ptr<Rail> createRail(const std::string& name,
+                                        unsigned int gpioLine)
+{
+    std::optional<std::string> presence{};
+    std::optional<uint8_t> page{};
+    bool isPowerSupplyRail{false};
+    bool checkStatusVout{false};
+    bool compareVoltageToLimit{false};
+    bool activeLow{false};
+    std::optional<GPIO> gpio{GPIO{gpioLine, activeLow}};
+    return std::make_unique<Rail>(name, presence, page, isPowerSupplyRail,
+                                  checkStatusVout, compareVoltageToLimit, gpio);
+}
+
+TEST(UCD90320DeviceTests, Constructor)
+{
+    MockServices services;
+
+    std::vector<std::unique_ptr<Rail>> rails;
+    rails.emplace_back(createRail("VDD", 5));
+    rails.emplace_back(createRail("VIO", 7));
+    uint8_t bus{3};
+    uint16_t address{0x72};
+    UCD90320Device device{std::move(rails), services, bus, address};
+
+    EXPECT_EQ(device.getName(), "UCD90320");
+    EXPECT_EQ(device.getRails().size(), 2);
+    EXPECT_EQ(device.getRails()[0]->getName(), "VDD");
+    EXPECT_EQ(device.getRails()[1]->getName(), "VIO");
+    EXPECT_EQ(device.getBus(), bus);
+    EXPECT_EQ(device.getAddress(), address);
+    EXPECT_EQ(device.getDriverName(), "ucd9000");
+    EXPECT_EQ(device.getInstance(), 0);
+    EXPECT_NE(&(device.getPMBusInterface()), nullptr);
+}
+
+TEST(UCD90320DeviceTests, StoreGPIOValues)
+{
+    // This is a protected method and cannot be called directly from a gtest.
+    // Call findPgoodFault() which calls storeGPIOValues().
+
+    // Test where works
+    {
+        std::vector<int> gpioValues{
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // MAR01-12
+            1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, // MAR13-24
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // EN1-12
+            1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, // EN13-24
+            1, 1, 0, 0, 1, 1, 1, 0,             // EN25-32
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // LGP01-12
+            1, 1, 0, 0,                         // LGP13-16
+            1, 0, 0, 1, 1, 1, 0, 0,             // DMON1-8
+            1, 0, 0, 1                          // GPIO1-4
+        };
+
+        MockServices services;
+        EXPECT_CALL(services, getGPIOValues("ucd90320"))
+            .Times(1)
+            .WillOnce(Return(gpioValues));
+        EXPECT_CALL(services, logInfoMsg("Device UCD90320 GPIO values:"))
+            .Times(1);
+        EXPECT_CALL(services, logInfoMsg("MAR01-24: ["
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0]"))
+            .Times(1);
+        EXPECT_CALL(services, logInfoMsg("EN1-32: ["
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0]"))
+            .Times(1);
+        EXPECT_CALL(services, logInfoMsg("LGP01-16: ["
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0]"))
+            .Times(1);
+        EXPECT_CALL(services, logInfoMsg("DMON1-8: ["
+                                         "1, 0, 0, 1, 1, 1, 0, 0]"))
+            .Times(1);
+        EXPECT_CALL(services, logInfoMsg("GPIO1-4: ["
+                                         "1, 0, 0, 1]"))
+            .Times(1);
+        EXPECT_CALL(services,
+                    logInfoMsg("Device UCD90320 MFR_STATUS: 0x123456789abc"))
+            .Times(1);
+        EXPECT_CALL(
+            services,
+            logErrorMsg(
+                "Pgood fault found in rail monitored by device UCD90320"))
+            .Times(1);
+        EXPECT_CALL(services, logErrorMsg("Pgood fault detected in rail VDD"))
+            .Times(1);
+        EXPECT_CALL(
+            services,
+            logErrorMsg(
+                "Rail VDD pgood GPIO line offset 2 has inactive value 0"))
+            .Times(1);
+
+        std::vector<std::unique_ptr<Rail>> rails;
+        rails.emplace_back(createRail("VDD", 2));
+        uint8_t bus{3};
+        uint16_t address{0x72};
+        UCD90320Device device{std::move(rails), services, bus, address};
+
+        MockPMBus& pmbus = static_cast<MockPMBus&>(device.getPMBusInterface());
+        EXPECT_CALL(pmbus, getPath(Type::Hwmon))
+            .Times(1)
+            .WillOnce(Return("/tmp"));
+        EXPECT_CALL(pmbus, read("mfr_status", Type::HwmonDeviceDebug, true))
+            .Times(1)
+            .WillOnce(Return(0x123456789abcull));
+
+        // Call findPgoodFault() which calls storeGPIOValues()
+        std::string powerSupplyError{};
+        std::map<std::string, std::string> additionalData{};
+        std::string error = device.findPgoodFault(services, powerSupplyError,
+                                                  additionalData);
+        EXPECT_EQ(error,
+                  "xyz.openbmc_project.Power.Error.PowerSequencerVoltageFault");
+        EXPECT_EQ(additionalData.size(), 10);
+        EXPECT_EQ(additionalData["MFR_STATUS"], "0x123456789abc");
+        EXPECT_EQ(additionalData["DEVICE_NAME"], "UCD90320");
+        EXPECT_EQ(additionalData["MAR01_24_GPIO_VALUES"],
+                  "[1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0]");
+        EXPECT_EQ(additionalData["EN1_32_GPIO_VALUES"],
+                  "[1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                  "1, 1, 0, 0, 1, 1, 1, 0]");
+        EXPECT_EQ(additionalData["LGP01_16_GPIO_VALUES"],
+                  "[1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0]");
+        EXPECT_EQ(additionalData["DMON1_8_GPIO_VALUES"],
+                  "[1, 0, 0, 1, 1, 1, 0, 0]");
+        EXPECT_EQ(additionalData["GPIO1_4_GPIO_VALUES"], "[1, 0, 0, 1]");
+        EXPECT_EQ(additionalData["RAIL_NAME"], "VDD");
+        EXPECT_EQ(additionalData["GPIO_LINE"], "2");
+        EXPECT_EQ(additionalData["GPIO_VALUE"], "0");
+    }
+
+    // Test where there are the wrong number of GPIOs (83 instead of 84)
+    {
+        std::vector<int> gpioValues{
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // MAR01-12
+            1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, // MAR13-24
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // EN1-12
+            1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, // EN13-24
+            1, 1, 0, 0, 1, 1, 1, 0,             // EN25-32
+            1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, // LGP01-12
+            1, 1, 0, 0,                         // LGP13-16
+            1, 0, 0, 1, 1, 1, 0, 0,             // DMON1-8
+            1, 0, 0                             // GPIO1-4 (1 missing)
+        };
+
+        MockServices services;
+        EXPECT_CALL(services, getGPIOValues("ucd90320"))
+            .Times(1)
+            .WillOnce(Return(gpioValues));
+        EXPECT_CALL(services, logInfoMsg("Device UCD90320 GPIO values: ["
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                                         "1, 1, 0, 0, 1, 1, 1, 0, "
+                                         "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                                         "1, 1, 0, 0, "
+                                         "1, 0, 0, 1, 1, 1, 0, 0, "
+                                         "1, 0, 0]"))
+            .Times(1);
+        EXPECT_CALL(services,
+                    logInfoMsg("Device UCD90320 MFR_STATUS: 0x123456789abc"))
+            .Times(1);
+        EXPECT_CALL(
+            services,
+            logErrorMsg(
+                "Pgood fault found in rail monitored by device UCD90320"))
+            .Times(1);
+        EXPECT_CALL(services, logErrorMsg("Pgood fault detected in rail VDD"))
+            .Times(1);
+        EXPECT_CALL(
+            services,
+            logErrorMsg(
+                "Rail VDD pgood GPIO line offset 2 has inactive value 0"))
+            .Times(1);
+
+        std::vector<std::unique_ptr<Rail>> rails;
+        rails.emplace_back(createRail("VDD", 2));
+        uint8_t bus{3};
+        uint16_t address{0x72};
+        UCD90320Device device{std::move(rails), services, bus, address};
+
+        MockPMBus& pmbus = static_cast<MockPMBus&>(device.getPMBusInterface());
+        EXPECT_CALL(pmbus, getPath(Type::Hwmon))
+            .Times(1)
+            .WillOnce(Return("/tmp"));
+        EXPECT_CALL(pmbus, read("mfr_status", Type::HwmonDeviceDebug, true))
+            .Times(1)
+            .WillOnce(Return(0x123456789abcull));
+
+        // Call findPgoodFault() which calls storeGPIOValues()
+        std::string powerSupplyError{};
+        std::map<std::string, std::string> additionalData{};
+        std::string error = device.findPgoodFault(services, powerSupplyError,
+                                                  additionalData);
+        EXPECT_EQ(error,
+                  "xyz.openbmc_project.Power.Error.PowerSequencerVoltageFault");
+        EXPECT_EQ(additionalData.size(), 6);
+        EXPECT_EQ(additionalData["MFR_STATUS"], "0x123456789abc");
+        EXPECT_EQ(additionalData["DEVICE_NAME"], "UCD90320");
+        EXPECT_EQ(additionalData["GPIO_VALUES"],
+                  "[1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                  "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, "
+                  "1, 1, 0, 0, 1, 1, 1, 0, "
+                  "1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, "
+                  "1, 1, 0, 0, "
+                  "1, 0, 0, 1, 1, 1, 0, 0, "
+                  "1, 0, 0]");
+        EXPECT_EQ(additionalData["RAIL_NAME"], "VDD");
+        EXPECT_EQ(additionalData["GPIO_LINE"], "2");
+        EXPECT_EQ(additionalData["GPIO_VALUE"], "0");
+    }
+}
diff --git a/phosphor-power-sequencer/test/ucd90x_device_tests.cpp b/phosphor-power-sequencer/test/ucd90x_device_tests.cpp
index 2ec8b2e..3ab5369 100644
--- a/phosphor-power-sequencer/test/ucd90x_device_tests.cpp
+++ b/phosphor-power-sequencer/test/ucd90x_device_tests.cpp
@@ -46,7 +46,8 @@
  * @param gpio GPIO line to read to determine the pgood status of the rail
  * @return Rail object
  */
-std::unique_ptr<Rail> createRail(const std::string& name, unsigned int gpioLine)
+static std::unique_ptr<Rail> createRail(const std::string& name,
+                                        unsigned int gpioLine)
 {
     std::optional<std::string> presence{};
     std::optional<uint8_t> page{};
