From 07fb92733edd72b0014d8d920d577da6b8a879c4 Mon Sep 17 00:00:00 2001 From: Lisa Julia Nebel Date: Tue, 21 Jan 2025 20:19:48 +0100 Subject: [PATCH] Add test to check if logger works from embedded Python code --- CMakeLists_files.cmake | 1 + tests/logger.py | 10 ++++++++++ tests/parser/PYACTION.cpp | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 tests/logger.py diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index 1eac974ab9d..55d40695b13 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -700,6 +700,7 @@ if(ENABLE_ECL_OUTPUT) tests/SPE1CASE2_RESTART_SKIPREST.DATA tests/SPE1CASE2.X0060 tests/PYACTION.DATA + tests/logger.py tests/0A4_GRCTRL_LRAT_LRAT_GGR_BASE_MODEL2_MSW_ALL.DATA tests/MOD4_TEST_IGRP-DATA.DATA tests/2_WLIFT_MODEL5_NOINC.DATA diff --git a/tests/logger.py b/tests/logger.py new file mode 100644 index 00000000000..29fec605421 --- /dev/null +++ b/tests/logger.py @@ -0,0 +1,10 @@ +# The python code in this file does the same as ACT-01 to ACT-05 of opm-tests/actionx/ACTIONX_WCONPROD.DATA +import opm_embedded + +opm_embedded.OpmLog.info("Info from logger.py!") +opm_embedded.OpmLog.warning("Warning from logger.py!") +opm_embedded.OpmLog.error("Error from logger.py!") +opm_embedded.OpmLog.problem("Problem from logger.py!") +opm_embedded.OpmLog.bug("Bug from logger.py!") +opm_embedded.OpmLog.debug("Debug from logger.py!") +opm_embedded.OpmLog.note("Note from logger.py!") diff --git a/tests/parser/PYACTION.cpp b/tests/parser/PYACTION.cpp index 2fe023e8915..7db443ada48 100644 --- a/tests/parser/PYACTION.cpp +++ b/tests/parser/PYACTION.cpp @@ -30,6 +30,9 @@ #include #include +#include +#include + using namespace Opm; BOOST_AUTO_TEST_CASE(ParsePYACTION) { @@ -86,5 +89,36 @@ BOOST_AUTO_TEST_CASE(ParsePYACTION_ModuleMissing) { BOOST_CHECK_THROW(Action::PyAction(python , "ACT2", run_count, missing_module), std::invalid_argument); } +BOOST_AUTO_TEST_CASE(PYACTION_Log) { + std::ostringstream log_stream; // Custom stream for capturing log messages + std::shared_ptr stream_log = std::make_shared(log_stream, Opm::Log::DefaultMessageTypes); + + OpmLog::addBackend( "STREAM" , stream_log); + + Parser parser; + auto deck = parser.parseFile("PYACTION.DATA"); + const std::string& logger_module = deck.makeDeckPath("logger.py"); + + auto python = std::make_shared(); + Action::PyAction pyaction(python , "ACT3", Action::PyAction::RunCount::unlimited, logger_module); + + const std::function&)> actionx_callback; + EclipseState state; + Schedule schedule; + SummaryState summary_state; + + pyaction.run(state, schedule, 0, summary_state, actionx_callback); + std::string log_output = log_stream.str(); + + BOOST_CHECK(log_output.find("Info from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Warning from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Error from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Problem from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Bug from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Debug from logger.py!") != std::string::npos); + BOOST_CHECK(log_output.find("Note from logger.py!") != std::string::npos); + +} + #endif