diff options
Diffstat (limited to 'softoff')
-rw-r--r-- | softoff/Makefile.am | 2 | ||||
-rw-r--r-- | softoff/mainapp.cpp | 2 | ||||
-rw-r--r-- | softoff/softoff.cpp | 4 | ||||
-rw-r--r-- | softoff/softoff.hpp | 3 | ||||
-rw-r--r-- | softoff/test/Makefile.am | 12 | ||||
-rw-r--r-- | softoff/test/utest.cpp | 263 |
6 files changed, 4 insertions, 282 deletions
diff --git a/softoff/Makefile.am b/softoff/Makefile.am index cf50cdb..ed0c226 100644 --- a/softoff/Makefile.am +++ b/softoff/Makefile.am @@ -6,7 +6,6 @@ sbin_PROGRAMS = phosphor-softpoweroff # https://debbugs.gnu.org/cgi/bugreport.cgi?bug=13928 phosphor_softpoweroff_SOURCES = \ softoff.cpp \ - ../timer.cpp \ mainapp.cpp \ xyz/openbmc_project/Ipmi/Internal/SoftPowerOff/server.cpp \ ../utils.cpp @@ -35,4 +34,3 @@ xyz/openbmc_project/Ipmi/Internal/SoftPowerOff/server.hpp: ${top_srcdir}/xyz/ope @mkdir -p `dirname $@` $(SDBUSPLUSPLUS) -r $(top_srcdir) interface server-header xyz.openbmc_project.Ipmi.Internal.SoftPowerOff > $@ -SUBDIRS = test diff --git a/softoff/mainapp.cpp b/softoff/mainapp.cpp index 3b153a8..f6a52ac 100644 --- a/softoff/mainapp.cpp +++ b/softoff/mainapp.cpp @@ -16,12 +16,12 @@ #include "config.h" #include "softoff.hpp" -#include "timer.hpp" #include <systemd/sd-event.h> #include <phosphor-logging/elog-errors.hpp> #include <phosphor-logging/elog.hpp> +#include <sdbusplus/timer.hpp> #include <xyz/openbmc_project/State/Host/error.hpp> // Return -1 on any errors to ensure we follow the calling targets OnFailure= diff --git a/softoff/softoff.cpp b/softoff/softoff.cpp index 921536f..803efc0 100644 --- a/softoff/softoff.cpp +++ b/softoff/softoff.cpp @@ -103,7 +103,7 @@ void SoftPowerOff::hostControlEvent(sdbusplus::message::message& msg) // Starts a timer int SoftPowerOff::startTimer(const std::chrono::microseconds& usec) { - return timer.startTimer(usec); + return timer.start(usec); } // Host Response handler @@ -115,7 +115,7 @@ auto SoftPowerOff::responseReceived(HostResponse response) -> HostResponse { // Disable the timer since Host has quiesced and we are // done with soft power off part - auto r = timer.setTimer(SD_EVENT_OFF); + auto r = timer.stop(); if (r < 0) { log<level::ERR>("Failure to STOP the timer", diff --git a/softoff/softoff.hpp b/softoff/softoff.hpp index b7555e3..1c9341b 100644 --- a/softoff/softoff.hpp +++ b/softoff/softoff.hpp @@ -2,11 +2,10 @@ #include "config.h" -#include "timer.hpp" - #include <functional> #include <sdbusplus/bus.hpp> #include <sdbusplus/server/object.hpp> +#include <sdbusplus/timer.hpp> #include <xyz/openbmc_project/Control/Host/server.hpp> #include <xyz/openbmc_project/Ipmi/Internal/SoftPowerOff/server.hpp> namespace phosphor diff --git a/softoff/test/Makefile.am b/softoff/test/Makefile.am deleted file mode 100644 index afdb620..0000000 --- a/softoff/test/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -AM_CPPFLAGS = -I$(top_srcdir)/softoff - -# Run all 'check' test programs -TESTS = $(check_PROGRAMS) - -# # Build/add utest to test suite -check_PROGRAMS = utest -utest_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS) -utest_CXXFLAGS = $(PTHREAD_CFLAGS) -utest_LDFLAGS = -lgtest_main -lgtest $(PTHREAD_LIBS) $(OESDK_TESTCASE_FLAGS) $(SYSTEMD_LIBS) ${SDBUSPLUS_LIBS} -utest_SOURCES = utest.cpp -utest_LDADD = $(top_builddir)/timer.o diff --git a/softoff/test/utest.cpp b/softoff/test/utest.cpp deleted file mode 100644 index 0dd99ae..0000000 --- a/softoff/test/utest.cpp +++ /dev/null @@ -1,263 +0,0 @@ -#include "timer.hpp" - -#include <chrono> -#include <iostream> - -#include <gtest/gtest.h> - -using namespace phosphor::ipmi; - -class TimerTest : public ::testing::Test -{ - public: - // systemd event handler - sd_event* events; - - // Need this so that events can be initialized. - int rc; - - // Source of event - sd_event_source* eventSource = nullptr; - - // Add a Timer Object - Timer timer; - - // Gets called as part of each TEST_F construction - TimerTest() : rc(sd_event_default(&events)), timer(events) - { - // Check for successful creation of - // event handler and timer object. - EXPECT_GE(rc, 0); - } - - // Gets called as part of each TEST_F destruction - ~TimerTest() - { - events = sd_event_unref(events); - } -}; - -class TimerTestCallBack : public ::testing::Test -{ - public: - // systemd event handler - sd_event* events; - - // Need this so that events can be initialized. - int rc; - - // Source of event - sd_event_source* eventSource = nullptr; - - // Add a Timer Object - std::unique_ptr<Timer> timer = nullptr; - - // Indicates optional call back fun was called - bool callBackDone = false; - - void callBack() - { - callBackDone = true; - } - - // Gets called as part of each TEST_F construction - TimerTestCallBack() : rc(sd_event_default(&events)) - - { - // Check for successful creation of - // event handler and timer object. - EXPECT_GE(rc, 0); - - std::function<void()> func( - std::bind(&TimerTestCallBack::callBack, this)); - timer = std::make_unique<Timer>(events, func); - } - - // Gets called as part of each TEST_F destruction - ~TimerTestCallBack() - { - events = sd_event_unref(events); - } -}; - -/** @brief Makes sure that timer is expired and the - * callback handler gets invoked post 2 seconds - */ -TEST_F(TimerTest, timerExpiresAfter2seconds) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer.startTimer(time), 0); - - // Waiting 2 seconds is enough here since we have - // already spent some usec now - int count = 0; - while (count < 2 && !timer.isExpired()) - { - // Returns -0- on timeout and positive number on dispatch - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(true, timer.isExpired()); - EXPECT_EQ(1, count); -} - -/** @brief Makes sure that timer is not expired - */ -TEST_F(TimerTest, timerNotExpiredAfter2Seconds) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer.startTimer(time), 0); - - // Now turn off the timer post a 1 second sleep - sleep(1); - EXPECT_GE(timer.setTimer(SD_EVENT_OFF), 0); - - // Wait 2 seconds and see that timer is not expired - int count = 0; - while (count < 2) - { - // Returns -0- on timeout - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(false, timer.isExpired()); - - // 2 because of one more count that happens prior to exiting - EXPECT_EQ(2, count); -} - -/** @brief Makes sure that timer value is changed in between - * and that the new timer expires - */ -TEST_F(TimerTest, updateTimerAndExpectExpire) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer.startTimer(time), 0); - - // Now sleep for a second and then set the new timeout value - sleep(1); - - // New timeout is 3 seconds from THIS point. - time = duration_cast<microseconds>(seconds(3)); - EXPECT_GE(timer.startTimer(time), 0); - - // Wait 3 seconds and see that timer is expired - int count = 0; - while (count < 3 && !timer.isExpired()) - { - // Returns -0- on timeout - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(true, timer.isExpired()); - EXPECT_EQ(2, count); -} - -/** @brief Makes sure that timer value is changed in between - * and turn off and make sure that timer does not expire - */ -TEST_F(TimerTest, updateTimerAndNeverExpire) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer.startTimer(time), 0); - - // Now sleep for a second and then set the new timeout value - sleep(1); - - // New timeout is 2 seconds from THIS point. - time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer.startTimer(time), 0); - - // Now turn off the timer post a 1 second sleep - sleep(1); - EXPECT_GE(timer.setTimer(SD_EVENT_OFF), 0); - - // Wait 2 seconds and see that timer is expired - int count = 0; - while (count < 2) - { - // Returns -0- on timeout - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(false, timer.isExpired()); - - // 2 because of one more count that happens prior to exiting - EXPECT_EQ(2, count); -} - -/** @brief Makes sure that optional callback is called */ -TEST_F(TimerTestCallBack, optionalFuncCallBackDone) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer->startTimer(time), 0); - - // Waiting 2 seconds is enough here since we have - // already spent some usec now - int count = 0; - while (count < 2 && !timer->isExpired()) - { - // Returns -0- on timeout and positive number on dispatch - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(true, timer->isExpired()); - EXPECT_EQ(true, callBackDone); - EXPECT_EQ(1, count); -} - -/** @brief Makes sure that timer is not expired - */ -TEST_F(TimerTestCallBack, timerNotExpiredAfter2SecondsNoOptionalCallBack) -{ - using namespace std::chrono; - - auto time = duration_cast<microseconds>(seconds(2)); - EXPECT_GE(timer->startTimer(time), 0); - - // Now turn off the timer post a 1 second sleep - sleep(1); - EXPECT_GE(timer->setTimer(SD_EVENT_OFF), 0); - - // Wait 2 seconds and see that timer is not expired - int count = 0; - while (count < 2) - { - // Returns -0- on timeout - auto sleepTime = duration_cast<microseconds>(seconds(1)); - if (!sd_event_run(events, sleepTime.count())) - { - count++; - } - } - EXPECT_EQ(false, timer->isExpired()); - EXPECT_EQ(false, callBackDone); - - // 2 because of one more count that happens prior to exiting - EXPECT_EQ(2, count); -} |