diff --git a/phosphor-power-supply/test/power_supply_tests.cpp b/phosphor-power-supply/test/power_supply_tests.cpp
index 278326d..0417b5a 100644
--- a/phosphor-power-supply/test/power_supply_tests.cpp
+++ b/phosphor-power-supply/test/power_supply_tests.cpp
@@ -22,6 +22,7 @@
 
 static auto PSUInventoryPath = "/xyz/bmc/inv/sys/chassis/board/powersupply0";
 static auto PSUGPIOLineName = "presence-ps0";
+static auto isPowerOn = []() { return true; };
 
 struct PMBusExpectations
 {
@@ -134,7 +135,7 @@
     try
     {
         auto psu = std::make_unique<PowerSupply>(bus, "", 3, 0x68, "ibm-cffps",
-                                                 PSUGPIOLineName);
+                                                 PSUGPIOLineName, isPowerOn);
         ADD_FAILURE() << "Should not have reached this line.";
     }
     catch (const std::invalid_argument& e)
@@ -152,7 +153,7 @@
     try
     {
         auto psu = std::make_unique<PowerSupply>(bus, PSUInventoryPath, 3, 0x68,
-                                                 "ibm-cffps", "");
+                                                 "ibm-cffps", "", isPowerOn);
         ADD_FAILURE()
             << "Should not have reached this line. Invalid gpioLineName.";
     }
@@ -170,7 +171,8 @@
     try
     {
         auto psu = std::make_unique<PowerSupply>(bus, PSUInventoryPath, 3, 0x68,
-                                                 "ibm-cffps", PSUGPIOLineName);
+                                                 "ibm-cffps", PSUGPIOLineName,
+                                                 isPowerOn);
 
         EXPECT_EQ(psu->isPresent(), false);
         EXPECT_EQ(psu->isFaulted(), false);
@@ -218,8 +220,8 @@
         // If I default to reading the GPIO, I will NOT expect a call to
         // getPresence().
 
-        PowerSupply psu{bus,  PSUInventoryPath, 4,
-                        0x69, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 4,        0x69,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         MockedGPIOInterface* mockPresenceGPIO =
             static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
         EXPECT_CALL(*mockPresenceGPIO, read()).Times(1).WillOnce(Return(0));
@@ -243,8 +245,8 @@
         EXPECT_EQ(psu.hasPSCS12VFault(), false);
     }
 
