blob: 6ec377040133be3586dc0147d775ae3fad9c9938 [file] [log] [blame]
William A. Kennington III8f90e282018-07-17 14:40:14 -07001#include <gmock/gmock.h>
2#include <gtest/gtest.h>
William A. Kennington III631c2462018-07-17 14:40:14 -07003#include <memory>
William A. Kennington III8f90e282018-07-17 14:40:14 -07004#include <sdeventplus/event.hpp>
5#include <sdeventplus/exception.hpp>
6#include <sdeventplus/test/sdevent.hpp>
7#include <type_traits>
8
9namespace sdeventplus
10{
11namespace
12{
13
14using testing::DoAll;
15using testing::Return;
16using testing::SetArgPointee;
17
18class EventTest : public testing::Test
19{
20 protected:
William A. Kennington III0a816c52018-07-17 14:40:14 -070021 testing::StrictMock<test::SdEventMock> mock;
22 sd_event* const expected_event = reinterpret_cast<sd_event*>(1234);
William A. Kennington III8f90e282018-07-17 14:40:14 -070023};
24
25TEST_F(EventTest, NewEventRef)
26{
27 EXPECT_CALL(mock, sd_event_ref(expected_event))
28 .WillOnce(Return(expected_event));
29 Event event(expected_event, &mock);
30
31 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
32}
33
34TEST_F(EventTest, NewEventNoRef)
35{
36 Event event(expected_event, std::false_type(), &mock);
37
38 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
39}
40
41TEST_F(EventTest, GetNewEvent)
42{
43 EXPECT_CALL(mock, sd_event_new(testing::_))
44 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
45 Event event = Event::get_new(&mock);
46
47 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
48}
49
50TEST_F(EventTest, GetNewEventFail)
51{
52 EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL));
53 EXPECT_THROW(Event::get_new(&mock), SdEventError);
54}
55
56TEST_F(EventTest, GetDefaultEvent)
57{
58 EXPECT_CALL(mock, sd_event_default(testing::_))
59 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
60 Event event = Event::get_default(&mock);
61
62 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
63}
64
65TEST_F(EventTest, GetDefaultEventFail)
66{
67 EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL));
68 EXPECT_THROW(Event::get_default(&mock), SdEventError);
69}
70
William A. Kennington III631c2462018-07-17 14:40:14 -070071class EventMethodTest : public EventTest
72{
73 protected:
74 std::unique_ptr<Event> event;
75
76 void SetUp()
77 {
78 event =
79 std::make_unique<Event>(expected_event, std::false_type(), &mock);
80 }
81
82 void TearDown()
83 {
84 EXPECT_CALL(mock, sd_event_unref(expected_event))
85 .WillOnce(Return(nullptr));
86 }
87};
88
89TEST_F(EventMethodTest, LoopSuccess)
William A. Kennington III8f90e282018-07-17 14:40:14 -070090{
91 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0));
William A. Kennington III631c2462018-07-17 14:40:14 -070092 EXPECT_EQ(0, event->loop());
William A. Kennington III8f90e282018-07-17 14:40:14 -070093}
94
William A. Kennington III631c2462018-07-17 14:40:14 -070095TEST_F(EventMethodTest, LoopUserError)
William A. Kennington III8f90e282018-07-17 14:40:14 -070096{
97 const int user_error = 10;
98 EXPECT_CALL(mock, sd_event_loop(expected_event))
99 .WillOnce(Return(user_error));
100 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
101 EXPECT_EQ(user_error,
102 Event(expected_event, std::false_type(), &mock).loop());
103}
104
William A. Kennington III631c2462018-07-17 14:40:14 -0700105TEST_F(EventMethodTest, LoopInternalError)
William A. Kennington III8f90e282018-07-17 14:40:14 -0700106{
107 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL));
William A. Kennington III631c2462018-07-17 14:40:14 -0700108 EXPECT_THROW(event->loop(), SdEventError);
109}
110
111TEST_F(EventMethodTest, GetWatchdogSuccess)
112{
113 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
114 .WillOnce(Return(0));
115 EXPECT_EQ(0, event->get_watchdog());
116
117 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
118 .WillOnce(Return(2));
119 EXPECT_EQ(2, event->get_watchdog());
120}
121
122TEST_F(EventMethodTest, GetWatchdogError)
123{
124 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
125 .WillOnce(Return(-EINVAL));
126 EXPECT_THROW(event->get_watchdog(), SdEventError);
127}
128
129TEST_F(EventMethodTest, SetWatchdogSuccess)
130{
131 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 0))
132 .WillOnce(Return(0));
133 EXPECT_EQ(0, event->set_watchdog(0));
134
135 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
136 .WillOnce(Return(2));
137 EXPECT_EQ(2, event->set_watchdog(1));
138}
139
140TEST_F(EventMethodTest, SetWatchdogError)
141{
142 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
143 .WillOnce(Return(-EINVAL));
144 EXPECT_THROW(event->set_watchdog(1), SdEventError);
William A. Kennington III8f90e282018-07-17 14:40:14 -0700145}
146
147} // namespace
148} // namespace sdeventplus