xref: /openbmc/sdeventplus/test/utility/sdbus.cpp (revision a8c11e3c)
1a4c76ea9SWilliam A. Kennington III #include <sdeventplus/source/event.hpp>
2a4c76ea9SWilliam A. Kennington III #include <sdeventplus/utility/sdbus.hpp>
3a4c76ea9SWilliam A. Kennington III 
4*a8c11e3cSPatrick Williams #include <gtest/gtest.h>
5*a8c11e3cSPatrick Williams 
6a4c76ea9SWilliam A. Kennington III namespace sdeventplus::utility
7a4c76ea9SWilliam A. Kennington III {
8a4c76ea9SWilliam A. Kennington III 
9a4c76ea9SWilliam A. Kennington III struct LoopWithBus : testing::Test
10a4c76ea9SWilliam A. Kennington III {
11a4c76ea9SWilliam A. Kennington III     Event event = Event::get_new();
12a4c76ea9SWilliam A. Kennington III     sdbusplus::bus_t bus = sdbusplus::bus::new_bus();
13a4c76ea9SWilliam A. Kennington III };
14a4c76ea9SWilliam A. Kennington III 
TEST_F(LoopWithBus,ImmediateExit)15a4c76ea9SWilliam A. Kennington III TEST_F(LoopWithBus, ImmediateExit)
16a4c76ea9SWilliam A. Kennington III {
17a4c76ea9SWilliam A. Kennington III     event.exit(0);
18a4c76ea9SWilliam A. Kennington III     EXPECT_EQ(0, loopWithBus(event, bus));
19a4c76ea9SWilliam A. Kennington III }
20a4c76ea9SWilliam A. Kennington III 
TEST_F(LoopWithBus,DelayedExit)21a4c76ea9SWilliam A. Kennington III TEST_F(LoopWithBus, DelayedExit)
22a4c76ea9SWilliam A. Kennington III {
23a4c76ea9SWilliam A. Kennington III     source::Defer(event, [](source::EventBase& b) {
24a4c76ea9SWilliam A. Kennington III         b.get_event().exit(1);
25a4c76ea9SWilliam A. Kennington III     }).set_floating(true);
26a4c76ea9SWilliam A. Kennington III     EXPECT_EQ(1, loopWithBus(event, bus));
27a4c76ea9SWilliam A. Kennington III }
28a4c76ea9SWilliam A. Kennington III 
TEST_F(LoopWithBus,ExitSources)29a4c76ea9SWilliam A. Kennington III TEST_F(LoopWithBus, ExitSources)
30a4c76ea9SWilliam A. Kennington III {
31a4c76ea9SWilliam A. Kennington III     int d1 = 0, d2 = 0;
32a4c76ea9SWilliam A. Kennington III     source::Exit(event, [&](source::EventBase&) { d1 = 1; }).set_floating(true);
33a4c76ea9SWilliam A. Kennington III     source::Defer(event, [&](source::EventBase& b) {
34a4c76ea9SWilliam A. Kennington III         source::Exit(event, [&](source::EventBase&) {
35a4c76ea9SWilliam A. Kennington III             d2 = 2;
36a4c76ea9SWilliam A. Kennington III         }).set_floating(true);
37a4c76ea9SWilliam A. Kennington III         b.get_event().exit(3);
38a4c76ea9SWilliam A. Kennington III     }).set_floating(true);
39a4c76ea9SWilliam A. Kennington III     EXPECT_EQ(3, loopWithBus(event, bus));
40a4c76ea9SWilliam A. Kennington III     EXPECT_EQ(1, d1);
41a4c76ea9SWilliam A. Kennington III     EXPECT_EQ(2, d2);
42a4c76ea9SWilliam A. Kennington III }
43a4c76ea9SWilliam A. Kennington III 
44a4c76ea9SWilliam A. Kennington III } // namespace sdeventplus::utility
45