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