summaryrefslogtreecommitdiffstats
path: root/presence
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2017-07-13 01:42:26 -0400
committerPatrick Williams <patrick@stwcx.xyz>2017-08-02 20:18:19 +0000
commit7cd75d7853f884176711c5f26f01fac695f02306 (patch)
tree42cf49cd804136052a48a1a506d21712f2e8b099 /presence
parent135a47f9212e896fb2a52d22d0d44d80b453487c (diff)
downloadphosphor-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.am15
-rw-r--r--presence/test/fallbacktest.cpp234
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);
+}
OpenPOWER on IntegriCloud