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