xref: /openbmc/sdeventplus/test/clock.cpp (revision 7597a081)
1*7597a081SWilliam A. Kennington III #include <cerrno>
2*7597a081SWilliam A. Kennington III #include <gmock/gmock.h>
3*7597a081SWilliam A. Kennington III #include <gtest/gtest.h>
4*7597a081SWilliam A. Kennington III #include <sdeventplus/clock.hpp>
5*7597a081SWilliam A. Kennington III #include <sdeventplus/event.hpp>
6*7597a081SWilliam A. Kennington III #include <sdeventplus/exception.hpp>
7*7597a081SWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp>
8*7597a081SWilliam A. Kennington III #include <systemd/sd-event.h>
9*7597a081SWilliam A. Kennington III #include <type_traits>
10*7597a081SWilliam A. Kennington III #include <utility>
11*7597a081SWilliam A. Kennington III 
12*7597a081SWilliam A. Kennington III namespace sdeventplus
13*7597a081SWilliam A. Kennington III {
14*7597a081SWilliam A. Kennington III namespace
15*7597a081SWilliam A. Kennington III {
16*7597a081SWilliam A. Kennington III 
17*7597a081SWilliam A. Kennington III using testing::DoAll;
18*7597a081SWilliam A. Kennington III using testing::Return;
19*7597a081SWilliam A. Kennington III using testing::SetArgPointee;
20*7597a081SWilliam A. Kennington III 
21*7597a081SWilliam A. Kennington III class ClockTest : public testing::Test
22*7597a081SWilliam A. Kennington III {
23*7597a081SWilliam A. Kennington III   protected:
24*7597a081SWilliam A. Kennington III     testing::StrictMock<test::SdEventMock> mock;
25*7597a081SWilliam A. Kennington III     sd_event* const expected_event = reinterpret_cast<sd_event*>(1234);
26*7597a081SWilliam A. Kennington III };
27*7597a081SWilliam A. Kennington III 
28*7597a081SWilliam A. Kennington III TEST_F(ClockTest, CopyEvent)
29*7597a081SWilliam A. Kennington III {
30*7597a081SWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
31*7597a081SWilliam A. Kennington III 
32*7597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_ref(expected_event))
33*7597a081SWilliam A. Kennington III         .WillOnce(Return(expected_event));
34*7597a081SWilliam A. Kennington III     Clock<ClockId::RealTime> clock(event);
35*7597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_now(expected_event, CLOCK_REALTIME, testing::_))
36*7597a081SWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<2>(2000000), Return(0)));
37*7597a081SWilliam A. Kennington III     EXPECT_EQ(Clock<ClockId::RealTime>::time_point(std::chrono::seconds{2}),
38*7597a081SWilliam A. Kennington III               clock.now());
39*7597a081SWilliam A. Kennington III 
40*7597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event))
41*7597a081SWilliam A. Kennington III         .Times(2)
42*7597a081SWilliam A. Kennington III         .WillRepeatedly(Return(nullptr));
43*7597a081SWilliam A. Kennington III }
44*7597a081SWilliam A. Kennington III 
45*7597a081SWilliam A. Kennington III TEST_F(ClockTest, MoveEvent)
46*7597a081SWilliam A. Kennington III {
47*7597a081SWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
48*7597a081SWilliam A. Kennington III 
49*7597a081SWilliam A. Kennington III     Clock<ClockId::Monotonic> clock(std::move(event));
50*7597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_now(expected_event, CLOCK_MONOTONIC, testing::_))
51*7597a081SWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
52*7597a081SWilliam A. Kennington III     EXPECT_THROW(clock.now(), SdEventError);
53*7597a081SWilliam A. Kennington III 
54*7597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
55*7597a081SWilliam A. Kennington III }
56*7597a081SWilliam A. Kennington III 
57*7597a081SWilliam A. Kennington III } // namespace
58*7597a081SWilliam A. Kennington III } // namespace sdeventplus
59