psu-ng: Refactor PMBus expectations helper
The long list of parameters with a default of 0 is getting a bit
unwieldy to deal with. Refactor this code to use a struct that
initializes the values to 0.
Use scoping to allow for defaults of 0, when that is the desired value.
Change-Id: I9548823fb286fc886cc2c073206ce78f264092b6
Signed-off-by: Brandon Wyman <bjwyman@gmail.com>
diff --git a/phosphor-power-supply/test/power_supply_tests.cpp b/phosphor-power-supply/test/power_supply_tests.cpp
index 5e3d6b4..c131621 100644
--- a/phosphor-power-supply/test/power_supply_tests.cpp
+++ b/phosphor-power-supply/test/power_supply_tests.cpp
@@ -22,37 +22,43 @@
static auto PSUInventoryPath = "/xyz/bmc/inv/sys/chassis/board/powersupply0";
static auto PSUGPIOLineName = "presence-ps0";
+struct PMBusExpectations
+{
+ uint16_t statusWordValue{0x0000};
+ uint8_t statusInputValue{0x00};
+ uint8_t statusMFRValue{0x00};
+ uint8_t statusCMLValue{0x00};
+ uint8_t statusVOUTValue{0x00};
+};
+
// Helper function to setup expectations for various STATUS_* commands
-void setPMBusExpectations(MockedPMBus& mockPMBus, uint16_t statusWordValue,
- uint8_t statusInputValue = 0,
- uint8_t statusMFRValue = 0,
- uint8_t statusCMLValue = 0,
- uint8_t statusVOUTValue = 0)
+void setPMBusExpectations(MockedPMBus& mockPMBus,
+ const PMBusExpectations& expectations)
{
EXPECT_CALL(mockPMBus, read(STATUS_WORD, _))
.Times(1)
- .WillOnce(Return(statusWordValue));
+ .WillOnce(Return(expectations.statusWordValue));
- if (statusWordValue != 0)
+ if (expectations.statusWordValue != 0)
{
// If fault bits are on in STATUS_WORD, there will also be a read of
// STATUS_INPUT, STATUS_MFR, and STATUS_CML.
EXPECT_CALL(mockPMBus, read(STATUS_INPUT, _))
.Times(1)
- .WillOnce(Return(statusInputValue));
+ .WillOnce(Return(expectations.statusInputValue));
EXPECT_CALL(mockPMBus, read(STATUS_MFR, _))
.Times(1)
- .WillOnce(Return(statusMFRValue));
+ .WillOnce(Return(expectations.statusMFRValue));
EXPECT_CALL(mockPMBus, read(STATUS_CML, _))
.Times(1)
- .WillOnce(Return(statusCMLValue));
+ .WillOnce(Return(expectations.statusCMLValue));
// Page will need to be set to 0 to read STATUS_VOUT.
EXPECT_CALL(mockPMBus, insertPageNum(STATUS_VOUT, 0))
.Times(1)
.WillOnce(Return("status0_vout"));
EXPECT_CALL(mockPMBus, read("status0_vout", _))
.Times(1)
- .WillOnce(Return(statusVOUTValue));
+ .WillOnce(Return(expectations.statusVOUTValue));
}
}
@@ -162,23 +168,25 @@
{
auto bus = sdbusplus::bus::new_default();
- // If I default to reading the GPIO, I will NOT expect a call to
- // getPresence().
+ {
+ // If I default to reading the GPIO, I will NOT expect a call to
+ // getPresence().
- PowerSupply psu{bus, PSUInventoryPath, 4, 0x69, PSUGPIOLineName};
- MockedGPIOInterface* mockPresenceGPIO =
- static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
- EXPECT_CALL(*mockPresenceGPIO, read()).Times(1).WillOnce(Return(0));
+ PowerSupply psu{bus, PSUInventoryPath, 4, 0x69, PSUGPIOLineName};
+ MockedGPIOInterface* mockPresenceGPIO =
+ static_cast<MockedGPIOInterface*>(psu.getPresenceGPIO());
+ EXPECT_CALL(*mockPresenceGPIO, read()).Times(1).WillOnce(Return(0));
- psu.analyze();
- // By default, nothing should change.
- EXPECT_EQ(psu.isPresent(), false);
- EXPECT_EQ(psu.isFaulted(), false);
- EXPECT_EQ(psu.hasInputFault(), false);
- EXPECT_EQ(psu.hasMFRFault(), false);
- EXPECT_EQ(psu.hasVINUVFault(), false);
- EXPECT_EQ(psu.hasCommFault(), false);
- EXPECT_EQ(psu.hasVoutOVFault(), false);
+ psu.analyze();
+ // By default, nothing should change.
+ EXPECT_EQ(psu.isPresent(), false);
+ EXPECT_EQ(psu.isFaulted(), false);
+ EXPECT_EQ(psu.hasInputFault(), false);
+ EXPECT_EQ(psu.hasMFRFault(), false);
+ EXPECT_EQ(psu.hasVINUVFault(), false);
+ EXPECT_EQ(psu.hasCommFault(), false);
+ EXPECT_EQ(psu.hasVoutOVFault(), false);
+ }
PowerSupply psu2{bus, PSUInventoryPath, 5, 0x6a, PSUGPIOLineName};
// In order to get the various faults tested, the power supply needs to
@@ -186,178 +194,169 @@
MockedGPIOInterface* mockPresenceGPIO2 =
static_cast<MockedGPIOInterface*>(psu2.getPresenceGPIO());
ON_CALL(*mockPresenceGPIO2, read()).WillByDefault(Return(1));
-
EXPECT_EQ(psu2.isPresent(), false);
MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu2.getPMBus());
// Presence change from missing to present will trigger write to
// ON_OFF_CONFIG.
EXPECT_CALL(mockPMBus, writeBinary(ON_OFF_CONFIG, _, _));
- // Presence change from missing to present will trigger in1_input read in
- // an attempt to get CLEAR_FAULTS called.
+ // Presence change from missing to present will trigger in1_input read
+ // in an attempt to get CLEAR_FAULTS called.
EXPECT_CALL(mockPMBus, read(READ_VIN, _)).Times(1).WillOnce(Return(206000));
- // STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- uint8_t statusInputValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), false);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
- // STATUS_WORD input fault/warn
- statusWordValue = (status_word::INPUT_FAULT_WARN);
- // STATUS_INPUT fault bits ... on.
- statusInputValue = 0x38;
- // STATUS_MFR, STATUS_CML, and STATUS_VOUT don't care
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), true);
- EXPECT_EQ(psu2.hasInputFault(), true);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ // STATUS_WORD INPUT fault.
+ {
+ // Start with STATUS_WORD 0x0000. Powered on, no faults.
+ // Set expectations for a no fault
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), false);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+
+ // Update expectations for STATUS_WORD input fault/warn
+ expectations.statusWordValue = (status_word::INPUT_FAULT_WARN);
+ expectations.statusInputValue = 0x38;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), true);
+ EXPECT_EQ(psu2.hasInputFault(), true);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// STATUS_WORD INPUT/UV fault.
- // First need it to return good status, then the fault
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- // Now set fault bits in STATUS_WORD
- statusWordValue =
- (status_word::INPUT_FAULT_WARN | status_word::VIN_UV_FAULT);
- // STATUS_INPUT fault bits ... on.
- statusInputValue = 0x38;
- // STATUS_MFR, STATUS_CML, and STATUS_VOUT don't care
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), true);
- EXPECT_EQ(psu2.hasInputFault(), true);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), true);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ {
+ // First need it to return good status, then the fault
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ // Now set fault bits in STATUS_WORD
+ expectations.statusWordValue =
+ (status_word::INPUT_FAULT_WARN | status_word::VIN_UV_FAULT);
+ // STATUS_INPUT fault bits ... on.
+ expectations.statusInputValue = 0x38;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), true);
+ EXPECT_EQ(psu2.hasInputFault(), true);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), true);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// STATUS_WORD MFR fault.
- // First need it to return good status, then the fault
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- // Now STATUS_WORD with MFR fault bit on.
- statusWordValue = (status_word::MFR_SPECIFIC_FAULT);
- // STATUS_INPUT fault bits ... don't care.
- statusInputValue = 0;
- // STATUS_MFR bits on.
- uint8_t statusMFRValue = 0xFF;
- // STATUS_CML and STATUS_VOUT don't care
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), true);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), true);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ {
+ // First need it to return good status, then the fault
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ // Now STATUS_WORD with MFR fault bit on.
+ expectations.statusWordValue = (status_word::MFR_SPECIFIC_FAULT);
+ // STATUS_MFR bits on.
+ expectations.statusMFRValue = 0xFF;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), true);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), true);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// Ignore Temperature fault.
- // First STATUS_WORD with no bits set, then with temperature fault.
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- // STATUS_WORD with temperature fault bit on.
- statusWordValue = (status_word::TEMPERATURE_FAULT_WARN);
- // STATUS_INPUT, STATUS_MFR, STATUS_CML, and STATUS_VOUT fault bits ...
- // don't care.
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), false);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ {
+ // First STATUS_WORD with no bits set, then with temperature fault.
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ // STATUS_WORD with temperature fault bit on.
+ expectations.statusWordValue = (status_word::TEMPERATURE_FAULT_WARN);
+ // STATUS_INPUT, STATUS_MFR, STATUS_CML, and STATUS_VOUT fault bits ...
+ // don't care (defaults).
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), false);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// CML fault
- // First STATUS_WORD wit no bits set, then with CML fault.
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- // STATUS_WORD with CML fault bit on.
- statusWordValue = (status_word::CML_FAULT);
- // STATUS_INPUT fault bits ... don't care.
- statusInputValue = 0;
- // STATUS_MFR don't care
- statusMFRValue = 0;
- // Turn on STATUS_CML fault bit(s)
- uint8_t statusCMLValue = 0xFF;
- // STATUS_VOUT don't care
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue, statusCMLValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), true);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), true);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ {
+ // First STATUS_WORD wit no bits set, then with CML fault.
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ // STATUS_WORD with CML fault bit on.
+ expectations.statusWordValue = (status_word::CML_FAULT);
+ // Turn on STATUS_CML fault bit(s)
+ expectations.statusCMLValue = 0xFF;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), true);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), true);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// VOUT_OV_FAULT fault
- // First STATUS_WORD with no bits set, then with VOUT/VOUT_OV fault.
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- // STATUS_WORD with VOUT/VOUT_OV fault.
- statusWordValue =
- ((status_word::VOUT_FAULT) | (status_word::VOUT_OV_FAULT));
- // STATUS_INPUT fault bits ... don't care.
- statusInputValue = 0;
- // STATUS_MFR don't care
- statusMFRValue = 0;
- // STATUS_CML don't care
- statusCMLValue = 0;
- // Turn on STATUS_VOUT fault bit(s)
- uint8_t statusVOUTValue = 0xA0;
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue, statusCMLValue, statusVOUTValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), true);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), true);
+ {
+ // First STATUS_WORD with no bits set, then with VOUT/VOUT_OV fault.
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ // STATUS_WORD with VOUT/VOUT_OV fault.
+ expectations.statusWordValue =
+ ((status_word::VOUT_FAULT) | (status_word::VOUT_OV_FAULT));
+ // Turn on STATUS_VOUT fault bit(s)
+ expectations.statusVOUTValue = 0xA0;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), true);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), true);
+ }
// Ignore fan fault
- // First STATUS_WORD with no bits set, then with fan
- // fault.
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- statusWordValue = (status_word::FAN_FAULT);
- // STATUS_INPUT, STATUS_MFR, STATUS_CML, STATUS_VOUT: Don't care if
- // bits set or not.
- setPMBusExpectations(mockPMBus, statusWordValue);
- psu2.analyze();
- EXPECT_EQ(psu2.isPresent(), true);
- EXPECT_EQ(psu2.isFaulted(), false);
- EXPECT_EQ(psu2.hasInputFault(), false);
- EXPECT_EQ(psu2.hasMFRFault(), false);
- EXPECT_EQ(psu2.hasVINUVFault(), false);
- EXPECT_EQ(psu2.hasCommFault(), false);
- EXPECT_EQ(psu2.hasVoutOVFault(), false);
-
+ {
+ // First STATUS_WORD with no bits set, then with fan fault.
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ expectations.statusWordValue = (status_word::FAN_FAULT);
+ setPMBusExpectations(mockPMBus, expectations);
+ psu2.analyze();
+ EXPECT_EQ(psu2.isPresent(), true);
+ EXPECT_EQ(psu2.isFaulted(), false);
+ EXPECT_EQ(psu2.hasInputFault(), false);
+ EXPECT_EQ(psu2.hasMFRFault(), false);
+ EXPECT_EQ(psu2.hasVINUVFault(), false);
+ EXPECT_EQ(psu2.hasCommFault(), false);
+ EXPECT_EQ(psu2.hasVoutOVFault(), false);
+ }
// TODO: ReadFailure
}
@@ -419,8 +418,8 @@
// an attempt to get CLEAR_FAULTS called.
EXPECT_CALL(mockPMBus, read(READ_VIN, _)).Times(1).WillOnce(Return(206000));
// STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.isPresent(), true);
EXPECT_EQ(psu.isFaulted(), false);
@@ -429,18 +428,18 @@
EXPECT_EQ(psu.hasVINUVFault(), false);
EXPECT_EQ(psu.hasCommFault(), false);
EXPECT_EQ(psu.hasVoutOVFault(), false);
+
// STATUS_WORD with fault bits galore!
- statusWordValue = 0xFFFF;
+ expectations.statusWordValue = 0xFFFF;
// STATUS_INPUT with fault bits on.
- uint8_t statusInputValue = 0xFF;
+ expectations.statusInputValue = 0xFF;
// STATUS_MFR_SPEFIC with bits on.
- uint8_t statusMFRValue = 0xFF;
+ expectations.statusMFRValue = 0xFF;
// STATUS_CML with bits on.
- uint8_t statusCMLValue = 0xFF;
+ expectations.statusCMLValue = 0xFF;
// STATUS_VOUT with bits on.
- uint8_t statusVOUTValue = 0xFF;
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue, statusCMLValue, statusVOUTValue);
+ expectations.statusVOUTValue = 0xFF;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.isPresent(), true);
EXPECT_EQ(psu.isFaulted(), true);
@@ -538,18 +537,18 @@
psu.analyze();
EXPECT_EQ(psu.isFaulted(), false);
MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu.getPMBus());
+ PMBusExpectations expectations;
// STATUS_WORD with fault bits on.
- uint16_t statusWordValue = 0xFFFF;
+ expectations.statusWordValue = 0xFFFF;
// STATUS_INPUT with fault bits on.
- uint8_t statusInputValue = 0xFF;
+ expectations.statusInputValue = 0xFF;
// STATUS_MFR_SPECIFIC with faults bits on.
- uint8_t statusMFRValue = 0xFF;
+ expectations.statusMFRValue = 0xFF;
// STATUS_CML with faults bits on.
- uint8_t statusCMLValue = 0xFF;
+ expectations.statusCMLValue = 0xFF;
// STATUS_VOUT with fault bits on.
- uint8_t statusVOUTValue = 0xFF;
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue, statusCMLValue, statusVOUTValue);
+ expectations.statusVOUTValue = 0xFF;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.isFaulted(), true);
}
@@ -567,21 +566,20 @@
MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu.getPMBus());
EXPECT_EQ(psu.hasInputFault(), false);
// STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasInputFault(), false);
// STATUS_WORD with input fault/warn on.
- statusWordValue = (status_word::INPUT_FAULT_WARN);
+ expectations.statusWordValue = (status_word::INPUT_FAULT_WARN);
// STATUS_INPUT with an input fault bit on.
- uint8_t statusInputValue = 0x80;
- // STATUS_MFR, STATUS_CML, and STATUS_VOUT don't care.
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue);
+ expectations.statusInputValue = 0x80;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasInputFault(), true);
// STATUS_WORD with no bits on.
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ expectations.statusWordValue = 0;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasInputFault(), false);
}
@@ -600,24 +598,20 @@
EXPECT_EQ(psu.hasMFRFault(), false);
// First return STATUS_WORD with no bits on.
// STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasMFRFault(), false);
// Next return STATUS_WORD with MFR fault bit on.
- statusWordValue = (status_word::MFR_SPECIFIC_FAULT);
- // STATUS_INPUT don't care
- uint8_t statusInputValue = 0;
+ expectations.statusWordValue = (status_word::MFR_SPECIFIC_FAULT);
// STATUS_MFR_SPEFIC with bit(s) on.
- uint8_t statusMFRValue = 0xFF;
- // STATUS_CML and STATUS_VOUT don't care.
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue);
+ expectations.statusMFRValue = 0xFF;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasMFRFault(), true);
// Back to no bits on in STATUS_WORD
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ expectations.statusWordValue = 0;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasMFRFault(), false);
}
@@ -635,22 +629,21 @@
MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu.getPMBus());
EXPECT_EQ(psu.hasVINUVFault(), false);
// STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVINUVFault(), false);
// Turn fault on.
- statusWordValue = (status_word::VIN_UV_FAULT);
+ expectations.statusWordValue = (status_word::VIN_UV_FAULT);
// Curious disagreement between PMBus Spec. Part II Figure 16 and 33. Go by
// Figure 16, and assume bits on in STATUS_INPUT.
- uint8_t statusInputValue = 0x18;
- // STATUS_MFR, STATUS_CML, and STATUS_VOUT don't care.
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue);
+ expectations.statusInputValue = 0x18;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVINUVFault(), true);
// Back to no fault bits on in STATUS_WORD
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ expectations.statusWordValue = 0;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVINUVFault(), false);
}
@@ -668,27 +661,20 @@
MockedPMBus& mockPMBus = static_cast<MockedPMBus&>(psu.getPMBus());
EXPECT_EQ(psu.hasVoutOVFault(), false);
// STATUS_WORD 0x0000 is powered on, no faults.
- uint16_t statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ PMBusExpectations expectations;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVoutOVFault(), false);
// Turn fault on.
- statusWordValue = (status_word::VOUT_OV_FAULT);
- // STATUS_INPUT don't care.
- uint8_t statusInputValue = 0;
- // STATUS_MFR don't care.
- uint8_t statusMFRValue = 0;
- // STATUS_CML don't care.
- uint8_t statusCMLValue = 0;
+ expectations.statusWordValue = (status_word::VOUT_OV_FAULT);
// STATUS_VOUT fault bit(s)
- uint8_t statusVOUTValue = 0x80;
- setPMBusExpectations(mockPMBus, statusWordValue, statusInputValue,
- statusMFRValue, statusCMLValue, statusVOUTValue);
+ expectations.statusVOUTValue = 0x80;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVoutOVFault(), true);
// Back to no fault bits on in STATUS_WORD
- statusWordValue = 0;
- setPMBusExpectations(mockPMBus, statusWordValue);
+ expectations.statusWordValue = 0;
+ setPMBusExpectations(mockPMBus, expectations);
psu.analyze();
EXPECT_EQ(psu.hasVoutOVFault(), false);
}