xref: /openbmc/sdeventplus/test/event.cpp (revision 0a816c5d)
18f90e28bSWilliam A. Kennington III #include <gmock/gmock.h>
28f90e28bSWilliam A. Kennington III #include <gtest/gtest.h>
3631c2460SWilliam A. Kennington III #include <memory>
48f90e28bSWilliam A. Kennington III #include <sdeventplus/event.hpp>
58f90e28bSWilliam A. Kennington III #include <sdeventplus/exception.hpp>
68f90e28bSWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp>
78f90e28bSWilliam A. Kennington III #include <type_traits>
88f90e28bSWilliam A. Kennington III 
98f90e28bSWilliam A. Kennington III namespace sdeventplus
108f90e28bSWilliam A. Kennington III {
118f90e28bSWilliam A. Kennington III namespace
128f90e28bSWilliam A. Kennington III {
138f90e28bSWilliam A. Kennington III 
148f90e28bSWilliam A. Kennington III using testing::DoAll;
158f90e28bSWilliam A. Kennington III using testing::Return;
168f90e28bSWilliam A. Kennington III using testing::SetArgPointee;
178f90e28bSWilliam A. Kennington III 
188f90e28bSWilliam A. Kennington III class EventTest : public testing::Test
198f90e28bSWilliam A. Kennington III {
208f90e28bSWilliam A. Kennington III   protected:
21*0a816c5dSWilliam A. Kennington III     testing::StrictMock<test::SdEventMock> mock;
228f90e28bSWilliam A. Kennington III     sd_event* const expected_event = reinterpret_cast<sd_event*>(1234);
238f90e28bSWilliam A. Kennington III };
248f90e28bSWilliam A. Kennington III 
258f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventRef)
268f90e28bSWilliam A. Kennington III {
278f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_ref(expected_event))
288f90e28bSWilliam A. Kennington III         .WillOnce(Return(expected_event));
298f90e28bSWilliam A. Kennington III     Event event(expected_event, &mock);
308f90e28bSWilliam A. Kennington III 
318f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
328f90e28bSWilliam A. Kennington III }
338f90e28bSWilliam A. Kennington III 
348f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventNoRef)
358f90e28bSWilliam A. Kennington III {
368f90e28bSWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
378f90e28bSWilliam A. Kennington III 
388f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
398f90e28bSWilliam A. Kennington III }
408f90e28bSWilliam A. Kennington III 
418f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEvent)
428f90e28bSWilliam A. Kennington III {
438f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_new(testing::_))
448f90e28bSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
458f90e28bSWilliam A. Kennington III     Event event = Event::get_new(&mock);
468f90e28bSWilliam A. Kennington III 
478f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
488f90e28bSWilliam A. Kennington III }
498f90e28bSWilliam A. Kennington III 
508f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEventFail)
518f90e28bSWilliam A. Kennington III {
528f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL));
538f90e28bSWilliam A. Kennington III     EXPECT_THROW(Event::get_new(&mock), SdEventError);
548f90e28bSWilliam A. Kennington III }
558f90e28bSWilliam A. Kennington III 
568f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEvent)
578f90e28bSWilliam A. Kennington III {
588f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_default(testing::_))
598f90e28bSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
608f90e28bSWilliam A. Kennington III     Event event = Event::get_default(&mock);
618f90e28bSWilliam A. Kennington III 
628f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
638f90e28bSWilliam A. Kennington III }
648f90e28bSWilliam A. Kennington III 
658f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEventFail)
668f90e28bSWilliam A. Kennington III {
678f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL));
688f90e28bSWilliam A. Kennington III     EXPECT_THROW(Event::get_default(&mock), SdEventError);
698f90e28bSWilliam A. Kennington III }
708f90e28bSWilliam A. Kennington III 
71631c2460SWilliam A. Kennington III class EventMethodTest : public EventTest
728f90e28bSWilliam A. Kennington III {
73631c2460SWilliam A. Kennington III   protected:
74631c2460SWilliam A. Kennington III     std::unique_ptr<Event> event;
75631c2460SWilliam A. Kennington III 
76631c2460SWilliam A. Kennington III     void SetUp()
77631c2460SWilliam A. Kennington III     {
78631c2460SWilliam A. Kennington III         event =
79631c2460SWilliam A. Kennington III             std::make_unique<Event>(expected_event, std::false_type(), &mock);
808f90e28bSWilliam A. Kennington III     }
818f90e28bSWilliam A. Kennington III 
82631c2460SWilliam A. Kennington III     void TearDown()
83631c2460SWilliam A. Kennington III     {
84631c2460SWilliam A. Kennington III         EXPECT_CALL(mock, sd_event_unref(expected_event))
85631c2460SWilliam A. Kennington III             .WillOnce(Return(nullptr));
86631c2460SWilliam A. Kennington III     }
87631c2460SWilliam A. Kennington III };
88631c2460SWilliam A. Kennington III 
89631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopSuccess)
90631c2460SWilliam A. Kennington III {
91631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0));
92631c2460SWilliam A. Kennington III     EXPECT_EQ(0, event->loop());
93631c2460SWilliam A. Kennington III }
94631c2460SWilliam A. Kennington III 
95631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopUserError)
968f90e28bSWilliam A. Kennington III {
978f90e28bSWilliam A. Kennington III     const int user_error = 10;
988f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event))
998f90e28bSWilliam A. Kennington III         .WillOnce(Return(user_error));
1008f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
1018f90e28bSWilliam A. Kennington III     EXPECT_EQ(user_error,
1028f90e28bSWilliam A. Kennington III               Event(expected_event, std::false_type(), &mock).loop());
1038f90e28bSWilliam A. Kennington III }
1048f90e28bSWilliam A. Kennington III 
105631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, LoopInternalError)
1068f90e28bSWilliam A. Kennington III {
1078f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL));
108631c2460SWilliam A. Kennington III     EXPECT_THROW(event->loop(), SdEventError);
109631c2460SWilliam A. Kennington III }
110631c2460SWilliam A. Kennington III 
111631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, GetWatchdogSuccess)
112631c2460SWilliam A. Kennington III {
113631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
114631c2460SWilliam A. Kennington III         .WillOnce(Return(0));
115631c2460SWilliam A. Kennington III     EXPECT_EQ(0, event->get_watchdog());
116631c2460SWilliam A. Kennington III 
117631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
118631c2460SWilliam A. Kennington III         .WillOnce(Return(2));
119631c2460SWilliam A. Kennington III     EXPECT_EQ(2, event->get_watchdog());
120631c2460SWilliam A. Kennington III }
121631c2460SWilliam A. Kennington III 
122631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, GetWatchdogError)
123631c2460SWilliam A. Kennington III {
124631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
125631c2460SWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
126631c2460SWilliam A. Kennington III     EXPECT_THROW(event->get_watchdog(), SdEventError);
127631c2460SWilliam A. Kennington III }
128631c2460SWilliam A. Kennington III 
129631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, SetWatchdogSuccess)
130631c2460SWilliam A. Kennington III {
131631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 0))
132631c2460SWilliam A. Kennington III         .WillOnce(Return(0));
133631c2460SWilliam A. Kennington III     EXPECT_EQ(0, event->set_watchdog(0));
134631c2460SWilliam A. Kennington III 
135631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
136631c2460SWilliam A. Kennington III         .WillOnce(Return(2));
137631c2460SWilliam A. Kennington III     EXPECT_EQ(2, event->set_watchdog(1));
138631c2460SWilliam A. Kennington III }
139631c2460SWilliam A. Kennington III 
140631c2460SWilliam A. Kennington III TEST_F(EventMethodTest, SetWatchdogError)
141631c2460SWilliam A. Kennington III {
142631c2460SWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
143631c2460SWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
144631c2460SWilliam A. Kennington III     EXPECT_THROW(event->set_watchdog(1), SdEventError);
1458f90e28bSWilliam A. Kennington III }
1468f90e28bSWilliam A. Kennington III 
1478f90e28bSWilliam A. Kennington III } // namespace
1488f90e28bSWilliam A. Kennington III } // namespace sdeventplus
149