blob: 69ae8e2f8df26897f29d4a64151d774b69f5958f [file] [log] [blame]
William A. Kennington III48c42752018-07-17 14:40:14 -07001#include <cerrno>
William A. Kennington III0a816c52018-07-17 14:40:14 -07002#include <gmock/gmock.h>
3#include <gtest/gtest.h>
William A. Kennington III715c72f2018-07-17 14:40:14 -07004#include <memory>
5#include <sdeventplus/event.hpp>
William A. Kennington III65db8632018-07-17 14:40:14 -07006#include <sdeventplus/exception.hpp>
William A. Kennington III0a816c52018-07-17 14:40:14 -07007#include <sdeventplus/internal/sdevent.hpp>
8#include <sdeventplus/source/base.hpp>
9#include <sdeventplus/test/sdevent.hpp>
William A. Kennington III65db8632018-07-17 14:40:14 -070010#include <string>
William A. Kennington III48c42752018-07-17 14:40:14 -070011#include <system_error>
William A. Kennington III715c72f2018-07-17 14:40:14 -070012#include <systemd/sd-event.h>
William A. Kennington III0a816c52018-07-17 14:40:14 -070013#include <type_traits>
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -070014#include <utility>
William A. Kennington III0a816c52018-07-17 14:40:14 -070015
16namespace sdeventplus
17{
18namespace source
19{
20namespace
21{
22
William A. Kennington III65db8632018-07-17 14:40:14 -070023using testing::DoAll;
William A. Kennington III0a816c52018-07-17 14:40:14 -070024using testing::Return;
William A. Kennington III48c42752018-07-17 14:40:14 -070025using testing::SaveArg;
William A. Kennington III65db8632018-07-17 14:40:14 -070026using testing::SetArgPointee;
William A. Kennington III0a816c52018-07-17 14:40:14 -070027
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070028using UniqueEvent = std::unique_ptr<Event, std::function<void(Event*)>>;
29
William A. Kennington III0a816c52018-07-17 14:40:14 -070030class BaseImpl : public Base
31{
32 public:
William A. Kennington III715c72f2018-07-17 14:40:14 -070033 BaseImpl(const Event& event, sd_event_source* source) : Base(event, source)
William A. Kennington III0a816c52018-07-17 14:40:14 -070034 {
35 }
William A. Kennington III715c72f2018-07-17 14:40:14 -070036 BaseImpl(const Event& event, sd_event_source* source, std::false_type) :
37 Base(event, source, std::false_type())
William A. Kennington III0a816c52018-07-17 14:40:14 -070038 {
39 }
40};
41
42class BaseTest : public testing::Test
43{
44 protected:
45 testing::StrictMock<test::SdEventMock> mock;
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070046 sd_event_source* const expected_source =
47 reinterpret_cast<sd_event_source*>(1234);
48 sd_event* const expected_event = reinterpret_cast<sd_event*>(2345);
49 UniqueEvent event = make_event(expected_event);
William A. Kennington III715c72f2018-07-17 14:40:14 -070050
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070051 UniqueEvent make_event(sd_event* event)
William A. Kennington III715c72f2018-07-17 14:40:14 -070052 {
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070053 auto deleter = [this, event](Event* e) {
54 EXPECT_CALL(this->mock, sd_event_unref(event))
55 .WillOnce(Return(nullptr));
56 delete e;
57 };
58 return UniqueEvent(new Event(event, std::false_type(), &mock), deleter);
William A. Kennington III715c72f2018-07-17 14:40:14 -070059 }
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070060
61 // Using a unique_ptr to make sure we don't get any superfluous moves or
62 // copies.
63 std::unique_ptr<BaseImpl> make_base(const Event& event,
64 sd_event_source* source)
William A. Kennington III715c72f2018-07-17 14:40:14 -070065 {
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070066 EXPECT_CALL(mock, sd_event_ref(event.get()))
67 .WillOnce(Return(event.get()));
William A. Kennington III2d943ea2018-07-17 14:40:14 -070068 void* userdata;
69 EXPECT_CALL(mock, sd_event_source_set_userdata(source, testing::_))
70 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070071 auto ret = std::make_unique<BaseImpl>(event, source, std::false_type());
William A. Kennington III2d943ea2018-07-17 14:40:14 -070072 EXPECT_EQ(ret.get(), userdata);
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070073 EXPECT_EQ(source, ret->get());
74 EXPECT_NE(&event, &ret->get_event());
75 EXPECT_EQ(event.get(), ret->get_event().get());
76 EXPECT_FALSE(ret->get_prepare());
77 return ret;
78 }
79
80 void set_prepare_placeholder(Base& base)
81 {
82 EXPECT_CALL(mock, sd_event_source_set_prepare(base.get(), testing::_))
83 .WillOnce(Return(0));
84 base.set_prepare([](Base&) {});
85 EXPECT_TRUE(base.get_prepare());
86 }
87
88 void empty_base(BaseImpl&& other)
89 {
William A. Kennington III2d943ea2018-07-17 14:40:14 -070090 void* userdata;
91 EXPECT_CALL(mock, sd_event_source_set_userdata(other.get(), testing::_))
92 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070093 BaseImpl mover(std::move(other));
William A. Kennington III2d943ea2018-07-17 14:40:14 -070094 EXPECT_EQ(&mover, userdata);
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -070095 EXPECT_EQ(nullptr, other.get());
96 EXPECT_EQ(nullptr, other.get_event().get());
97 EXPECT_FALSE(other.get_prepare());
98
99 expect_base_destruct(mover.get_event(), mover.get());
100 }
101
102 void expect_base_destruct(const Event& event, sd_event_source* source)
103 {
104 {
105 testing::InSequence seq;
106 EXPECT_CALL(mock, sd_event_source_set_enabled(source, SD_EVENT_OFF))
107 .WillOnce(Return(0));
108 EXPECT_CALL(mock, sd_event_source_unref(source))
109 .WillOnce(Return(nullptr));
110 }
111 EXPECT_CALL(mock, sd_event_unref(event.get()))
William A. Kennington III715c72f2018-07-17 14:40:14 -0700112 .WillOnce(Return(nullptr));
William A. Kennington III715c72f2018-07-17 14:40:14 -0700113 }
William A. Kennington III0a816c52018-07-17 14:40:14 -0700114};
115
116TEST_F(BaseTest, NewBaseRef)
117{
William A. Kennington III715c72f2018-07-17 14:40:14 -0700118 EXPECT_CALL(mock, sd_event_ref(expected_event))
119 .WillOnce(Return(expected_event));
William A. Kennington III0a816c52018-07-17 14:40:14 -0700120 EXPECT_CALL(mock, sd_event_source_ref(expected_source))
121 .WillOnce(Return(expected_source));
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700122 void* userdata;
123 EXPECT_CALL(mock, sd_event_source_set_userdata(expected_source, testing::_))
124 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington III715c72f2018-07-17 14:40:14 -0700125 BaseImpl source(*event, expected_source);
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700126 EXPECT_EQ(&source, userdata);
William A. Kennington III4863b962018-07-17 14:40:14 -0700127 EXPECT_EQ(expected_source, source.get());
128 EXPECT_NE(event.get(), &source.get_event());
129 EXPECT_EQ(expected_event, source.get_event().get());
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700130 EXPECT_FALSE(source.get_prepare());
William A. Kennington III0a816c52018-07-17 14:40:14 -0700131
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700132 expect_base_destruct(*event, expected_source);
William A. Kennington III0a816c52018-07-17 14:40:14 -0700133}
134
135TEST_F(BaseTest, NewBaseNoRef)
136{
William A. Kennington III715c72f2018-07-17 14:40:14 -0700137 EXPECT_CALL(mock, sd_event_ref(expected_event))
138 .WillOnce(Return(expected_event));
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700139 void* userdata;
140 EXPECT_CALL(mock, sd_event_source_set_userdata(expected_source, testing::_))
141 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington III715c72f2018-07-17 14:40:14 -0700142 BaseImpl source(*event, expected_source, std::false_type());
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700143 EXPECT_EQ(&source, userdata);
William A. Kennington III4863b962018-07-17 14:40:14 -0700144 EXPECT_EQ(expected_source, source.get());
145 EXPECT_NE(event.get(), &source.get_event());
146 EXPECT_EQ(expected_event, source.get_event().get());
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700147 EXPECT_FALSE(source.get_prepare());
William A. Kennington III0a816c52018-07-17 14:40:14 -0700148
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700149 expect_base_destruct(*event, expected_source);
William A. Kennington III7c24e052018-07-17 14:40:14 -0700150}
151
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700152TEST_F(BaseTest, MoveConstruct)
153{
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700154 std::unique_ptr<BaseImpl> source1 = make_base(*event, expected_source);
155 set_prepare_placeholder(*source1);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700156
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700157 void* userdata;
158 EXPECT_CALL(mock, sd_event_source_set_userdata(expected_source, testing::_))
159 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700160 BaseImpl source2(std::move(*source1));
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700161 EXPECT_EQ(&source2, userdata);
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700162 EXPECT_EQ(nullptr, source1->get());
163 EXPECT_EQ(nullptr, source1->get_event().get());
164 EXPECT_FALSE(source1->get_prepare());
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700165 EXPECT_EQ(expected_source, source2.get());
166 EXPECT_EQ(expected_event, source2.get_event().get());
167 EXPECT_TRUE(source2.get_prepare());
168
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700169 expect_base_destruct(*event, expected_source);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700170}
171
172TEST_F(BaseTest, MoveAssignSelf)
173{
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700174 std::unique_ptr<BaseImpl> source1 = make_base(*event, expected_source);
175 set_prepare_placeholder(*source1);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700176
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700177 *source1 = std::move(*source1);
178 EXPECT_EQ(expected_source, source1->get());
179 EXPECT_EQ(expected_event, source1->get_event().get());
180 EXPECT_TRUE(source1->get_prepare());
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700181
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700182 expect_base_destruct(*event, expected_source);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700183}
184
185TEST_F(BaseTest, MoveAssignEmpty)
186{
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700187 std::unique_ptr<BaseImpl> source1 = make_base(*event, expected_source);
188 set_prepare_placeholder(*source1);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700189
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700190 std::unique_ptr<BaseImpl> source2 = make_base(*event, expected_source);
191 empty_base(std::move(*source2));
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700192
193 {
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700194 void* userdata;
195 EXPECT_CALL(mock,
196 sd_event_source_set_userdata(expected_source, testing::_))
197 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700198 *source2 = std::move(*source1);
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700199 EXPECT_EQ(source2.get(), userdata);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700200 }
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700201 EXPECT_EQ(nullptr, source1->get());
202 EXPECT_EQ(nullptr, source1->get_event().get());
203 EXPECT_FALSE(source1->get_prepare());
204 EXPECT_EQ(expected_source, source2->get());
205 EXPECT_EQ(expected_event, source2->get_event().get());
206 EXPECT_TRUE(source2->get_prepare());
207
208 // Make sure source1 is deleted to ensure it isn't holding a reference
209 source1.reset();
210 expect_base_destruct(*event, expected_source);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700211}
212
213TEST_F(BaseTest, MoveAssignExisting)
214{
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700215 sd_event_source* const expected_source2 =
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700216 reinterpret_cast<sd_event_source*>(3456);
217 sd_event* const expected_event2 = reinterpret_cast<sd_event*>(4567);
218
219 std::unique_ptr<BaseImpl> source1 = make_base(*event, expected_source);
220 set_prepare_placeholder(*source1);
221
222 UniqueEvent event2 = make_event(expected_event2);
223 std::unique_ptr<BaseImpl> source2 = make_base(*event2, expected_source2);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700224
225 {
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700226 expect_base_destruct(*event2, expected_source2);
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700227 void* userdata;
228 EXPECT_CALL(mock,
229 sd_event_source_set_userdata(expected_source, testing::_))
230 .WillOnce(DoAll(SaveArg<1>(&userdata), Return(nullptr)));
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700231 *source2 = std::move(*source1);
William A. Kennington III2d943ea2018-07-17 14:40:14 -0700232 EXPECT_EQ(source2.get(), userdata);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700233 }
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700234 EXPECT_EQ(nullptr, source1->get());
235 EXPECT_EQ(nullptr, source1->get_event().get());
236 EXPECT_FALSE(source1->get_prepare());
237 EXPECT_EQ(expected_source, source2->get());
238 EXPECT_EQ(expected_event, source2->get_event().get());
239 EXPECT_TRUE(source2->get_prepare());
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700240
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700241 // Make sure source1 is deleted to ensure it isn't holding a reference
242 source1.reset();
243 expect_base_destruct(*event, expected_source);
William A. Kennington IIIcc6b12b2018-07-17 14:40:14 -0700244}
245
William A. Kennington III65db8632018-07-17 14:40:14 -0700246class BaseMethodTest : public BaseTest
247{
248 protected:
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700249 std::unique_ptr<BaseImpl> base = make_base(*event, expected_source);
William A. Kennington III65db8632018-07-17 14:40:14 -0700250
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700251 void TearDown()
William A. Kennington III65db8632018-07-17 14:40:14 -0700252 {
William A. Kennington IIIe3e1df02018-07-17 14:40:14 -0700253 expect_base_destruct(base->get_event(), base->get());
William A. Kennington III715c72f2018-07-17 14:40:14 -0700254 base.reset();
William A. Kennington III65db8632018-07-17 14:40:14 -0700255 }
256};
257
258TEST_F(BaseMethodTest, GetDescriptionSuccess)
259{
260 const char* expected = "test_desc";
261 EXPECT_CALL(mock,
262 sd_event_source_get_description(expected_source, testing::_))
263 .WillOnce(DoAll(SetArgPointee<1>(expected), Return(0)));
264 // Intentionally comparing pointers to make sure no copying is happening
265 EXPECT_EQ(expected, base->get_description());
266}
267
268TEST_F(BaseMethodTest, GetDescriptionError)
269{
270 EXPECT_CALL(mock,
271 sd_event_source_get_description(expected_source, testing::_))
272 .WillOnce(Return(-EINVAL));
273 EXPECT_THROW(base->get_description(), SdEventError);
274}
275
276TEST_F(BaseMethodTest, SetDescriptionSuccess)
277{
278 const char* expected = "test desc";
279 // Intentionally comparing pointers to make sure no copying is happening
280 EXPECT_CALL(mock,
281 sd_event_source_set_description(expected_source, expected))
282 .WillOnce(Return(0));
283 base->set_description(expected);
284}
285
286TEST_F(BaseMethodTest, SetDescriptionError)
287{
288 const char* expected = "test desc";
289 // Intentionally comparing pointers to make sure no copying is happening
290 EXPECT_CALL(mock,
291 sd_event_source_set_description(expected_source, expected))
292 .WillOnce(Return(-EINVAL));
293 EXPECT_THROW(base->set_description(expected), SdEventError);
294}
295
William A. Kennington III48c42752018-07-17 14:40:14 -0700296TEST_F(BaseMethodTest, SetPrepareCallback)
297{
298 bool completed = false;
299 Base::Callback callback = [&completed](Base&) { completed = true; };
300 sd_event_handler_t event_handler;
301 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
302 .WillOnce(DoAll(SaveArg<1>(&event_handler), Return(0)));
303 base->set_prepare(std::move(callback));
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700304 EXPECT_TRUE(base->get_prepare());
William A. Kennington III48c42752018-07-17 14:40:14 -0700305 EXPECT_FALSE(callback);
306 EXPECT_FALSE(completed);
307
308 EXPECT_EQ(0, event_handler(nullptr, base.get()));
309 EXPECT_TRUE(completed);
310}
311
312TEST_F(BaseMethodTest, SetPrepareCallbackNoUserdata)
313{
314 Base::Callback callback = [](Base&) {};
315 sd_event_handler_t event_handler;
316 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
317 .WillOnce(DoAll(SaveArg<1>(&event_handler), Return(0)));
318 base->set_prepare(std::move(callback));
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700319 EXPECT_TRUE(base->get_prepare());
William A. Kennington III48c42752018-07-17 14:40:14 -0700320 EXPECT_FALSE(callback);
321
322 EXPECT_EQ(-EINVAL, event_handler(nullptr, nullptr));
323}
324
325TEST_F(BaseMethodTest, SetPrepareNull)
326{
327 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, nullptr))
328 .WillOnce(Return(0));
329 base->set_prepare(nullptr);
330 EXPECT_EQ(-ENOSYS, base->prepareCallback());
331}
332
333TEST_F(BaseMethodTest, SetPrepareSystemError)
334{
335 Base::Callback callback = [](Base&) {
336 throw std::system_error(EBUSY, std::generic_category());
337 };
338 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
339 .WillOnce(Return(0));
340 base->set_prepare(std::move(callback));
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700341 EXPECT_TRUE(base->get_prepare());
William A. Kennington III48c42752018-07-17 14:40:14 -0700342 EXPECT_FALSE(callback);
343 EXPECT_EQ(-EBUSY, base->prepareCallback());
344}
345
346TEST_F(BaseMethodTest, SetPrepareUnknownException)
347{
348 Base::Callback callback = [](Base&) { throw static_cast<int>(1); };
349 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
350 .WillOnce(Return(0));
351 base->set_prepare(std::move(callback));
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700352 EXPECT_TRUE(base->get_prepare());
William A. Kennington III48c42752018-07-17 14:40:14 -0700353 EXPECT_FALSE(callback);
354 EXPECT_EQ(-ENOSYS, base->prepareCallback());
355}
356
357TEST_F(BaseMethodTest, SetPrepareError)
358{
359 Base::Callback callback = [](Base&) {};
360 EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_))
361 .WillOnce(Return(-EINVAL));
362 EXPECT_THROW(base->set_prepare(std::move(callback)), SdEventError);
William A. Kennington IIIf5285c72018-07-17 14:40:14 -0700363 EXPECT_FALSE(base->get_prepare());
William A. Kennington III48c42752018-07-17 14:40:14 -0700364 EXPECT_TRUE(callback);
365 EXPECT_EQ(-ENOSYS, base->prepareCallback());
366}
367
William A. Kennington III65db8632018-07-17 14:40:14 -0700368TEST_F(BaseMethodTest, GetPendingSuccess)
369{
370 EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
371 .WillOnce(Return(0));
372 EXPECT_EQ(0, base->get_pending());
373 EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
374 .WillOnce(Return(4));
375 EXPECT_EQ(4, base->get_pending());
376}
377
378TEST_F(BaseMethodTest, GetPendingError)
379{
380 EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
381 .WillOnce(Return(-EINVAL));
382 EXPECT_THROW(base->get_pending(), SdEventError);
383}
384
385TEST_F(BaseMethodTest, GetPrioritySuccess)
386{
387 EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_))
388 .WillOnce(DoAll(SetArgPointee<1>(1024), Return(0)));
389 EXPECT_EQ(1024, base->get_priority());
390}
391
392TEST_F(BaseMethodTest, GetPriorityError)
393{
394 EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_))
395 .WillOnce(Return(-EINVAL));
396 EXPECT_THROW(base->get_priority(), SdEventError);
397}
398
399TEST_F(BaseMethodTest, SetPrioritySuccess)
400{
401 EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024))
402 .WillOnce(Return(0));
403 base->set_priority(1024);
404}
405
406TEST_F(BaseMethodTest, SetPriorityError)
407{
408 EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024))
409 .WillOnce(Return(-EINVAL));
410 EXPECT_THROW(base->set_priority(1024), SdEventError);
411}
412
413TEST_F(BaseMethodTest, GetEnabledSuccess)
414{
415 EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_))
416 .WillOnce(DoAll(SetArgPointee<1>(SD_EVENT_ON), Return(0)));
417 EXPECT_EQ(SD_EVENT_ON, base->get_enabled());
418}
419
420TEST_F(BaseMethodTest, GetEnabledError)
421{
422 EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_))
423 .WillOnce(Return(-EINVAL));
424 EXPECT_THROW(base->get_enabled(), SdEventError);
425}
426
427TEST_F(BaseMethodTest, SetEnabledSuccess)
428{
429 EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
430 .WillOnce(Return(0));
431 base->set_enabled(SD_EVENT_ON);
432}
433
434TEST_F(BaseMethodTest, SetEnabledError)
435{
436 EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
437 .WillOnce(Return(-EINVAL));
438 EXPECT_THROW(base->set_enabled(SD_EVENT_ON), SdEventError);
William A. Kennington III0a816c52018-07-17 14:40:14 -0700439}
440
441} // namespace
442} // namespace source
443} // namespace sdeventplus