148c42751SWilliam A. Kennington III #include <cerrno> 20a816c5dSWilliam A. Kennington III #include <gmock/gmock.h> 30a816c5dSWilliam A. Kennington III #include <gtest/gtest.h> 4715c72f8SWilliam A. Kennington III #include <memory> 5715c72f8SWilliam A. Kennington III #include <sdeventplus/event.hpp> 665db863eSWilliam A. Kennington III #include <sdeventplus/exception.hpp> 70a816c5dSWilliam A. Kennington III #include <sdeventplus/internal/sdevent.hpp> 80a816c5dSWilliam A. Kennington III #include <sdeventplus/source/base.hpp> 90a816c5dSWilliam A. Kennington III #include <sdeventplus/test/sdevent.hpp> 1065db863eSWilliam A. Kennington III #include <string> 1148c42751SWilliam A. Kennington III #include <system_error> 12715c72f8SWilliam A. Kennington III #include <systemd/sd-event.h> 130a816c5dSWilliam A. Kennington III #include <type_traits> 140a816c5dSWilliam A. Kennington III 150a816c5dSWilliam A. Kennington III namespace sdeventplus 160a816c5dSWilliam A. Kennington III { 170a816c5dSWilliam A. Kennington III namespace source 180a816c5dSWilliam A. Kennington III { 190a816c5dSWilliam A. Kennington III namespace 200a816c5dSWilliam A. Kennington III { 210a816c5dSWilliam A. Kennington III 2265db863eSWilliam A. Kennington III using testing::DoAll; 230a816c5dSWilliam A. Kennington III using testing::Return; 2448c42751SWilliam A. Kennington III using testing::SaveArg; 2565db863eSWilliam A. Kennington III using testing::SetArgPointee; 260a816c5dSWilliam A. Kennington III 270a816c5dSWilliam A. Kennington III class BaseImpl : public Base 280a816c5dSWilliam A. Kennington III { 290a816c5dSWilliam A. Kennington III public: 30715c72f8SWilliam A. Kennington III BaseImpl(const Event& event, sd_event_source* source) : Base(event, source) 310a816c5dSWilliam A. Kennington III { 320a816c5dSWilliam A. Kennington III } 33715c72f8SWilliam A. Kennington III BaseImpl(const Event& event, sd_event_source* source, std::false_type) : 34715c72f8SWilliam A. Kennington III Base(event, source, std::false_type()) 350a816c5dSWilliam A. Kennington III { 360a816c5dSWilliam A. Kennington III } 370a816c5dSWilliam A. Kennington III }; 380a816c5dSWilliam A. Kennington III 390a816c5dSWilliam A. Kennington III class BaseTest : public testing::Test 400a816c5dSWilliam A. Kennington III { 410a816c5dSWilliam A. Kennington III protected: 420a816c5dSWilliam A. Kennington III testing::StrictMock<test::SdEventMock> mock; 43715c72f8SWilliam A. Kennington III sd_event_source* expected_source = reinterpret_cast<sd_event_source*>(1234); 44715c72f8SWilliam A. Kennington III sd_event* expected_event = reinterpret_cast<sd_event*>(2345); 45715c72f8SWilliam A. Kennington III std::unique_ptr<Event> event; 46715c72f8SWilliam A. Kennington III 47715c72f8SWilliam A. Kennington III virtual void SetUp() 48715c72f8SWilliam A. Kennington III { 49715c72f8SWilliam A. Kennington III event = 50715c72f8SWilliam A. Kennington III std::make_unique<Event>(expected_event, std::false_type(), &mock); 51715c72f8SWilliam A. Kennington III } 52715c72f8SWilliam A. Kennington III virtual void TearDown() 53715c72f8SWilliam A. Kennington III { 54715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)) 55715c72f8SWilliam A. Kennington III .WillOnce(Return(nullptr)); 56715c72f8SWilliam A. Kennington III event.reset(); 57715c72f8SWilliam A. Kennington III } 580a816c5dSWilliam A. Kennington III }; 590a816c5dSWilliam A. Kennington III 600a816c5dSWilliam A. Kennington III TEST_F(BaseTest, NewBaseRef) 610a816c5dSWilliam A. Kennington III { 62715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_ref(expected_event)) 63715c72f8SWilliam A. Kennington III .WillOnce(Return(expected_event)); 640a816c5dSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_ref(expected_source)) 650a816c5dSWilliam A. Kennington III .WillOnce(Return(expected_source)); 66715c72f8SWilliam A. Kennington III BaseImpl source(*event, expected_source); 67*4863b96bSWilliam A. Kennington III EXPECT_EQ(expected_source, source.get()); 68*4863b96bSWilliam A. Kennington III EXPECT_NE(event.get(), &source.get_event()); 69*4863b96bSWilliam A. Kennington III EXPECT_EQ(expected_event, source.get_event().get()); 700a816c5dSWilliam A. Kennington III 7165db863eSWilliam A. Kennington III { 7265db863eSWilliam A. Kennington III testing::InSequence seq; 7365db863eSWilliam A. Kennington III EXPECT_CALL(mock, 7465db863eSWilliam A. Kennington III sd_event_source_set_enabled(expected_source, SD_EVENT_OFF)) 7565db863eSWilliam A. Kennington III .WillOnce(Return(0)); 760a816c5dSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_unref(expected_source)) 770a816c5dSWilliam A. Kennington III .WillOnce(Return(nullptr)); 780a816c5dSWilliam A. Kennington III } 79715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 8065db863eSWilliam A. Kennington III } 810a816c5dSWilliam A. Kennington III 820a816c5dSWilliam A. Kennington III TEST_F(BaseTest, NewBaseNoRef) 830a816c5dSWilliam A. Kennington III { 84715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_ref(expected_event)) 85715c72f8SWilliam A. Kennington III .WillOnce(Return(expected_event)); 86715c72f8SWilliam A. Kennington III BaseImpl source(*event, expected_source, std::false_type()); 87*4863b96bSWilliam A. Kennington III EXPECT_EQ(expected_source, source.get()); 88*4863b96bSWilliam A. Kennington III EXPECT_NE(event.get(), &source.get_event()); 89*4863b96bSWilliam A. Kennington III EXPECT_EQ(expected_event, source.get_event().get()); 900a816c5dSWilliam A. Kennington III 9165db863eSWilliam A. Kennington III { 9265db863eSWilliam A. Kennington III testing::InSequence seq; 9365db863eSWilliam A. Kennington III EXPECT_CALL(mock, 9465db863eSWilliam A. Kennington III sd_event_source_set_enabled(expected_source, SD_EVENT_OFF)) 9565db863eSWilliam A. Kennington III .WillOnce(Return(0)); 960a816c5dSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_unref(expected_source)) 970a816c5dSWilliam A. Kennington III .WillOnce(Return(nullptr)); 980a816c5dSWilliam A. Kennington III } 99715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 10065db863eSWilliam A. Kennington III } 10165db863eSWilliam A. Kennington III 1027c24e057SWilliam A. Kennington III TEST_F(BaseTest, NoSource) 1037c24e057SWilliam A. Kennington III { 1047c24e057SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_ref(expected_event)) 1057c24e057SWilliam A. Kennington III .WillOnce(Return(expected_event)); 1067c24e057SWilliam A. Kennington III BaseImpl source(*event, nullptr, std::false_type()); 107*4863b96bSWilliam A. Kennington III EXPECT_EQ(nullptr, source.get()); 108*4863b96bSWilliam A. Kennington III EXPECT_NE(event.get(), &source.get_event()); 109*4863b96bSWilliam A. Kennington III EXPECT_EQ(expected_event, source.get_event().get()); 1107c24e057SWilliam A. Kennington III 1117c24e057SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_unref(nullptr)).WillOnce(Return(nullptr)); 1127c24e057SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr)); 1137c24e057SWilliam A. Kennington III } 1147c24e057SWilliam A. Kennington III 11565db863eSWilliam A. Kennington III class BaseMethodTest : public BaseTest 11665db863eSWilliam A. Kennington III { 11765db863eSWilliam A. Kennington III protected: 11865db863eSWilliam A. Kennington III std::unique_ptr<BaseImpl> base; 11965db863eSWilliam A. Kennington III 120715c72f8SWilliam A. Kennington III void SetUp() override 12165db863eSWilliam A. Kennington III { 122715c72f8SWilliam A. Kennington III BaseTest::SetUp(); 123715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_ref(expected_event)) 124715c72f8SWilliam A. Kennington III .WillOnce(Return(expected_event)); 125715c72f8SWilliam A. Kennington III base = std::make_unique<BaseImpl>(*event, expected_source, 126715c72f8SWilliam A. Kennington III std::false_type()); 12765db863eSWilliam A. Kennington III } 12865db863eSWilliam A. Kennington III 129715c72f8SWilliam A. Kennington III void TearDown() override 13065db863eSWilliam A. Kennington III { 13165db863eSWilliam A. Kennington III { 13265db863eSWilliam A. Kennington III testing::InSequence seq; 13365db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, 13465db863eSWilliam A. Kennington III SD_EVENT_OFF)) 13565db863eSWilliam A. Kennington III .WillOnce(Return(0)); 13665db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_unref(expected_source)) 13765db863eSWilliam A. Kennington III .WillOnce(Return(nullptr)); 13865db863eSWilliam A. Kennington III } 139715c72f8SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_unref(expected_event)) 140715c72f8SWilliam A. Kennington III .WillOnce(Return(nullptr)); 141715c72f8SWilliam A. Kennington III base.reset(); 142715c72f8SWilliam A. Kennington III BaseTest::TearDown(); 14365db863eSWilliam A. Kennington III } 14465db863eSWilliam A. Kennington III }; 14565db863eSWilliam A. Kennington III 14665db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetDescriptionSuccess) 14765db863eSWilliam A. Kennington III { 14865db863eSWilliam A. Kennington III const char* expected = "test_desc"; 14965db863eSWilliam A. Kennington III EXPECT_CALL(mock, 15065db863eSWilliam A. Kennington III sd_event_source_get_description(expected_source, testing::_)) 15165db863eSWilliam A. Kennington III .WillOnce(DoAll(SetArgPointee<1>(expected), Return(0))); 15265db863eSWilliam A. Kennington III // Intentionally comparing pointers to make sure no copying is happening 15365db863eSWilliam A. Kennington III EXPECT_EQ(expected, base->get_description()); 15465db863eSWilliam A. Kennington III } 15565db863eSWilliam A. Kennington III 15665db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetDescriptionError) 15765db863eSWilliam A. Kennington III { 15865db863eSWilliam A. Kennington III EXPECT_CALL(mock, 15965db863eSWilliam A. Kennington III sd_event_source_get_description(expected_source, testing::_)) 16065db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 16165db863eSWilliam A. Kennington III EXPECT_THROW(base->get_description(), SdEventError); 16265db863eSWilliam A. Kennington III } 16365db863eSWilliam A. Kennington III 16465db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetDescriptionSuccess) 16565db863eSWilliam A. Kennington III { 16665db863eSWilliam A. Kennington III const char* expected = "test desc"; 16765db863eSWilliam A. Kennington III // Intentionally comparing pointers to make sure no copying is happening 16865db863eSWilliam A. Kennington III EXPECT_CALL(mock, 16965db863eSWilliam A. Kennington III sd_event_source_set_description(expected_source, expected)) 17065db863eSWilliam A. Kennington III .WillOnce(Return(0)); 17165db863eSWilliam A. Kennington III base->set_description(expected); 17265db863eSWilliam A. Kennington III } 17365db863eSWilliam A. Kennington III 17465db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetDescriptionError) 17565db863eSWilliam A. Kennington III { 17665db863eSWilliam A. Kennington III const char* expected = "test desc"; 17765db863eSWilliam A. Kennington III // Intentionally comparing pointers to make sure no copying is happening 17865db863eSWilliam A. Kennington III EXPECT_CALL(mock, 17965db863eSWilliam A. Kennington III sd_event_source_set_description(expected_source, expected)) 18065db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 18165db863eSWilliam A. Kennington III EXPECT_THROW(base->set_description(expected), SdEventError); 18265db863eSWilliam A. Kennington III } 18365db863eSWilliam A. Kennington III 18448c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareCallback) 18548c42751SWilliam A. Kennington III { 18648c42751SWilliam A. Kennington III bool completed = false; 18748c42751SWilliam A. Kennington III Base::Callback callback = [&completed](Base&) { completed = true; }; 18848c42751SWilliam A. Kennington III sd_event_handler_t event_handler; 18948c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_)) 19048c42751SWilliam A. Kennington III .WillOnce(DoAll(SaveArg<1>(&event_handler), Return(0))); 19148c42751SWilliam A. Kennington III base->set_prepare(std::move(callback)); 19248c42751SWilliam A. Kennington III EXPECT_FALSE(callback); 19348c42751SWilliam A. Kennington III EXPECT_FALSE(completed); 19448c42751SWilliam A. Kennington III 19548c42751SWilliam A. Kennington III EXPECT_EQ(0, event_handler(nullptr, base.get())); 19648c42751SWilliam A. Kennington III EXPECT_TRUE(completed); 19748c42751SWilliam A. Kennington III } 19848c42751SWilliam A. Kennington III 19948c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareCallbackNoUserdata) 20048c42751SWilliam A. Kennington III { 20148c42751SWilliam A. Kennington III Base::Callback callback = [](Base&) {}; 20248c42751SWilliam A. Kennington III sd_event_handler_t event_handler; 20348c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_)) 20448c42751SWilliam A. Kennington III .WillOnce(DoAll(SaveArg<1>(&event_handler), Return(0))); 20548c42751SWilliam A. Kennington III base->set_prepare(std::move(callback)); 20648c42751SWilliam A. Kennington III EXPECT_FALSE(callback); 20748c42751SWilliam A. Kennington III 20848c42751SWilliam A. Kennington III EXPECT_EQ(-EINVAL, event_handler(nullptr, nullptr)); 20948c42751SWilliam A. Kennington III } 21048c42751SWilliam A. Kennington III 21148c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareNull) 21248c42751SWilliam A. Kennington III { 21348c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, nullptr)) 21448c42751SWilliam A. Kennington III .WillOnce(Return(0)); 21548c42751SWilliam A. Kennington III base->set_prepare(nullptr); 21648c42751SWilliam A. Kennington III EXPECT_EQ(-ENOSYS, base->prepareCallback()); 21748c42751SWilliam A. Kennington III } 21848c42751SWilliam A. Kennington III 21948c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareSystemError) 22048c42751SWilliam A. Kennington III { 22148c42751SWilliam A. Kennington III Base::Callback callback = [](Base&) { 22248c42751SWilliam A. Kennington III throw std::system_error(EBUSY, std::generic_category()); 22348c42751SWilliam A. Kennington III }; 22448c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_)) 22548c42751SWilliam A. Kennington III .WillOnce(Return(0)); 22648c42751SWilliam A. Kennington III base->set_prepare(std::move(callback)); 22748c42751SWilliam A. Kennington III EXPECT_FALSE(callback); 22848c42751SWilliam A. Kennington III EXPECT_EQ(-EBUSY, base->prepareCallback()); 22948c42751SWilliam A. Kennington III } 23048c42751SWilliam A. Kennington III 23148c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareUnknownException) 23248c42751SWilliam A. Kennington III { 23348c42751SWilliam A. Kennington III Base::Callback callback = [](Base&) { throw static_cast<int>(1); }; 23448c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_)) 23548c42751SWilliam A. Kennington III .WillOnce(Return(0)); 23648c42751SWilliam A. Kennington III base->set_prepare(std::move(callback)); 23748c42751SWilliam A. Kennington III EXPECT_FALSE(callback); 23848c42751SWilliam A. Kennington III EXPECT_EQ(-ENOSYS, base->prepareCallback()); 23948c42751SWilliam A. Kennington III } 24048c42751SWilliam A. Kennington III 24148c42751SWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrepareError) 24248c42751SWilliam A. Kennington III { 24348c42751SWilliam A. Kennington III Base::Callback callback = [](Base&) {}; 24448c42751SWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_prepare(expected_source, testing::_)) 24548c42751SWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 24648c42751SWilliam A. Kennington III EXPECT_THROW(base->set_prepare(std::move(callback)), SdEventError); 24748c42751SWilliam A. Kennington III EXPECT_TRUE(callback); 24848c42751SWilliam A. Kennington III EXPECT_EQ(-ENOSYS, base->prepareCallback()); 24948c42751SWilliam A. Kennington III } 25048c42751SWilliam A. Kennington III 25165db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPendingSuccess) 25265db863eSWilliam A. Kennington III { 25365db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_pending(expected_source)) 25465db863eSWilliam A. Kennington III .WillOnce(Return(0)); 25565db863eSWilliam A. Kennington III EXPECT_EQ(0, base->get_pending()); 25665db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_pending(expected_source)) 25765db863eSWilliam A. Kennington III .WillOnce(Return(4)); 25865db863eSWilliam A. Kennington III EXPECT_EQ(4, base->get_pending()); 25965db863eSWilliam A. Kennington III } 26065db863eSWilliam A. Kennington III 26165db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPendingError) 26265db863eSWilliam A. Kennington III { 26365db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_pending(expected_source)) 26465db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 26565db863eSWilliam A. Kennington III EXPECT_THROW(base->get_pending(), SdEventError); 26665db863eSWilliam A. Kennington III } 26765db863eSWilliam A. Kennington III 26865db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPrioritySuccess) 26965db863eSWilliam A. Kennington III { 27065db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_)) 27165db863eSWilliam A. Kennington III .WillOnce(DoAll(SetArgPointee<1>(1024), Return(0))); 27265db863eSWilliam A. Kennington III EXPECT_EQ(1024, base->get_priority()); 27365db863eSWilliam A. Kennington III } 27465db863eSWilliam A. Kennington III 27565db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetPriorityError) 27665db863eSWilliam A. Kennington III { 27765db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_priority(expected_source, testing::_)) 27865db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 27965db863eSWilliam A. Kennington III EXPECT_THROW(base->get_priority(), SdEventError); 28065db863eSWilliam A. Kennington III } 28165db863eSWilliam A. Kennington III 28265db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetPrioritySuccess) 28365db863eSWilliam A. Kennington III { 28465db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024)) 28565db863eSWilliam A. Kennington III .WillOnce(Return(0)); 28665db863eSWilliam A. Kennington III base->set_priority(1024); 28765db863eSWilliam A. Kennington III } 28865db863eSWilliam A. Kennington III 28965db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetPriorityError) 29065db863eSWilliam A. Kennington III { 29165db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_priority(expected_source, 1024)) 29265db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 29365db863eSWilliam A. Kennington III EXPECT_THROW(base->set_priority(1024), SdEventError); 29465db863eSWilliam A. Kennington III } 29565db863eSWilliam A. Kennington III 29665db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetEnabledSuccess) 29765db863eSWilliam A. Kennington III { 29865db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_)) 29965db863eSWilliam A. Kennington III .WillOnce(DoAll(SetArgPointee<1>(SD_EVENT_ON), Return(0))); 30065db863eSWilliam A. Kennington III EXPECT_EQ(SD_EVENT_ON, base->get_enabled()); 30165db863eSWilliam A. Kennington III } 30265db863eSWilliam A. Kennington III 30365db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, GetEnabledError) 30465db863eSWilliam A. Kennington III { 30565db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_get_enabled(expected_source, testing::_)) 30665db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 30765db863eSWilliam A. Kennington III EXPECT_THROW(base->get_enabled(), SdEventError); 30865db863eSWilliam A. Kennington III } 30965db863eSWilliam A. Kennington III 31065db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetEnabledSuccess) 31165db863eSWilliam A. Kennington III { 31265db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON)) 31365db863eSWilliam A. Kennington III .WillOnce(Return(0)); 31465db863eSWilliam A. Kennington III base->set_enabled(SD_EVENT_ON); 31565db863eSWilliam A. Kennington III } 31665db863eSWilliam A. Kennington III 31765db863eSWilliam A. Kennington III TEST_F(BaseMethodTest, SetEnabledError) 31865db863eSWilliam A. Kennington III { 31965db863eSWilliam A. Kennington III EXPECT_CALL(mock, sd_event_source_set_enabled(expected_source, SD_EVENT_ON)) 32065db863eSWilliam A. Kennington III .WillOnce(Return(-EINVAL)); 32165db863eSWilliam A. Kennington III EXPECT_THROW(base->set_enabled(SD_EVENT_ON), SdEventError); 32265db863eSWilliam A. Kennington III } 3230a816c5dSWilliam A. Kennington III 3240a816c5dSWilliam A. Kennington III } // namespace 3250a816c5dSWilliam A. Kennington III } // namespace source 3260a816c5dSWilliam A. Kennington III } // namespace sdeventplus 327