From 402b595cfb5d280444a576fc906887255b59868f Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 14 Feb 2024 12:09:42 -0500 Subject: [PATCH] tests/lib: create component classes using C++ bindings in `utils/run-in.cpp` Change-Id: I449799599a5e0d3b1f4ad1864c027b5e60886cda Signed-off-by: Simon Marchi Signed-off-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/11805 Tested-by: jenkins --- tests/lib/Makefile.am | 3 +- tests/lib/utils/run-in.cpp | 214 ++++++++++++------------------------- 2 files changed, 73 insertions(+), 144 deletions(-) diff --git a/tests/lib/Makefile.am b/tests/lib/Makefile.am index 3eed8c8c..edb150d7 100644 --- a/tests/lib/Makefile.am +++ b/tests/lib/Makefile.am @@ -17,7 +17,8 @@ test_bt_values_LDADD = $(COMMON_TEST_LDADD) \ test_fields_bin_SOURCES = test-fields-bin.cpp test_fields_bin_LDADD = $(COMMON_TEST_LDADD) \ - $(top_builddir)/src/lib/libbabeltrace2.la + $(top_builddir)/src/lib/libbabeltrace2.la \ + $(top_builddir)/src/cpp-common/vendor/fmt/libfmt.la test_bt_uuid_SOURCES = test-bt-uuid.c test_bt_uuid_LDADD = $(COMMON_TEST_LDADD) diff --git a/tests/lib/utils/run-in.cpp b/tests/lib/utils/run-in.cpp index 3fef7d32..89e85256 100644 --- a/tests/lib/utils/run-in.cpp +++ b/tests/lib/utils/run-in.cpp @@ -7,7 +7,8 @@ #include #include "common/assert.h" -#include "cpp-common/bt2/wrap.hpp" +#include "cpp-common/bt2/component-class-dev.hpp" +#include "cpp-common/bt2/component-class.hpp" #include "run-in.hpp" @@ -20,113 +21,87 @@ struct RunInData final RunInMsgIterClsInitFunc msgIterCtxFunc; }; -const RunInData& runInDataFromMethodData(void * const methodData) -{ - return *static_cast(methodData); -} +class RunInSource; -bt_component_class_initialize_method_status compClsInit(bt_self_component_source * const selfComp, - bt_self_component_source_configuration *, - const bt_value *, - void * const initMethodData) +class RunInSourceMsgIter final : public bt2::UserMessageIterator { - const auto status = - bt_self_component_source_add_output_port(selfComp, "out", initMethodData, nullptr); - - BT_ASSERT(status == BT_SELF_COMPONENT_ADD_PORT_STATUS_OK); - - auto& data = runInDataFromMethodData(initMethodData); +public: + explicit RunInSourceMsgIter(const bt2::SelfMessageIterator self, + bt2::SelfMessageIteratorConfiguration, + const bt2::SelfComponentOutputPort port) : + bt2::UserMessageIterator {self, "RUN-IN-SRC-MSG-ITER"} + { + const auto& data = port.data(); - if (data.compCtxFunc) { - data.compCtxFunc(bt2::wrap(bt_self_component_source_as_self_component(selfComp))); + if (data.msgIterCtxFunc) { + data.msgIterCtxFunc(self); + } } - return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; -} - -bt_component_class_query_method_status -compClsQuery(bt_self_component_class_source * const selfCompCls, bt_private_query_executor *, - const char *, const bt_value *, void * const methodData, - const bt_value ** const result) -{ - auto& data = runInDataFromMethodData(methodData); - - if (data.compClsCtxFunc) { - data.compClsCtxFunc( - bt2::wrap(bt_self_component_class_source_as_self_component_class(selfCompCls))); + void _next(bt2::ConstMessageArray&) + { } +}; - *result = bt_value_null; - return BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK; -} - -bt_message_iterator_class_initialize_method_status -msgIterClsInit(bt_self_message_iterator * const selfMsgIter, - bt_self_message_iterator_configuration *, bt_self_component_port_output * const port) +class RunInSource final : + public bt2::UserSourceComponent { - auto& data = runInDataFromMethodData(bt_self_component_port_get_data( - bt_self_component_port_output_as_self_component_port(port))); +public: + static constexpr auto name = "run-in-src"; + + explicit RunInSource(const bt2::SelfSourceComponent self, bt2::ConstMapValue, + const RunInData * const runInData) : + bt2::UserSourceComponent {self, "RUN-IN-SRC"}, + _mRunInData {runInData} + { + this->_addOutputPort("out", *runInData); - if (data.msgIterCtxFunc) { - data.msgIterCtxFunc(bt2::wrap(selfMsgIter)); + if (_mRunInData->compCtxFunc) { + _mRunInData->compCtxFunc(self); + } } - return BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_OK; -} + static bt2::Value::Shared _query(const bt2::SelfComponentClass self, bt2::PrivateQueryExecutor, + bt2c::CStringView, bt2::ConstValue, + const RunInData * const data) + { + if (data->compClsCtxFunc) { + data->compClsCtxFunc(self); + } -bt_message_iterator_class_next_method_status -msgIterClsNext(bt_self_message_iterator *, bt_message_array_const, uint64_t, uint64_t *) -{ - return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END; -} + return bt2::NullValue {}.shared(); + } -struct DummySinkData -{ - bt_message_iterator *msgIter; +private: + const RunInData *_mRunInData; }; -bt_component_class_initialize_method_status dummySinkInit(bt_self_component_sink * const self, - bt_self_component_sink_configuration *, - const bt_value *, - void * const initMethodData) -{ - const auto status = bt_self_component_sink_add_input_port(self, "in", NULL, nullptr); - - BT_ASSERT(status == BT_SELF_COMPONENT_ADD_PORT_STATUS_OK); - bt_self_component_set_data(bt_self_component_sink_as_self_component(self), initMethodData); - return BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; -} - -DummySinkData& dummySinkDataFromSelfCompSink(bt_self_component_sink * const self) +class DummySink : public bt2::UserSinkComponent { - return *static_cast( - bt_self_component_get_data(bt_self_component_sink_as_self_component(self))); -} - -bt_component_class_sink_graph_is_configured_method_status -dummySinkGraphIsConfigured(bt_self_component_sink * const self) -{ - const auto port = bt_self_component_sink_borrow_input_port_by_name(self, "in"); - - BT_ASSERT(port); +public: + static constexpr auto name = "dummy"; - const auto status = bt_message_iterator_create_from_sink_component( - self, port, &dummySinkDataFromSelfCompSink(self).msgIter); + explicit DummySink(const bt2::SelfSinkComponent self, bt2::ConstMapValue, void *) : + bt2::UserSinkComponent(self, "DUMMY-SINK") + { + this->_addInputPort("in"); + } - BT_ASSERT(status == BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK); - return BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK; -} + void _graphIsConfigured() + { + _mMsgIter = this->_createMessageIterator(this->_inputPorts()["in"]); + } -bt_component_class_sink_consume_method_status dummySinkConsume(bt_self_component_sink * const self) -{ - bt_message_array_const msgs; - uint64_t msgCount; - const auto status = - bt_message_iterator_next(dummySinkDataFromSelfCompSink(self).msgIter, &msgs, &msgCount); + bool _consume() + { + return _mMsgIter->next().has_value(); + } - BT_ASSERT(status == BT_MESSAGE_ITERATOR_NEXT_STATUS_END); - return BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_END; -} +private: + bt2::MessageIterator::Shared _mMsgIter; +}; } /* namespace */ @@ -134,40 +109,13 @@ void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFun RunInMsgIterClsInitFunc msgIterCtxFunc) { RunInData data {std::move(compClsCtxFunc), std::move(compCtxFunc), std::move(msgIterCtxFunc)}; - - /* Create and configure custom source component class */ - const auto msgIterCls = bt_message_iterator_class_create(msgIterClsNext); - - BT_ASSERT(msgIterCls); - - { - const auto status = - bt_message_iterator_class_set_initialize_method(msgIterCls, msgIterClsInit); - - BT_ASSERT(status == BT_MESSAGE_ITERATOR_CLASS_SET_METHOD_STATUS_OK); - } - - const auto srcCompCls = bt_component_class_source_create("yo", msgIterCls); - - BT_ASSERT(srcCompCls); - - { - const auto status = - bt_component_class_source_set_initialize_method(srcCompCls, compClsInit); - - BT_ASSERT(status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK); - } - - { - const auto status = bt_component_class_source_set_query_method(srcCompCls, compClsQuery); - - BT_ASSERT(status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK); - } + const auto srcCompCls = bt2::SourceComponentClass::create(); /* Execute a query (executes `compClsCtxFunc`) */ { const auto queryExec = bt_query_executor_create_with_method_data( - bt_component_class_source_as_component_class(srcCompCls), "", nullptr, &data); + bt_component_class_source_as_component_class(srcCompCls->libObjPtr()), "", nullptr, + &data); BT_ASSERT(queryExec); @@ -179,25 +127,6 @@ void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFun bt_query_executor_put_ref(queryExec); } - /* Create a dummy sink component */ - const auto sinkCompCls = bt_component_class_sink_create("dummy", dummySinkConsume); - - BT_ASSERT(sinkCompCls); - - { - const auto status = - bt_component_class_sink_set_initialize_method(sinkCompCls, dummySinkInit); - - BT_ASSERT(status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK); - } - - { - const auto status = bt_component_class_sink_set_graph_is_configured_method( - sinkCompCls, dummySinkGraphIsConfigured); - - BT_ASSERT(status == BT_COMPONENT_CLASS_SET_METHOD_STATUS_OK); - } - /* Create graph */ const auto graph = bt_graph_create(0); @@ -208,18 +137,20 @@ void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFun { const auto status = bt_graph_add_source_component_with_initialize_method_data( - graph, srcCompCls, "the-source", NULL, &data, BT_LOGGING_LEVEL_NONE, &srcComp); + graph, srcCompCls->libObjPtr(), "the-source", NULL, &data, BT_LOGGING_LEVEL_NONE, + &srcComp); BT_ASSERT(status == BT_GRAPH_ADD_COMPONENT_STATUS_OK); } /* Add dummy sink component */ const bt_component_sink *sinkComp; - DummySinkData dummySinkData; { + const auto sinkCompCls = bt2::SinkComponentClass::create(); const auto status = bt_graph_add_sink_component_with_initialize_method_data( - graph, sinkCompCls, "the-sink", NULL, &dummySinkData, BT_LOGGING_LEVEL_NONE, &sinkComp); + graph, sinkCompCls->libObjPtr(), "the-sink", nullptr, nullptr, BT_LOGGING_LEVEL_NONE, + &sinkComp); BT_ASSERT(status == BT_GRAPH_ADD_COMPONENT_STATUS_OK); } @@ -248,9 +179,6 @@ void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFun /* Discard owned objects */ bt_graph_put_ref(graph); - bt_component_class_source_put_ref(srcCompCls); - bt_component_class_sink_put_ref(sinkCompCls); - bt_message_iterator_class_put_ref(msgIterCls); } void runInCompClsQuery(RunInCompClsQueryFunc func) -- 2.34.1