blob: 7149ac447c0bf9f0e78f983296bfb4ce49090caf [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);
William A. Kennington IIIbdc59012018-07-17 14:40:14 -070030 EXPECT_EQ(&mock, event.getSdEvent());
31 EXPECT_EQ(expected_event, event.get());
William A. Kennington III8f90e282018-07-17 14:40:14 -070032
33 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
34}
35
36TEST_F(EventTest, NewEventNoRef)
37{
38 Event event(expected_event, std::false_type(), &mock);
William A. Kennington IIIbdc59012018-07-17 14:40:14 -070039 EXPECT_EQ(&mock, event.getSdEvent());
40 EXPECT_EQ(expected_event, event.get());
William A. Kennington III8f90e282018-07-17 14:40:14 -070041
42 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
43}
44
45TEST_F(EventTest, GetNewEvent)
46{
47 EXPECT_CALL(mock, sd_event_new(testing::_))
48 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
49 Event event = Event::get_new(&mock);
William A. Kennington IIIbdc59012018-07-17 14:40:14 -070050 EXPECT_EQ(&mock, event.getSdEvent());
51 EXPECT_EQ(expected_event, event.get());
William A. Kennington III8f90e282018-07-17 14:40:14 -070052
53 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
54}
55
56TEST_F(EventTest, GetNewEventFail)
57{
58 EXPECT_CALL(mock, sd_event_new(testing::_)).WillOnce(Return(-EINVAL));
59 EXPECT_THROW(Event::get_new(&mock), SdEventError);
60}
61
62TEST_F(EventTest, GetDefaultEvent)
63{
64 EXPECT_CALL(mock, sd_event_default(testing::_))
65 .WillOnce(DoAll(SetArgPointee<0>(expected_event), Return(0)));
66 Event event = Event::get_default(&mock);
William A. Kennington IIIbdc59012018-07-17 14:40:14 -070067 EXPECT_EQ(&mock, event.getSdEvent());
68 EXPECT_EQ(expected_event, event.get());
William A. Kennington III8f90e282018-07-17 14:40:14 -070069
70 EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
71}
72
73TEST_F(EventTest, GetDefaultEventFail)
74{
75 EXPECT_CALL(mock, sd_event_default(testing::_)).WillOnce(Return(-EINVAL));
76 EXPECT_THROW(Event::get_default(&mock), SdEventError);
77}
78
William A. Kennington III631c2462018-07-17 14:40:14 -070079class EventMethodTest : public EventTest
80{
81 protected:
82 std::unique_ptr<Event> event;
83
84 void SetUp()
85 {
86 event =
87 std::make_unique<Event>(expected_event, std::false_type(), &mock);
88 }
89
90 void TearDown()
91 {
92 EXPECT_CALL(mock, sd_event_unref(expected_event))
93 .WillOnce(Return(nullptr));
94 }
95};
96
97TEST_F(EventMethodTest, LoopSuccess)
William A. Kennington III8f90e282018-07-17 14:40:14 -070098{
99 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(0));
William A. Kennington III631c2462018-07-17 14:40:14 -0700100 EXPECT_EQ(0, event->loop());
William A. Kennington III8f90e282018-07-17 14:40:14 -0700101}
102
William A. Kennington III631c2462018-07-17 14:40:14 -0700103TEST_F(EventMethodTest, LoopUserError)
William A. Kennington III8f90e282018-07-17 14:40:14 -0700104{
105 const int user_error = 10;
106 EXPECT_CALL(mock, sd_event_loop(expected_event))
107 .WillOnce(Return(user_error));
William A. Kennington III6364dd92018-07-17 14:40:14 -0700108 EXPECT_EQ(user_error, event->loop());
William A. Kennington III8f90e282018-07-17 14:40:14 -0700109}
110
William A. Kennington III631c2462018-07-17 14:40:14 -0700111TEST_F(EventMethodTest, LoopInternalError)
William A. Kennington III8f90e282018-07-17 14:40:14 -0700112{
113 EXPECT_CALL(mock, sd_event_loop(expected_event)).WillOnce(Return(-EINVAL));
William A. Kennington III631c2462018-07-17 14:40:14 -0700114 EXPECT_THROW(event->loop(), SdEventError);
115}
116
117TEST_F(EventMethodTest, GetWatchdogSuccess)
118{
119 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
120 .WillOnce(Return(0));
121 EXPECT_EQ(0, event->get_watchdog());
122
123 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
124 .WillOnce(Return(2));
125 EXPECT_EQ(2, event->get_watchdog());
126}
127
128TEST_F(EventMethodTest, GetWatchdogError)
129{
130 EXPECT_CALL(mock, sd_event_get_watchdog(expected_event))
131 .WillOnce(Return(-EINVAL));
132 EXPECT_THROW(event->get_watchdog(), SdEventError);
133}
134
135TEST_F(EventMethodTest, SetWatchdogSuccess)
136{
137 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 0))
138 .WillOnce(Return(0));
139 EXPECT_EQ(0, event->set_watchdog(0));
140
141 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
142 .WillOnce(Return(2));
143 EXPECT_EQ(2, event->set_watchdog(1));
144}
145
146TEST_F(EventMethodTest, SetWatchdogError)
147{
148 EXPECT_CALL(mock, sd_event_set_watchdog(expected_event, 1))
149 .WillOnce(Return(-EINVAL));
150 EXPECT_THROW(event->set_watchdog(1), SdEventError);
William A. Kennington III8f90e282018-07-17 14:40:14 -0700151}
152
153} // namespace
154} // namespace sdeventplus