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