xref: /openbmc/sdbusplus/test/timer/timer_callback_done.cpp (revision 2cd25e64299ecc20e2258727e836a31b7ce6fad3)
1*2cd25e64SAlexander Hansen #include "suite.hpp"
2*2cd25e64SAlexander Hansen 
3*2cd25e64SAlexander Hansen #include <sdbusplus/timer.hpp>
4*2cd25e64SAlexander Hansen 
5*2cd25e64SAlexander Hansen #include <chrono>
6*2cd25e64SAlexander Hansen 
7*2cd25e64SAlexander Hansen #include <gtest/gtest.h>
8*2cd25e64SAlexander Hansen 
9*2cd25e64SAlexander Hansen /** @brief Makes sure that optional callback is called */
TEST_F(TimerTestCallBack,optionalFuncCallBackDone)10*2cd25e64SAlexander Hansen TEST_F(TimerTestCallBack, optionalFuncCallBackDone)
11*2cd25e64SAlexander Hansen {
12*2cd25e64SAlexander Hansen     using namespace std::chrono;
13*2cd25e64SAlexander Hansen 
14*2cd25e64SAlexander Hansen     auto time = duration_cast<microseconds>(seconds(2));
15*2cd25e64SAlexander Hansen     EXPECT_GE(timer->start(time), 0);
16*2cd25e64SAlexander Hansen 
17*2cd25e64SAlexander Hansen     // Waiting 2 seconds is enough here since we have
18*2cd25e64SAlexander Hansen     // already spent some usec now
19*2cd25e64SAlexander Hansen     int count = 0;
20*2cd25e64SAlexander Hansen     while (count < 2 && !timer->isExpired())
21*2cd25e64SAlexander Hansen     {
22*2cd25e64SAlexander Hansen         // Returns -0- on timeout and positive number on dispatch
23*2cd25e64SAlexander Hansen         auto sleepTime = duration_cast<microseconds>(seconds(1));
24*2cd25e64SAlexander Hansen         if (!sd_event_run(events, sleepTime.count()))
25*2cd25e64SAlexander Hansen         {
26*2cd25e64SAlexander Hansen             count++;
27*2cd25e64SAlexander Hansen         }
28*2cd25e64SAlexander Hansen     }
29*2cd25e64SAlexander Hansen     EXPECT_EQ(true, timer->isExpired());
30*2cd25e64SAlexander Hansen     EXPECT_EQ(true, callBackDone);
31*2cd25e64SAlexander Hansen     EXPECT_EQ(1, count);
32*2cd25e64SAlexander Hansen }
33