2022-04-01 18:38:25 +02:00
|
|
|
#include <fsfw/power/DummyPowerSwitcher.h>
|
|
|
|
#include <fsfw/power/PowerSwitcher.h>
|
|
|
|
|
|
|
|
#include <catch2/catch_test_macros.hpp>
|
|
|
|
|
2022-07-18 16:18:04 +02:00
|
|
|
#include "mocks/PowerSwitcherMock.h"
|
2022-04-01 18:38:25 +02:00
|
|
|
#include "objects/systemObjectList.h"
|
|
|
|
|
|
|
|
TEST_CASE("Power Switcher", "[power-switcher]") {
|
|
|
|
PowerSwitcherMock mock;
|
|
|
|
PowerSwitcher switcher(&mock, 1);
|
|
|
|
DummyPowerSwitcher dummySwitcher(objects::DUMMY_POWER_SWITCHER, 5, 5, false);
|
|
|
|
PowerSwitcher switcherUsingDummy(&dummySwitcher, 1);
|
|
|
|
SwitchInfo switchInfo;
|
|
|
|
mock.initSwitch(1);
|
|
|
|
|
|
|
|
SECTION("Basic Tests") {
|
|
|
|
REQUIRE(switcher.getFirstSwitch() == 1);
|
|
|
|
REQUIRE(switcher.getSecondSwitch() == power::NO_SWITCH);
|
|
|
|
// Default start state
|
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::SWITCH_IS_OFF);
|
|
|
|
switcher.turnOn(true);
|
|
|
|
REQUIRE(mock.getAmountSwitchStatWasRequested() == 1);
|
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::WAIT_ON);
|
2022-04-01 18:43:46 +02:00
|
|
|
REQUIRE(switcher.checkSwitchState() == PowerSwitcher::IN_POWER_TRANSITION);
|
2022-04-01 18:38:25 +02:00
|
|
|
REQUIRE(switcher.active());
|
|
|
|
switcher.doStateMachine();
|
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::SWITCH_IS_ON);
|
|
|
|
mock.getSwitchInfo(1, switchInfo);
|
|
|
|
REQUIRE(switchInfo.timesCalledOn == 1);
|
|
|
|
REQUIRE(not switcher.active());
|
|
|
|
REQUIRE(mock.getAmountSwitchStatWasRequested() == 2);
|
2022-04-01 18:43:46 +02:00
|
|
|
REQUIRE(switcher.checkSwitchState() == HasReturnvaluesIF::RETURN_OK);
|
|
|
|
REQUIRE(mock.getAmountSwitchStatWasRequested() == 3);
|
2022-04-01 18:38:25 +02:00
|
|
|
switcher.turnOff(false);
|
2022-04-01 18:43:46 +02:00
|
|
|
REQUIRE(mock.getAmountSwitchStatWasRequested() == 3);
|
2022-04-01 18:38:25 +02:00
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::WAIT_OFF);
|
|
|
|
REQUIRE(switcher.active());
|
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::WAIT_OFF);
|
|
|
|
switcher.doStateMachine();
|
|
|
|
mock.getSwitchInfo(1, switchInfo);
|
|
|
|
REQUIRE(switcher.getState() == PowerSwitcher::SWITCH_IS_OFF);
|
|
|
|
REQUIRE(switchInfo.timesCalledOn == 1);
|
|
|
|
REQUIRE(switchInfo.timesCalledOff == 1);
|
|
|
|
REQUIRE(not switcher.active());
|
2022-04-01 18:43:46 +02:00
|
|
|
REQUIRE(mock.getAmountSwitchStatWasRequested() == 4);
|
2022-04-01 18:38:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
SECTION("Dummy Test") {
|
|
|
|
// Same tests, but we can't really check the dummy
|
|
|
|
REQUIRE(switcherUsingDummy.getFirstSwitch() == 1);
|
|
|
|
REQUIRE(switcherUsingDummy.getSecondSwitch() == power::NO_SWITCH);
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::SWITCH_IS_OFF);
|
|
|
|
switcherUsingDummy.turnOn(true);
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::WAIT_ON);
|
|
|
|
REQUIRE(switcherUsingDummy.active());
|
|
|
|
switcherUsingDummy.doStateMachine();
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::SWITCH_IS_ON);
|
|
|
|
REQUIRE(not switcherUsingDummy.active());
|
|
|
|
|
|
|
|
switcherUsingDummy.turnOff(false);
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::WAIT_OFF);
|
|
|
|
REQUIRE(switcherUsingDummy.active());
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::WAIT_OFF);
|
|
|
|
switcherUsingDummy.doStateMachine();
|
|
|
|
REQUIRE(switcherUsingDummy.getState() == PowerSwitcher::SWITCH_IS_OFF);
|
|
|
|
REQUIRE(not switcherUsingDummy.active());
|
|
|
|
}
|
2022-04-01 18:43:46 +02:00
|
|
|
|
2022-05-13 13:21:01 +02:00
|
|
|
SECTION("More Dummy Tests") {}
|
2022-04-01 18:38:25 +02:00
|
|
|
}
|