tests/lib: C++ify run-in and condition trigger code
[babeltrace.git] / tests / lib / utils / run-in.cpp
index bb7e4d919546f42778cc647c1a5431f2cdb6f01b..91b23396e7fbcd6650cd1589baeab69d738ad86d 100644 (file)
@@ -4,23 +4,30 @@
  * Copyright (C) 2020-2023 EfficiOS, inc.
  */
 
-#include <utility>
-
 #include "common/assert.h"
 #include "cpp-common/bt2/component-class-dev.hpp"
 #include "cpp-common/bt2/component-class.hpp"
 #include "cpp-common/bt2/graph.hpp"
+#include "cpp-common/bt2/plugin-load.hpp"
+#include "cpp-common/bt2/plugin.hpp"
+#include "cpp-common/bt2/query-executor.hpp"
+#include "cpp-common/bt2c/call.hpp"
 
 #include "run-in.hpp"
 
-namespace {
+void RunIn::onQuery(bt2::SelfComponentClass)
+{
+}
 
-struct RunInData final
+void RunIn::onCompInit(bt2::SelfComponent)
 {
-    RunInCompClsQueryFunc compClsCtxFunc;
-    RunInCompClsInitFunc compCtxFunc;
-    RunInMsgIterClsInitFunc msgIterCtxFunc;
-};
+}
+
+void RunIn::onMsgIterInit(bt2::SelfMessageIterator)
+{
+}
+
+namespace {
 
 class RunInSource;
 
@@ -32,11 +39,7 @@ public:
                                 const bt2::SelfComponentOutputPort port) :
         bt2::UserMessageIterator<RunInSourceMsgIter, RunInSource> {self, "RUN-IN-SRC-MSG-ITER"}
     {
-        const auto& data = port.data<const RunInData>();
-
-        if (data.msgIterCtxFunc) {
-            data.msgIterCtxFunc(self);
-        }
+        port.data<RunIn>().onMsgIterInit(self);
     }
 
     void _next(bt2::ConstMessageArray&)
@@ -45,98 +48,59 @@ public:
 };
 
 class RunInSource final :
-    public bt2::UserSourceComponent<RunInSource, RunInSourceMsgIter, const RunInData,
-                                    const RunInData>
+    public bt2::UserSourceComponent<RunInSource, RunInSourceMsgIter, RunIn, RunIn>
 {
 public:
     static constexpr auto name = "run-in-src";
 
     explicit RunInSource(const bt2::SelfSourceComponent self, bt2::ConstMapValue,
-                         const RunInData * const runInData) :
-        bt2::UserSourceComponent<RunInSource, RunInSourceMsgIter, const RunInData,
-                                 const RunInData> {self, "RUN-IN-SRC"},
-        _mRunInData {runInData}
+                         RunIn * const runIn) :
+        bt2::UserSourceComponent<RunInSource, RunInSourceMsgIter, RunIn, RunIn> {self,
+                                                                                 "RUN-IN-SRC"},
+        _mRunIn {runIn}
     {
-        this->_addOutputPort("out", *runInData);
-
-        if (_mRunInData->compCtxFunc) {
-            _mRunInData->compCtxFunc(self);
-        }
+        this->_addOutputPort("out", *runIn);
+        _mRunIn->onCompInit(self);
     }
 
     static bt2::Value::Shared _query(const bt2::SelfComponentClass self, bt2::PrivateQueryExecutor,
-                                     bt2c::CStringView, bt2::ConstValue,
-                                     const RunInData * const data)
+                                     bt2c::CStringView, bt2::ConstValue, RunIn *data)
     {
-        if (data->compClsCtxFunc) {
-            data->compClsCtxFunc(self);
-        }
-
+        data->onQuery(self);
         return bt2::NullValue {}.shared();
     }
 
 private:
-    const RunInData *_mRunInData;
-};
-
-class DummySink : public bt2::UserSinkComponent<DummySink>
-{
-public:
-    static constexpr auto name = "dummy";
-
-    explicit DummySink(const bt2::SelfSinkComponent self, bt2::ConstMapValue, void *) :
-        bt2::UserSinkComponent<DummySink>(self, "DUMMY-SINK")
-    {
-        this->_addInputPort("in");
-    }
-
-    void _graphIsConfigured()
-    {
-        _mMsgIter = this->_createMessageIterator(this->_inputPorts()["in"]);
-    }
-
-    bool _consume()
-    {
-        return _mMsgIter->next().has_value();
-    }
-
-private:
-    bt2::MessageIterator::Shared _mMsgIter;
+    RunIn *_mRunIn;
 };
 
 } /* namespace */
 
-void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFunc,
-           RunInMsgIterClsInitFunc msgIterCtxFunc)
+void runIn(RunIn& runIn)
 {
-    RunInData data {std::move(compClsCtxFunc), std::move(compCtxFunc), std::move(msgIterCtxFunc)};
     const auto srcCompCls = bt2::SourceComponentClass::create<RunInSource>();
 
-    /* Execute a query (executes `compClsCtxFunc`) */
-    {
-        const auto queryExec = bt_query_executor_create_with_method_data(
-            bt_component_class_source_as_component_class(srcCompCls->libObjPtr()), "", nullptr,
-            &data);
-
-        BT_ASSERT(queryExec);
-
-        const bt_value *queryRes;
-        const auto status = bt_query_executor_query(queryExec, &queryRes);
-
-        BT_ASSERT(status == BT_QUERY_EXECUTOR_QUERY_STATUS_OK);
-        bt_value_put_ref(queryRes);
-        bt_query_executor_put_ref(queryExec);
-    }
+    /* Execute a query */
+    bt2::QueryExecutor::create(*srcCompCls, "object-name", runIn)->query();
 
     /* Create graph */
     const auto graph = bt2::Graph::create(0);
 
     /* Add custom source component (executes `compCtxFunc`) */
-    const auto srcComp = graph->addComponent(*srcCompCls, "the-source", data);
+    const auto srcComp = graph->addComponent(*srcCompCls, "the-source", runIn);
 
     /* Add dummy sink component */
-    const auto sinkComp =
-        graph->addComponent(*bt2::SinkComponentClass::create<DummySink>(), "the-sink");
+    const auto sinkComp = bt2c::call([&] {
+        const auto utilsPlugin = bt2::findPlugin("utils");
+
+        BT_ASSERT(utilsPlugin);
+
+        const auto dummySinkCompCls = utilsPlugin->sinkComponentClasses()["dummy"];
+
+        BT_ASSERT(dummySinkCompCls);
+
+        return graph->addComponent(*dummySinkCompCls, "the-sink");
+    });
 
     /* Connect ports */
     const auto outPort = srcComp.outputPorts()["out"];
@@ -150,18 +114,3 @@ void runIn(RunInCompClsQueryFunc compClsCtxFunc, RunInCompClsInitFunc compCtxFun
     /* Run graph (executes `msgIterCtxFunc`) */
     graph->run();
 }
-
-void runInCompClsQuery(RunInCompClsQueryFunc func)
-{
-    runIn(std::move(func), nullptr, nullptr);
-}
-
-void runInCompClsInit(RunInCompClsInitFunc func)
-{
-    runIn(nullptr, std::move(func), nullptr);
-}
-
-void runInMsgIterClsInit(RunInMsgIterClsInitFunc func)
-{
-    runIn(nullptr, nullptr, std::move(func));
-}
This page took 0.02522 seconds and 4 git commands to generate.