xref: /openbmc/sdeventplus/test/clock.cpp (revision a8c11e3c)
1*a8c11e3cSPatrick Williams #include <systemd/sd-event.h>
2*a8c11e3cSPatrick Williams 
37597a081SWilliam A. Kennington III #include <sdeventplus/clock.hpp>
47597a081SWilliam A. Kennington III #include <sdeventplus/event.hpp>
57597a081SWilliam A. Kennington III #include <sdeventplus/exception.hpp>
67597a081SWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp>
7*a8c11e3cSPatrick Williams 
8*a8c11e3cSPatrick Williams #include <cerrno>
97597a081SWilliam A. Kennington III #include <type_traits>
107597a081SWilliam A. Kennington III #include <utility>
117597a081SWilliam A. Kennington III 
12*a8c11e3cSPatrick Williams #include <gmock/gmock.h>
13*a8c11e3cSPatrick Williams #include <gtest/gtest.h>
14*a8c11e3cSPatrick Williams 
157597a081SWilliam A. Kennington III namespace sdeventplus
167597a081SWilliam A. Kennington III {
177597a081SWilliam A. Kennington III namespace
187597a081SWilliam A. Kennington III {
197597a081SWilliam A. Kennington III 
207597a081SWilliam A. Kennington III using testing::DoAll;
217597a081SWilliam A. Kennington III using testing::Return;
227597a081SWilliam A. Kennington III using testing::SetArgPointee;
237597a081SWilliam A. Kennington III 
247597a081SWilliam A. Kennington III class ClockTest : public testing::Test
257597a081SWilliam A. Kennington III {
267597a081SWilliam A. Kennington III   protected:
277597a081SWilliam A. Kennington III     testing::StrictMock<test::SdEventMock> mock;
287597a081SWilliam A. Kennington III     sd_event* const expected_event = reinterpret_cast<sd_event*>(1234);
297597a081SWilliam A. Kennington III };
307597a081SWilliam A. Kennington III 
TEST_F(ClockTest,CopyEvent)317597a081SWilliam A. Kennington III TEST_F(ClockTest, CopyEvent)
327597a081SWilliam A. Kennington III {
337597a081SWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
347597a081SWilliam A. Kennington III 
357597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_ref(expected_event))
367597a081SWilliam A. Kennington III         .WillOnce(Return(expected_event));
377597a081SWilliam A. Kennington III     Clock<ClockId::RealTime> clock(event);
387597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_now(expected_event, CLOCK_REALTIME, testing::_))
397597a081SWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<2>(2000000), Return(0)));
407597a081SWilliam A. Kennington III     EXPECT_EQ(Clock<ClockId::RealTime>::time_point(std::chrono::seconds{2}),
417597a081SWilliam A. Kennington III               clock.now());
427597a081SWilliam A. Kennington III 
437597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event))
447597a081SWilliam A. Kennington III         .Times(2)
457597a081SWilliam A. Kennington III         .WillRepeatedly(Return(nullptr));
467597a081SWilliam A. Kennington III }
477597a081SWilliam A. Kennington III 
TEST_F(ClockTest,MoveEvent)487597a081SWilliam A. Kennington III TEST_F(ClockTest, MoveEvent)
497597a081SWilliam A. Kennington III {
507597a081SWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
517597a081SWilliam A. Kennington III 
527597a081SWilliam A. Kennington III     Clock<ClockId::Monotonic> clock(std::move(event));
537597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_now(expected_event, CLOCK_MONOTONIC, testing::_))
547597a081SWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
557597a081SWilliam A. Kennington III     EXPECT_THROW(clock.now(), SdEventError);
567597a081SWilliam A. Kennington III 
577597a081SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
587597a081SWilliam A. Kennington III }
597597a081SWilliam A. Kennington III 
607597a081SWilliam A. Kennington III } // namespace
617597a081SWilliam A. Kennington III } // namespace sdeventplus
62