This is an automated email from the ASF dual-hosted git repository. lordgamez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 5378719e57cd2d1d5f12b25339e0b5cd4930dcac Author: Martin Zink <[email protected]> AuthorDate: Tue Dec 13 12:25:03 2022 +0100 MINIFICPP-2014 Add ProcessSession::remove to Lua API Signed-off-by: Gabor Gyimesi <[email protected]> This closes #1472 --- extensions/script/lua/LuaProcessSession.cpp | 14 ++++++++++++++ extensions/script/lua/LuaProcessSession.h | 1 + extensions/script/lua/LuaScriptEngine.cpp | 3 ++- .../TestExecuteScriptProcessorWithLuaScript.cpp | 21 +++++++++++++++++++++ .../TestExecuteScriptProcessorWithPythonScript.cpp | 20 ++++++++++++++++++++ 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/extensions/script/lua/LuaProcessSession.cpp b/extensions/script/lua/LuaProcessSession.cpp index 44a683711..610aea69e 100644 --- a/extensions/script/lua/LuaProcessSession.cpp +++ b/extensions/script/lua/LuaProcessSession.cpp @@ -131,4 +131,18 @@ void LuaProcessSession::releaseCoreResources() { session_.reset(); } +void LuaProcessSession::remove(const std::shared_ptr<script::ScriptFlowFile>& script_flow_file) { + if (!session_) { + throw std::runtime_error("Access of ProcessSession after it has been released"); + } + + auto flow_file = script_flow_file->getFlowFile(); + + if (!flow_file) { + throw std::runtime_error("Access of FlowFile after it has been released"); + } + + session_->remove(flow_file); +} + } // namespace org::apache::nifi::minifi::lua diff --git a/extensions/script/lua/LuaProcessSession.h b/extensions/script/lua/LuaProcessSession.h index c428239fb..a05b9e6cf 100644 --- a/extensions/script/lua/LuaProcessSession.h +++ b/extensions/script/lua/LuaProcessSession.h @@ -39,6 +39,7 @@ class LuaProcessSession { void transfer(const std::shared_ptr<script::ScriptFlowFile> &flow_file, const core::Relationship& relationship); void read(const std::shared_ptr<script::ScriptFlowFile> &script_flow_file, sol::table input_stream_callback); void write(const std::shared_ptr<script::ScriptFlowFile> &flow_file, sol::table output_stream_callback); + void remove(const std::shared_ptr<script::ScriptFlowFile>& flow_file); /** * Sometimes we want to release shared pointers to core resources when diff --git a/extensions/script/lua/LuaScriptEngine.cpp b/extensions/script/lua/LuaScriptEngine.cpp index bce738dfd..11b235b2b 100644 --- a/extensions/script/lua/LuaScriptEngine.cpp +++ b/extensions/script/lua/LuaScriptEngine.cpp @@ -46,7 +46,8 @@ LuaScriptEngine::LuaScriptEngine() { "get", &lua::LuaProcessSession::get, "read", &lua::LuaProcessSession::read, "write", &lua::LuaProcessSession::write, - "transfer", &lua::LuaProcessSession::transfer); + "transfer", &lua::LuaProcessSession::transfer, + "remove", &lua::LuaProcessSession::remove); lua_.new_usertype<script::ScriptFlowFile>( "FlowFile", "getAttribute", &script::ScriptFlowFile::getAttribute, diff --git a/extensions/script/tests/TestExecuteScriptProcessorWithLuaScript.cpp b/extensions/script/tests/TestExecuteScriptProcessorWithLuaScript.cpp index 5fbc5195a..71d8d3a1d 100644 --- a/extensions/script/tests/TestExecuteScriptProcessorWithLuaScript.cpp +++ b/extensions/script/tests/TestExecuteScriptProcessorWithLuaScript.cpp @@ -21,6 +21,7 @@ #include <string> #include <set> +#include "SingleProcessorTestController.h" #include "TestBase.h" #include "Catch.h" @@ -31,6 +32,8 @@ #include "utils/file/FileUtils.h" #include "utils/TestUtils.h" +namespace org::apache::nifi::minifi::processors::test { + TEST_CASE("Script engine is not set", "[executescriptMisconfiguration]") { TestController testController; auto plan = testController.createPlan(); @@ -454,3 +457,21 @@ TEST_CASE("Lua: Non existent script file should throw", "[executescriptLuaNonExi logTestController.reset(); } + +TEST_CASE("Lua can remove flowfiles", "[ExecuteScript]") { + const auto execute_script = std::make_shared<ExecuteScript>("ExecuteScript"); + + minifi::test::SingleProcessorTestController controller{execute_script}; + LogTestController::getInstance().setTrace<minifi::processors::ExecuteScript>(); + execute_script->setProperty(ExecuteScript::ScriptEngine, "lua"); + execute_script->setProperty(ExecuteScript::ScriptBody.getName(), + R"( + function onTrigger(context, session) + flow_file = session:get() + session:remove(flow_file) + end + )"); + REQUIRE_NOTHROW(controller.trigger("hello")); +} + +} // namespace org::apache::nifi::minifi::processors::test diff --git a/extensions/script/tests/TestExecuteScriptProcessorWithPythonScript.cpp b/extensions/script/tests/TestExecuteScriptProcessorWithPythonScript.cpp index b03dd0844..a1d803765 100644 --- a/extensions/script/tests/TestExecuteScriptProcessorWithPythonScript.cpp +++ b/extensions/script/tests/TestExecuteScriptProcessorWithPythonScript.cpp @@ -20,6 +20,7 @@ #include <string> #include <set> +#include "SingleProcessorTestController.h" #include "TestBase.h" #include "Catch.h" @@ -31,6 +32,8 @@ #include "utils/file/PathUtils.h" #include "utils/TestUtils.h" +namespace org::apache::nifi::minifi::processors::test { + TEST_CASE("Script engine is not set", "[executescriptMisconfiguration]") { TestController test_controller; auto plan = test_controller.createPlan(); @@ -407,3 +410,20 @@ TEST_CASE("Python: Non existent script file should throw", "[executescriptPython log_test_controller.reset(); } + +TEST_CASE("Python can remove flowfiles", "[ExecuteScript]") { + const auto execute_script = std::make_shared<ExecuteScript>("ExecuteScript"); + + minifi::test::SingleProcessorTestController controller{execute_script}; + LogTestController::getInstance().setTrace<minifi::processors::ExecuteScript>(); + execute_script->setProperty(ExecuteScript::ScriptEngine, "python"); + execute_script->setProperty(ExecuteScript::ScriptBody.getName(), + R"( + def onTrigger(context, session): + flow_file = session.get() + session.remove(flow_file); + )"); + REQUIRE_NOTHROW(controller.trigger("hello")); +} + +} // namespace org::apache::nifi::minifi::processors::test