-    PowerSupply psu2{bus,  PSUInventoryPath, 5,
-                     0x6a, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu2{bus,         PSUInventoryPath, 5,        0x6a,
+                     "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     // In order to get the various faults tested, the power supply needs to
     // be present in order to read from the PMBus device(s).
     MockedGPIOInterface* mockPresenceGPIO2 =
@@ -733,8 +735,8 @@
     {
         // Assume GPIO presence, not inventory presence?
         EXPECT_CALL(mockedUtil, setAvailable(_, _, _)).Times(0);
-        PowerSupply psu{bus,  PSUInventoryPath, 4,
-                        0x69, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 4,        0x69,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
 
         MockedGPIOInterface* mockPresenceGPIO =
             static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
@@ -753,8 +755,8 @@
     {
         // Assume GPIO presence, not inventory presence?
         EXPECT_CALL(mockedUtil, setAvailable(_, _, true));
-        PowerSupply psu{bus,  PSUInventoryPath, 5,
-                        0x6a, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 5,        0x6a,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         MockedGPIOInterface* mockPresenceGPIO =
             static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
         // There will potentially be multiple calls, we want it to continue
@@ -789,8 +791,8 @@
 TEST_F(PowerSupplyTests, ClearFaults)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 13,
-                    0x68, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 13,       0x68,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1019,8 +1021,8 @@
 
     try
     {
-        PowerSupply psu{bus,  PSUInventoryPath, 3,
-                        0x68, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu.getPMBus());
         // If it is not present, I should not be trying to read a string
         EXPECT_CALL(mockPMBus, readString(_, _)).Times(0);
@@ -1033,8 +1035,8 @@
 
     try
     {
-        PowerSupply psu{bus,  PSUInventoryPath, 13,
-                        0x69, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 13,       0x69,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         MockedGPIOInterface* mockPresenceGPIO =
             static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
         // GPIO read return 1 to indicate present.
@@ -1081,8 +1083,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x68, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     EXPECT_EQ(psu.isPresent(), false);
@@ -1116,8 +1118,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 11,
-                    0x6f, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 11,       0x6f,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1176,8 +1178,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x68, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1233,8 +1235,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x68, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1284,8 +1286,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x68, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1355,8 +1357,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x69, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x69,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1406,8 +1408,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x6d, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x6d,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1462,8 +1464,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x6a, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x6a,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1516,8 +1518,8 @@
     EXPECT_CALL(mockedUtil, setAvailable(_, _, true)).Times(1);
     EXPECT_CALL(mockedUtil, setAvailable(_, _, false)).Times(0);
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x6d, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x6d,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1572,8 +1574,8 @@
     EXPECT_CALL(mockedUtil, setAvailable(_, _, true)).Times(1);
     EXPECT_CALL(mockedUtil, setAvailable(_, _, false)).Times(0);
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x6a, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x6a,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1625,8 +1627,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
 
-    PowerSupply psu{bus,  PSUInventoryPath, 3,
-                    0x6b, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 3,        0x6b,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1760,8 +1762,8 @@
 TEST_F(PowerSupplyTests, HasPSKillFault)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 4,
-                    0x6d, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 4,        0x6d,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1850,8 +1852,8 @@
 TEST_F(PowerSupplyTests, HasPS12VcsFault)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 5,
-                    0x6e, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 5,        0x6e,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1924,8 +1926,8 @@
 TEST_F(PowerSupplyTests, HasPSCS12VFault)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 6,
-                    0x6f, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 6,        0x6f,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     MockedGPIOInterface* mockPresenceGPIO =
         static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
     // Always return 1 to indicate present.
@@ -1998,8 +2000,8 @@
 {
     auto bus = sdbusplus::bus::new_default();
     {
-        PowerSupply psu{bus,  PSUInventoryPath, 6,
-                        0x6f, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 6,        0x6f,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         // Defaults to not present due to constructor and mock ordering.
         psu.setupInputHistory();
         EXPECT_EQ(psu.hasInputHistory(), false);
@@ -2030,8 +2032,8 @@
     }
     {
         // Workaround - Disable INPUT_HISTORY collection if 1400W
-        PowerSupply psu{bus,  PSUInventoryPath, 3,
-                        0x68, "ibm-cffps",      PSUGPIOLineName};
+        PowerSupply psu{bus,         PSUInventoryPath, 3,        0x68,
+                        "ibm-cffps", PSUGPIOLineName,  isPowerOn};
         // Defaults to not present due to constructor and mock ordering.
         psu.setupInputHistory();
         EXPECT_EQ(psu.hasInputHistory(), false);
@@ -2062,8 +2064,9 @@
         EXPECT_EQ(psu.hasInputHistory(), false);
     }
     {
-        PowerSupply psu{bus,  PSUInventoryPath, 11,
-                        0x58, "inspur-ipsps",   PSUGPIOLineName};
+        PowerSupply psu{bus,      PSUInventoryPath, 11,
+                        0x58,     "inspur-ipsps",   PSUGPIOLineName,
+                        isPowerOn};
         // Defaults to not present due to constructor and mock ordering.
         psu.setupInputHistory();
         EXPECT_EQ(psu.hasInputHistory(), false);
@@ -2092,8 +2095,8 @@
 TEST_F(PowerSupplyTests, UpdateHistory)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 7,
-                    0x6e, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 7,        0x6e,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     EXPECT_EQ(psu.hasInputHistory(), false);
     EXPECT_EQ(psu.getNumInputHistoryRecords(), 0);
     MockedGPIOInterface* mockPresenceGPIO =
@@ -2175,8 +2178,8 @@
 TEST_F(PowerSupplyTests, IsSyncHistoryRequired)
 {
     auto bus = sdbusplus::bus::new_default();
-    PowerSupply psu{bus,  PSUInventoryPath, 8,
-                    0x6f, "ibm-cffps",      PSUGPIOLineName};
+    PowerSupply psu{bus,         PSUInventoryPath, 8,        0x6f,
+                    "ibm-cffps", PSUGPIOLineName,  isPowerOn};
     EXPECT_EQ(psu.hasInputHistory(), false);
     EXPECT_EQ(psu.isSyncHistoryRequired(), false);
     MockedGPIOInterface* mockPresenceGPIO =
