source/base: Take an event directly instead of sdevent
Also expose a mechanism for retrieving our internal event.
diff --git a/test/source/base.cpp b/test/source/base.cpp
index 13c534a..3b6a63f 100644
--- a/test/source/base.cpp
+++ b/test/source/base.cpp
@@ -1,12 +1,15 @@
#include <cerrno>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
+#include <memory>
+#include <sdeventplus/event.hpp>
#include <sdeventplus/exception.hpp>
#include <sdeventplus/internal/sdevent.hpp>
#include <sdeventplus/source/base.hpp>
#include <sdeventplus/test/sdevent.hpp>
#include <string>
#include <system_error>
+#include <systemd/sd-event.h>
#include <type_traits>
namespace sdeventplus
@@ -24,13 +27,11 @@
class BaseImpl : public Base
{
public:
- BaseImpl(sd_event_source* source, internal::SdEvent* sdevent) :
- Base(source, sdevent)
+ BaseImpl(const Event& event, sd_event_source* source) : Base(event, source)
{
}
- BaseImpl(sd_event_source* source, std::false_type,
- internal::SdEvent* sdevent) :
- Base(source, std::false_type(), sdevent)
+ BaseImpl(const Event& event, sd_event_source* source, std::false_type) :
+ Base(event, source, std::false_type())
{
}
};
@@ -39,15 +40,30 @@
{
protected:
testing::StrictMock<test::SdEventMock> mock;
- sd_event_source* const expected_source =
- reinterpret_cast<sd_event_source*>(1234);
+ sd_event_source* expected_source = reinterpret_cast<sd_event_source*>(1234);
+ sd_event* expected_event = reinterpret_cast<sd_event*>(2345);
+ std::unique_ptr<Event> event;
+
+ virtual void SetUp()
+ {
+ event =
+ std::make_unique<Event>(expected_event, std::false_type(), &mock);
+ }
+ virtual void TearDown()
+ {
+ EXPECT_CALL(mock, sd_event_unref(expected_event))
+ .WillOnce(Return(nullptr));
+ event.reset();
+ }
};
TEST_F(BaseTest, NewBaseRef)
{
+ EXPECT_CALL(mock, sd_event_ref(expected_event))
+ .WillOnce(Return(expected_event));
EXPECT_CALL(mock, sd_event_source_ref(expected_source))
.WillOnce(Return(expected_source));
- BaseImpl source(expected_source, &mock);
+ BaseImpl source(*event, expected_source);
{
testing::InSequence seq;
@@ -57,11 +73,14 @@
EXPECT_CALL(mock, sd_event_source_unref(expected_source))
.WillOnce(Return(nullptr));
}
+ EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
}
TEST_F(BaseTest, NewBaseNoRef)
{
- BaseImpl source(expected_source, std::false_type(), &mock);
+ EXPECT_CALL(mock, sd_event_ref(expected_event))
+ .WillOnce(Return(expected_event));
+ BaseImpl source(*event, expected_source, std::false_type());
{
testing::InSequence seq;
@@ -71,6 +90,7 @@
EXPECT_CALL(mock, sd_event_source_unref(expected_source))
.WillOnce(Return(nullptr));
}
+ EXPECT_CALL(mock, sd_event_unref(expected_event)).WillOnce(Return(nullptr));
}
class BaseMethodTest : public BaseTest
@@ -78,13 +98,16 @@
protected:
std::unique_ptr<BaseImpl> base;
- void SetUp()
+ void SetUp() override
{
- base = std::make_unique<BaseImpl>(expected_source, std::false_type(),
- &mock);
+ BaseTest::SetUp();
+ EXPECT_CALL(mock, sd_event_ref(expected_event))
+ .WillOnce(Return(expected_event));
+ base = std::make_unique<BaseImpl>(*event, expected_source,
+ std::false_type());
}
- void TearDown()
+ void TearDown() override
{
{
testing::InSequence seq;
@@ -94,9 +117,19 @@
EXPECT_CALL(mock, sd_event_source_unref(expected_source))
.WillOnce(Return(nullptr));
}
+ EXPECT_CALL(mock, sd_event_unref(expected_event))
+ .WillOnce(Return(nullptr));
+ base.reset();
+ BaseTest::TearDown();
}
};
+TEST_F(BaseMethodTest, GetEvent)
+{
+ EXPECT_NE(event.get(), &base->get_event());
+ EXPECT_EQ(event->get(), base->get_event().get());
+}
+
TEST_F(BaseMethodTest, GetDescriptionSuccess)
{
const char* expected = "test_desc";