summaryrefslogtreecommitdiffstats
path: root/softoff/test/utest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'softoff/test/utest.cpp')
-rw-r--r--softoff/test/utest.cpp103
1 files changed, 102 insertions, 1 deletions
diff --git a/softoff/test/utest.cpp b/softoff/test/utest.cpp
index a9dae9c..9ffb04e 100644
--- a/softoff/test/utest.cpp
+++ b/softoff/test/utest.cpp
@@ -15,7 +15,7 @@ class TimerTest : public ::testing::Test
int rc;
// Source of event
- sd_event_source* eventSource;
+ sd_event_source* eventSource = nullptr;
// Add a Timer Object
Timer timer;
@@ -37,6 +37,51 @@ class TimerTest : public ::testing::Test
}
};
+
+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
*/
@@ -162,3 +207,59 @@ TEST_F(TimerTest, updateTimerAndNeverExpire)
// 2 becase 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);
+}
OpenPOWER on IntegriCloud