From 9395db968318ae7ace2bc5e12721cbcd0f1cecf3 Mon Sep 17 00:00:00 2001 From: "Andrew I. Christianson" Date: Sat, 4 Nov 2017 16:54:58 -0400 Subject: [PATCH] MINIFI-291 Added standard Lua packages to scripting environment --- extensions/script/ExecuteScript.cpp | 4 +-- extensions/script/lua/LuaScriptEngine.cpp | 9 +++++ .../script-tests/LuaExecuteScriptTests.cpp | 34 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/extensions/script/ExecuteScript.cpp b/extensions/script/ExecuteScript.cpp index 5590d3003c..2751267252 100644 --- a/extensions/script/ExecuteScript.cpp +++ b/extensions/script/ExecuteScript.cpp @@ -94,7 +94,7 @@ void ExecuteScript::onTrigger(const std::shared_ptr &conte // Use an existing engine, if one is available if (script_engine_q_.try_dequeue(engine)) { - logger_->log_info("Using available %s script engine instance", script_engine_); + logger_->log_debug("Using available %s script engine instance", script_engine_); } else { logger_->log_info("Creating new %s script instance", script_engine_); logger_->log_info("Approximately %d %s script instances created for this processor", @@ -144,7 +144,7 @@ void ExecuteScript::onTrigger(const std::shared_ptr &conte // Make engine available for use again if (script_engine_q_.size_approx() < getMaxConcurrentTasks()) { - logger_->log_info("Releasing %s script engine", script_engine_); + logger_->log_debug("Releasing %s script engine", script_engine_); script_engine_q_.enqueue(engine); } else { logger_->log_info("Destroying script engine because it is no longer needed"); diff --git a/extensions/script/lua/LuaScriptEngine.cpp b/extensions/script/lua/LuaScriptEngine.cpp index 718014b4ce..9d1a7f5d3f 100644 --- a/extensions/script/lua/LuaScriptEngine.cpp +++ b/extensions/script/lua/LuaScriptEngine.cpp @@ -31,6 +31,15 @@ namespace lua { LuaScriptEngine::LuaScriptEngine() : lua_() { + lua_.open_libraries(sol::lib::base, + sol::lib::os, + sol::lib::coroutine, + sol::lib::math, + sol::lib::io, + sol::lib::string, + sol::lib::table, + sol::lib::utf8, + sol::lib::package); lua_.new_usertype( "Logger", "info", &core::logging::Logger::log_info<>); diff --git a/libminifi/test/script-tests/LuaExecuteScriptTests.cpp b/libminifi/test/script-tests/LuaExecuteScriptTests.cpp index 57bcda1062..fa294dcd69 100644 --- a/libminifi/test/script-tests/LuaExecuteScriptTests.cpp +++ b/libminifi/test/script-tests/LuaExecuteScriptTests.cpp @@ -336,3 +336,37 @@ TEST_CASE("Lua: Test Create", "[executescriptLuaCreate]") { // NOLINT logTestController.reset(); } + +TEST_CASE("Lua: Test Require", "[executescriptLuaRequire]") { // NOLINT + TestController testController; + + LogTestController &logTestController = LogTestController::getInstance(); + logTestController.setDebug(); + logTestController.setDebug(); + + auto plan = testController.createPlan(); + + auto executeScript = plan->addProcessor("ExecuteScript", + "executeScript"); + + plan->setProperty(executeScript, processors::ExecuteScript::ScriptEngine.getName(), "lua"); + plan->setProperty(executeScript, processors::ExecuteScript::ScriptBody.getName(), R"( + require 'os' + require 'coroutine' + require 'math' + require 'io' + require 'string' + require 'table' + require 'package' + + log:info('OK') + )"); + + plan->reset(); + + testController.runSession(plan, false); + + REQUIRE(LogTestController::getInstance().contains("[info] OK")); + + logTestController.reset(); +}