xref: /openbmc/sdeventplus/test/event.cpp (revision 8f90e28b)
1*8f90e28bSWilliam A. Kennington III #include <gmock/gmock.h>
2*8f90e28bSWilliam A. Kennington III #include <gtest/gtest.h>
3*8f90e28bSWilliam A. Kennington III #include <sdeventplus/event.hpp>
4*8f90e28bSWilliam A. Kennington III #include <sdeventplus/exception.hpp>
5*8f90e28bSWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp>
6*8f90e28bSWilliam A. Kennington III #include <type_traits>
7*8f90e28bSWilliam A. Kennington III 
8*8f90e28bSWilliam A. Kennington III namespace sdeventplus
9*8f90e28bSWilliam A. Kennington III {
10*8f90e28bSWilliam A. Kennington III namespace
11*8f90e28bSWilliam A. Kennington III {
12*8f90e28bSWilliam A. Kennington III 
13*8f90e28bSWilliam A. Kennington III using testing::DoAll;
14*8f90e28bSWilliam A. Kennington III using testing::Return;
15*8f90e28bSWilliam A. Kennington III using testing::SetArgPointee;
16*8f90e28bSWilliam A. Kennington III 
17*8f90e28bSWilliam A. Kennington III class EventTest : public testing::Test
18*8f90e28bSWilliam A. Kennington III {
19*8f90e28bSWilliam A. Kennington III   protected:
20*8f90e28bSWilliam A. Kennington III     testing::StrictMock<SdEventMock> mock;
21*8f90e28bSWilliam A. Kennington III     sd_event *const expected_event = reinterpret_cast<sd_event *>(1234);
22*8f90e28bSWilliam A. Kennington III };
23*8f90e28bSWilliam A. Kennington III 
24*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventRef)
25*8f90e28bSWilliam A. Kennington III {
26*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_ref(expected_event))
27*8f90e28bSWilliam A. Kennington III         .WillOnce(Return(expected_event));
28*8f90e28bSWilliam A. Kennington III     Event event(expected_event, &mock);
29*8f90e28bSWilliam A. Kennington III 
30*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
31*8f90e28bSWilliam A. Kennington III }
32*8f90e28bSWilliam A. Kennington III 
33*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, NewEventNoRef)
34*8f90e28bSWilliam A. Kennington III {
35*8f90e28bSWilliam A. Kennington III     Event event(expected_event, std::false_type(), &mock);
36*8f90e28bSWilliam A. Kennington III 
37*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
38*8f90e28bSWilliam A. Kennington III }
39*8f90e28bSWilliam A. Kennington III 
40*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEvent)
41*8f90e28bSWilliam A. Kennington III {
42*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_new(testing::_))
43*8f90e28bSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
44*8f90e28bSWilliam A. Kennington III     Event event = Event::get_new(&mock);
45*8f90e28bSWilliam A. Kennington III 
46*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
47*8f90e28bSWilliam A. Kennington III }
48*8f90e28bSWilliam A. Kennington III 
49*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetNewEventFail)
50*8f90e28bSWilliam A. Kennington III {
51*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL));
52*8f90e28bSWilliam A. Kennington III     EXPECT_THROW(Event::get_new(&mock), SdEventError);
53*8f90e28bSWilliam A. Kennington III }
54*8f90e28bSWilliam A. Kennington III 
55*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEvent)
56*8f90e28bSWilliam A. Kennington III {
57*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_default(testing::_))
58*8f90e28bSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
59*8f90e28bSWilliam A. Kennington III     Event event = Event::get_default(&mock);
60*8f90e28bSWilliam A. Kennington III 
61*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
62*8f90e28bSWilliam A. Kennington III }
63*8f90e28bSWilliam A. Kennington III 
64*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, GetDefaultEventFail)
65*8f90e28bSWilliam A. Kennington III {
66*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL));
67*8f90e28bSWilliam A. Kennington III     EXPECT_THROW(Event::get_default(&mock), SdEventError);
68*8f90e28bSWilliam A. Kennington III }
69*8f90e28bSWilliam A. Kennington III 
70*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, LoopSuccess)
71*8f90e28bSWilliam A. Kennington III {
72*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0));
73*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
74*8f90e28bSWilliam A. Kennington III     EXPECT_EQ(0, Event(expected_event, std::false_type(), &mock).loop());
75*8f90e28bSWilliam A. Kennington III }
76*8f90e28bSWilliam A. Kennington III 
77*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, LoopUserError)
78*8f90e28bSWilliam A. Kennington III {
79*8f90e28bSWilliam A. Kennington III     const int user_error = 10;
80*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event))
81*8f90e28bSWilliam A. Kennington III         .WillOnce(Return(user_error));
82*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
83*8f90e28bSWilliam A. Kennington III     EXPECT_EQ(user_error,
84*8f90e28bSWilliam A. Kennington III               Event(expected_event, std::false_type(), &mock).loop());
85*8f90e28bSWilliam A. Kennington III }
86*8f90e28bSWilliam A. Kennington III 
87*8f90e28bSWilliam A. Kennington III TEST_F(EventTest, LoopInternalError)
88*8f90e28bSWilliam A. Kennington III {
89*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL));
90*8f90e28bSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
91*8f90e28bSWilliam A. Kennington III     EXPECT_THROW(Event(expected_event, std::false_type(), &mock).loop(),
92*8f90e28bSWilliam A. Kennington III                  SdEventError);
93*8f90e28bSWilliam A. Kennington III }
94*8f90e28bSWilliam A. Kennington III 
95*8f90e28bSWilliam A. Kennington III } // namespace
96*8f90e28bSWilliam A. Kennington III } // namespace sdeventplus
97