xref: /openbmc/sdeventplus/test/source/base.cpp (revision 65db863e)
10a816c5dSWilliam A. Kennington III #include <gmock/gmock.h>
20a816c5dSWilliam A. Kennington III #include <gtest/gtest.h>
3*65db863eSWilliam A. Kennington III #include <sdeventplus/exception.hpp>
40a816c5dSWilliam A. Kennington III #include <sdeventplus/internal/sdevent.hpp>
50a816c5dSWilliam A. Kennington III #include <sdeventplus/source/base.hpp>
60a816c5dSWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp>
7*65db863eSWilliam A. Kennington III #include <string>
80a816c5dSWilliam A. Kennington III #include <type_traits>
90a816c5dSWilliam A. Kennington III 
100a816c5dSWilliam A. Kennington III namespace sdeventplus
110a816c5dSWilliam A. Kennington III {
120a816c5dSWilliam A. Kennington III namespace source
130a816c5dSWilliam A. Kennington III {
140a816c5dSWilliam A. Kennington III namespace
150a816c5dSWilliam A. Kennington III {
160a816c5dSWilliam A. Kennington III 
17*65db863eSWilliam A. Kennington III using testing::DoAll;
180a816c5dSWilliam A. Kennington III using testing::Return;
19*65db863eSWilliam A. Kennington III using testing::SetArgPointee;
200a816c5dSWilliam A. Kennington III 
210a816c5dSWilliam A. Kennington III class BaseImpl : public Base
220a816c5dSWilliam A. Kennington III {
230a816c5dSWilliam A. Kennington III   public:
240a816c5dSWilliam A. Kennington III     BaseImpl(sd_event_source* source, internal::SdEvent* sdevent) :
250a816c5dSWilliam A. Kennington III         Base(source, sdevent)
260a816c5dSWilliam A. Kennington III     {
270a816c5dSWilliam A. Kennington III     }
280a816c5dSWilliam A. Kennington III     BaseImpl(sd_event_source* source, std::false_type,
290a816c5dSWilliam A. Kennington III              internal::SdEvent* sdevent) :
300a816c5dSWilliam A. Kennington III         Base(source, std::false_type(), sdevent)
310a816c5dSWilliam A. Kennington III     {
320a816c5dSWilliam A. Kennington III     }
330a816c5dSWilliam A. Kennington III };
340a816c5dSWilliam A. Kennington III 
350a816c5dSWilliam A. Kennington III class BaseTest : public testing::Test
360a816c5dSWilliam A. Kennington III {
370a816c5dSWilliam A. Kennington III   protected:
380a816c5dSWilliam A. Kennington III     testing::StrictMock<test::SdEventMock> mock;
390a816c5dSWilliam A. Kennington III     sd_event_source* const expected_source =
400a816c5dSWilliam A. Kennington III         reinterpret_cast<sd_event_source*>(1234);
410a816c5dSWilliam A. Kennington III };
420a816c5dSWilliam A. Kennington III 
430a816c5dSWilliam A. Kennington III TEST_F(BaseTest, NewBaseRef)
440a816c5dSWilliam A. Kennington III {
450a816c5dSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_ref(expected_source))
460a816c5dSWilliam A. Kennington III         .WillOnce(Return(expected_source));
470a816c5dSWilliam A. Kennington III     BaseImpl source(expected_source, &mock);
480a816c5dSWilliam A. Kennington III 
49*65db863eSWilliam A. Kennington III     {
50*65db863eSWilliam A. Kennington III         testing::InSequence seq;
51*65db863eSWilliam A. Kennington III         EXPECT_CALL(mock,
52*65db863eSWilliam A. Kennington III                     sd_event_source_set_enabled(expected_source, SD_EVENT_OFF))
53*65db863eSWilliam A. Kennington III             .WillOnce(Return(0));
540a816c5dSWilliam A. Kennington III         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
550a816c5dSWilliam A. Kennington III             .WillOnce(Return(nullptr));
560a816c5dSWilliam A. Kennington III     }
57*65db863eSWilliam A. Kennington III }
580a816c5dSWilliam A. Kennington III 
590a816c5dSWilliam A. Kennington III TEST_F(BaseTest, NewBaseNoRef)
600a816c5dSWilliam A. Kennington III {
610a816c5dSWilliam A. Kennington III     BaseImpl source(expected_source, std::false_type(), &mock);
620a816c5dSWilliam A. Kennington III 
63*65db863eSWilliam A. Kennington III     {
64*65db863eSWilliam A. Kennington III         testing::InSequence seq;
65*65db863eSWilliam A. Kennington III         EXPECT_CALL(mock,
66*65db863eSWilliam A. Kennington III                     sd_event_source_set_enabled(expected_source, SD_EVENT_OFF))
67*65db863eSWilliam A. Kennington III             .WillOnce(Return(0));
680a816c5dSWilliam A. Kennington III         EXPECT_CALL(mock, sd_event_source_unref(expected_source))
690a816c5dSWilliam A. Kennington III             .WillOnce(Return(nullptr));
700a816c5dSWilliam A. Kennington III     }
71*65db863eSWilliam A. Kennington III }
72*65db863eSWilliam A. Kennington III 
73*65db863eSWilliam A. Kennington III class BaseMethodTest : public BaseTest
74*65db863eSWilliam A. Kennington III {
75*65db863eSWilliam A. Kennington III   protected:
76*65db863eSWilliam A. Kennington III     std::unique_ptr<BaseImpl> base;
77*65db863eSWilliam A. Kennington III 
78*65db863eSWilliam A. Kennington III     void SetUp()
79*65db863eSWilliam A. Kennington III     {
80*65db863eSWilliam A. Kennington III         base = std::make_unique<BaseImpl>(expected_source, std::false_type(),
81*65db863eSWilliam A. Kennington III                                           &mock);
82*65db863eSWilliam A. Kennington III     }
83*65db863eSWilliam A. Kennington III 
84*65db863eSWilliam A. Kennington III     void TearDown()
85*65db863eSWilliam A. Kennington III     {
86*65db863eSWilliam A. Kennington III         {
87*65db863eSWilliam A. Kennington III             testing::InSequence seq;
88*65db863eSWilliam A. Kennington III             EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source,
89*65db863eSWilliam A. Kennington III                                                           SD_EVENT_OFF))
90*65db863eSWilliam A. Kennington III                 .WillOnce(Return(0));
91*65db863eSWilliam A. Kennington III             EXPECT_CALL(mock, sd_event_source_unref(expected_source))
92*65db863eSWilliam A. Kennington III                 .WillOnce(Return(nullptr));
93*65db863eSWilliam A. Kennington III         }
94*65db863eSWilliam A. Kennington III     }
95*65db863eSWilliam A. Kennington III };
96*65db863eSWilliam A. Kennington III 
97*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetDescriptionSuccess)
98*65db863eSWilliam A. Kennington III {
99*65db863eSWilliam A. Kennington III     const char* expected = "test_desc";
100*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock,
101*65db863eSWilliam A. Kennington III                 sd_event_source_get_description(expected_source, testing::_))
102*65db863eSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<1>(expected), Return(0)));
103*65db863eSWilliam A. Kennington III     // Intentionally comparing pointers to make sure no copying is happening
104*65db863eSWilliam A. Kennington III     EXPECT_EQ(expected, base->get_description());
105*65db863eSWilliam A. Kennington III }
106*65db863eSWilliam A. Kennington III 
107*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetDescriptionError)
108*65db863eSWilliam A. Kennington III {
109*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock,
110*65db863eSWilliam A. Kennington III                 sd_event_source_get_description(expected_source, testing::_))
111*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
112*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->get_description(), SdEventError);
113*65db863eSWilliam A. Kennington III }
114*65db863eSWilliam A. Kennington III 
115*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetDescriptionSuccess)
116*65db863eSWilliam A. Kennington III {
117*65db863eSWilliam A. Kennington III     const char* expected = "test desc";
118*65db863eSWilliam A. Kennington III     // Intentionally comparing pointers to make sure no copying is happening
119*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock,
120*65db863eSWilliam A. Kennington III                 sd_event_source_set_description(expected_source, expected))
121*65db863eSWilliam A. Kennington III         .WillOnce(Return(0));
122*65db863eSWilliam A. Kennington III     base->set_description(expected);
123*65db863eSWilliam A. Kennington III }
124*65db863eSWilliam A. Kennington III 
125*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetDescriptionError)
126*65db863eSWilliam A. Kennington III {
127*65db863eSWilliam A. Kennington III     const char* expected = "test desc";
128*65db863eSWilliam A. Kennington III     // Intentionally comparing pointers to make sure no copying is happening
129*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock,
130*65db863eSWilliam A. Kennington III                 sd_event_source_set_description(expected_source, expected))
131*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
132*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->set_description(expected), SdEventError);
133*65db863eSWilliam A. Kennington III }
134*65db863eSWilliam A. Kennington III 
135*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPendingSuccess)
136*65db863eSWilliam A. Kennington III {
137*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
138*65db863eSWilliam A. Kennington III         .WillOnce(Return(0));
139*65db863eSWilliam A. Kennington III     EXPECT_EQ(0, base->get_pending());
140*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
141*65db863eSWilliam A. Kennington III         .WillOnce(Return(4));
142*65db863eSWilliam A. Kennington III     EXPECT_EQ(4, base->get_pending());
143*65db863eSWilliam A. Kennington III }
144*65db863eSWilliam A. Kennington III 
145*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPendingError)
146*65db863eSWilliam A. Kennington III {
147*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_pending(expected_source))
148*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
149*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->get_pending(), SdEventError);
150*65db863eSWilliam A. Kennington III }
151*65db863eSWilliam A. Kennington III 
152*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPrioritySuccess)
153*65db863eSWilliam A. Kennington III {
154*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_))
155*65db863eSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<1>(1024), Return(0)));
156*65db863eSWilliam A. Kennington III     EXPECT_EQ(1024, base->get_priority());
157*65db863eSWilliam A. Kennington III }
158*65db863eSWilliam A. Kennington III 
159*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPriorityError)
160*65db863eSWilliam A. Kennington III {
161*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_))
162*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
163*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->get_priority(), SdEventError);
164*65db863eSWilliam A. Kennington III }
165*65db863eSWilliam A. Kennington III 
166*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrioritySuccess)
167*65db863eSWilliam A. Kennington III {
168*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024))
169*65db863eSWilliam A. Kennington III         .WillOnce(Return(0));
170*65db863eSWilliam A. Kennington III     base->set_priority(1024);
171*65db863eSWilliam A. Kennington III }
172*65db863eSWilliam A. Kennington III 
173*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetPriorityError)
174*65db863eSWilliam A. Kennington III {
175*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024))
176*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
177*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->set_priority(1024), SdEventError);
178*65db863eSWilliam A. Kennington III }
179*65db863eSWilliam A. Kennington III 
180*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetEnabledSuccess)
181*65db863eSWilliam A. Kennington III {
182*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_))
183*65db863eSWilliam A. Kennington III         .WillOnce(DoAll(SetArgPointee<1>(SD_EVENT_ON), Return(0)));
184*65db863eSWilliam A. Kennington III     EXPECT_EQ(SD_EVENT_ON, base->get_enabled());
185*65db863eSWilliam A. Kennington III }
186*65db863eSWilliam A. Kennington III 
187*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetEnabledError)
188*65db863eSWilliam A. Kennington III {
189*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_))
190*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
191*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->get_enabled(), SdEventError);
192*65db863eSWilliam A. Kennington III }
193*65db863eSWilliam A. Kennington III 
194*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetEnabledSuccess)
195*65db863eSWilliam A. Kennington III {
196*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
197*65db863eSWilliam A. Kennington III         .WillOnce(Return(0));
198*65db863eSWilliam A. Kennington III     base->set_enabled(SD_EVENT_ON);
199*65db863eSWilliam A. Kennington III }
200*65db863eSWilliam A. Kennington III 
201*65db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetEnabledError)
202*65db863eSWilliam A. Kennington III {
203*65db863eSWilliam A. Kennington III     EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON))
204*65db863eSWilliam A. Kennington III         .WillOnce(Return(-EINVAL));
205*65db863eSWilliam A. Kennington III     EXPECT_THROW(base->set_enabled(SD_EVENT_ON), SdEventError);
206*65db863eSWilliam A. Kennington III }
2070a816c5dSWilliam A. Kennington III 
2080a816c5dSWilliam A. Kennington III } // namespace
2090a816c5dSWilliam A. Kennington III } // namespace source
2100a816c5dSWilliam A. Kennington III } // namespace sdeventplus
211