diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2017-07-13 01:42:26 -0400 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-08-02 20:18:19 +0000 |
commit | 7cd75d7853f884176711c5f26f01fac695f02306 (patch) | |
tree | 42cf49cd804136052a48a1a506d21712f2e8b099 /presence | |
parent | 135a47f9212e896fb2a52d22d0d44d80b453487c (diff) | |
download | phosphor-fan-presence-7cd75d7853f884176711c5f26f01fac695f02306.tar.gz phosphor-fan-presence-7cd75d7853f884176711c5f26f01fac695f02306.zip |
presence: Add fallback testcase
Change-Id: Ic3390ba18d6f029fc16aee7492d51ac5f49bf2c0
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'presence')
-rw-r--r-- | presence/test/Makefile.am | 15 | ||||
-rw-r--r-- | presence/test/fallbacktest.cpp | 234 |
2 files changed, 249 insertions, 0 deletions
diff --git a/presence/test/Makefile.am b/presence/test/Makefile.am index 56c3ab3..e4fe930 100644 --- a/presence/test/Makefile.am +++ b/presence/test/Makefile.am @@ -5,3 +5,18 @@ gtest_ldadd = -lgtest -lgtest_main -lgmock $(PTHREAD_LIBS) check_PROGRAMS = TESTS = $(check_PROGRAMS) + +check_PROGRAMS += fallbacktest +fallbacktest_SOURCES = \ + fallbacktest.cpp +fallbacktest_CXXFLAGS = \ + $(gtest_cflags) \ + ${PHOSPHOR_DBUS_INTERFACES_CFLAGS} \ + $(SDBUSPLUS_CFLAGS) +fallbacktest_LDFLAGS = \ + $(OESDK_TESTCASE_FLAGS) +fallbacktest_LDADD = \ + ${builddir}/../fallback.o \ + $(gtest_ldadd) \ + ${PHOSPHOR_DBUS_INTERFACES_LIBS} \ + $(SDBUSPLUS_LIBS) diff --git a/presence/test/fallbacktest.cpp b/presence/test/fallbacktest.cpp new file mode 100644 index 0000000..a9f989c --- /dev/null +++ b/presence/test/fallbacktest.cpp @@ -0,0 +1,234 @@ +#include <iostream> +#include <string> +#include <gtest/gtest.h> +#include "../fallback.hpp" +#include "../psensor.hpp" + +int pstate = -1; + +namespace phosphor +{ +namespace fan +{ +namespace presence +{ +void setPresence(const Fan& fan, bool newState) +{ + if (newState) + { + pstate = 1; + } + else + { + pstate = 0; + } +} + +class TestSensor : public PresenceSensor +{ + public: + bool start() override + { + ++started; + return _present; + } + + void stop() override + { + ++stopped; + } + + bool present() override + { + return _present; + } + + void fail() override + { + ++failed; + } + + bool _present = false; + size_t started = 0; + size_t stopped = 0; + size_t failed = 0; +}; + +} // namespace presence +} // namespace fan +} // namespace phosphor + +using namespace phosphor::fan::presence; + +TEST(FallbackTest, TestOne) +{ + // Validate a single sensor. + // Validate on->off->on. + pstate = -1; + Fan fan{"/path", "name"}; + TestSensor ts; + ts._present = true; + std::vector<std::reference_wrapper<PresenceSensor>> sensors{ts}; + Fallback f{fan, sensors}; + + f.monitor(); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts.failed, 0); + ASSERT_EQ(ts.stopped, 0); + ASSERT_EQ(ts.started, 1); + + f.stateChanged(false); + ASSERT_EQ(pstate, 0); + ASSERT_EQ(ts.failed, 0); + ASSERT_EQ(ts.stopped, 0); + ASSERT_EQ(ts.started, 1); + + f.stateChanged(true); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts.failed, 0); + ASSERT_EQ(ts.stopped, 0); + ASSERT_EQ(ts.started, 1); +} + +TEST(FallbackTest, TestTwoA) +{ + // Validate two sensors. + // Validate both sensors on->off->on + + pstate = -1; + Fan fan{"/path", "name"}; + TestSensor ts1, ts2; + ts1._present = true; + ts2._present = true; + + std::vector<std::reference_wrapper<PresenceSensor>> sensors{ts1, ts2}; + Fallback f{fan, sensors}; + + f.monitor(); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts1.failed, 0); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 0); + + ts1._present = false; + ts2._present = false; + f.stateChanged(false); + ASSERT_EQ(pstate, 0); + ASSERT_EQ(ts1.failed, 0); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 0); + + ts1._present = true; + ts2._present = true; + f.stateChanged(true); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts1.failed, 0); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 0); +} + + +TEST(FallbackTest, TestTwoB) +{ + // Validate two sensors. + // Validate first sensor on->off. + + pstate = -1; + Fan fan{"/path", "name"}; + TestSensor ts1, ts2; + ts1._present = true; + ts2._present = true; + + std::vector<std::reference_wrapper<PresenceSensor>> sensors{ts1, ts2}; + Fallback f{fan, sensors}; + + f.monitor(); + ASSERT_EQ(pstate, 1); + ts1._present = false; + f.stateChanged(false); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts1.failed, 1); + ASSERT_EQ(ts1.stopped, 1); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 1); + + // Flip the state of both sensors. + ts1._present = true; + ts2._present = false; + f.stateChanged(false); + ASSERT_EQ(pstate, 0); + ASSERT_EQ(ts1.failed, 1); + ASSERT_EQ(ts1.stopped, 1); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 1); +} + +TEST(FallbackTest, TestTwoC) +{ + // Validate two sensors. + // Validate first in bad state. + + pstate = -1; + Fan fan{"/path", "name"}; + TestSensor ts1, ts2; + ts1._present = false; + ts2._present = true; + + std::vector<std::reference_wrapper<PresenceSensor>> sensors{ts1, ts2}; + Fallback f{fan, sensors}; + + f.monitor(); + ASSERT_EQ(pstate, 1); + ASSERT_EQ(ts1.failed, 1); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 0); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 1); + + f.stateChanged(false); + ASSERT_EQ(pstate, 0); + ASSERT_EQ(ts1.failed, 1); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 0); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 1); +} + +TEST(FallbackTest, TestTwoD) +{ + // Validate two sensors. + // Validate both in bad state. + + pstate = -1; + Fan fan{"/path", "name"}; + TestSensor ts1, ts2; + ts1._present = false; + ts2._present = false; + + std::vector<std::reference_wrapper<PresenceSensor>> sensors{ts1, ts2}; + Fallback f{fan, sensors}; + + f.monitor(); + ASSERT_EQ(pstate, 0); + ASSERT_EQ(ts1.failed, 0); + ASSERT_EQ(ts1.stopped, 0); + ASSERT_EQ(ts1.started, 1); + ASSERT_EQ(ts2.failed, 0); + ASSERT_EQ(ts2.stopped, 0); + ASSERT_EQ(ts2.started, 0); +} |