xref: /openbmc/sdbusplus/test/timer/timer_update_not_expire.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 timer value is changed in between
10*2cd25e64SAlexander Hansen  *  and turn off and make sure that timer does not expire
11*2cd25e64SAlexander Hansen  */
TEST_F(TimerTest,updateTimerAndNeverExpire)12*2cd25e64SAlexander Hansen TEST_F(TimerTest, updateTimerAndNeverExpire)
13*2cd25e64SAlexander Hansen {
14*2cd25e64SAlexander Hansen     using namespace std::chrono;
15*2cd25e64SAlexander Hansen 
16*2cd25e64SAlexander Hansen     auto time = duration_cast<microseconds>(seconds(2));
17*2cd25e64SAlexander Hansen     EXPECT_GE(timer.start(time), 0);
18*2cd25e64SAlexander Hansen 
19*2cd25e64SAlexander Hansen     // Now sleep for a second and then set the new timeout value
20*2cd25e64SAlexander Hansen     sleep(1);
21*2cd25e64SAlexander Hansen 
22*2cd25e64SAlexander Hansen     // New timeout is 2 seconds from THIS point.
23*2cd25e64SAlexander Hansen     time = duration_cast<microseconds>(seconds(2));
24*2cd25e64SAlexander Hansen     EXPECT_GE(timer.start(time), 0);
25*2cd25e64SAlexander Hansen 
26*2cd25e64SAlexander Hansen     // Now turn off the timer post a 1 second sleep
27*2cd25e64SAlexander Hansen     sleep(1);
28*2cd25e64SAlexander Hansen     EXPECT_GE(timer.stop(), 0);
29*2cd25e64SAlexander Hansen 
30*2cd25e64SAlexander Hansen     // Wait 2 seconds and see that timer is expired
31*2cd25e64SAlexander Hansen     int count = 0;
32*2cd25e64SAlexander Hansen     while (count < 2)
33*2cd25e64SAlexander Hansen     {
34*2cd25e64SAlexander Hansen         // Returns -0- on timeout
35*2cd25e64SAlexander Hansen         auto sleepTime = duration_cast<microseconds>(seconds(1));
36*2cd25e64SAlexander Hansen         if (!sd_event_run(events, sleepTime.count()))
37*2cd25e64SAlexander Hansen         {
38*2cd25e64SAlexander Hansen             count++;
39*2cd25e64SAlexander Hansen         }
40*2cd25e64SAlexander Hansen     }
41*2cd25e64SAlexander Hansen     EXPECT_EQ(false, timer.isExpired());
42*2cd25e64SAlexander Hansen 
43*2cd25e64SAlexander Hansen     // 2 because of one more count that happens prior to exiting
44*2cd25e64SAlexander Hansen     EXPECT_EQ(2, count);
45*2cd25e64SAlexander Hansen }
46