# HG changeset patch # User David Demelier # Date 1564085403 -7200 # Node ID 52f9ed8d530d8cb262f230b816b191d5f23d2558 # Parent 0a9b03e5239e4da51a682a42a3faa5657fbe54e4 irccd: fix logs.verbose setting ignored While here add a test case for loggers. diff -r 0a9b03e5239e -r 52f9ed8d530d libirccd-daemon/irccd/daemon/bot.cpp --- a/libirccd-daemon/irccd/daemon/bot.cpp Thu Jul 25 21:22:00 2019 +0000 +++ b/libirccd-daemon/irccd/daemon/bot.cpp Thu Jul 25 22:10:03 2019 +0200 @@ -155,8 +155,6 @@ if (sc.empty()) return; - sink_->set_verbose(string_util::is_identifier(sc.get("verbose").get_value())); - const auto type = sc.get("type").get_value(); if (!type.empty()) { @@ -168,6 +166,8 @@ else if (type != "console") sink_->warning("logs", "") << "invalid log type '" << type << std::endl; } + + sink_->set_verbose(string_util::is_boolean(sc.get("verbose").get_value())); } void bot::load_templates() diff -r 0a9b03e5239e -r 52f9ed8d530d tests/src/libirccd-daemon/logger/CMakeLists.txt --- a/tests/src/libirccd-daemon/logger/CMakeLists.txt Thu Jul 25 21:22:00 2019 +0000 +++ b/tests/src/libirccd-daemon/logger/CMakeLists.txt Thu Jul 25 22:10:03 2019 +0200 @@ -21,3 +21,8 @@ SOURCES main.cpp LIBRARIES libirccd ) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/logs-files.conf + ${CMAKE_CURRENT_BINARY_DIR}/logs-files.conf +) diff -r 0a9b03e5239e -r 52f9ed8d530d tests/src/libirccd-daemon/logger/logs-files.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/src/libirccd-daemon/logger/logs-files.conf Thu Jul 25 22:10:03 2019 +0200 @@ -0,0 +1,9 @@ +[templates] +info = "info: #{category}=#{message}" +warning = "warning: #{category}=#{message}" + +[logs] +type = "file" +verbose = true +path-logs = "@CMAKE_CURRENT_BINARY_DIR@/normal.txt" +path-errors = "@CMAKE_CURRENT_BINARY_DIR@/errors.txt" diff -r 0a9b03e5239e -r 52f9ed8d530d tests/src/libirccd-daemon/logger/main.cpp --- a/tests/src/libirccd-daemon/logger/main.cpp Thu Jul 25 21:22:00 2019 +0000 +++ b/tests/src/libirccd-daemon/logger/main.cpp Thu Jul 25 22:10:03 2019 +0200 @@ -17,11 +17,14 @@ */ #include +#include #define BOOST_TEST_MODULE "Logger" -#include +#include #include +#include +#include #include using boost::format; @@ -34,8 +37,7 @@ namespace { -class sample_sink : public sink { -public: +struct sample_sink : public sink { std::string line_debug; std::string line_info; std::string line_warning; @@ -56,8 +58,7 @@ } }; -class sample_filter : public filter { -public: +struct sample_filter : public filter { auto pre_debug(std::string_view category, std::string_view component, std::string_view message) const -> std::string override @@ -129,6 +130,41 @@ BOOST_AUTO_TEST_SUITE_END() +BOOST_AUTO_TEST_SUITE(logger_config_test_suite) + +BOOST_AUTO_TEST_CASE(files) +{ + boost::asio::io_context context; + daemon::bot bot{context, CMAKE_CURRENT_BINARY_DIR "/logs-files.conf"}; + + unlink(CMAKE_CURRENT_BINARY_DIR "/normal.txt"); + unlink(CMAKE_CURRENT_BINARY_DIR "/errors.txt"); + + bot.load(); + bot.get_log().info("INFO", "123") << "this is an info" << std::endl; + bot.get_log().warning("WARNING", "456") << "this is a warning" << std::endl; + + { + std::ifstream info(CMAKE_CURRENT_BINARY_DIR "/normal.txt"); + std::string line; + + // First line is too early to detect templates. + std::getline(info, line); + std::getline(info, line); + BOOST_TEST(line == "info: INFO=this is an info"); + } + + { + std::ifstream info(CMAKE_CURRENT_BINARY_DIR "/errors.txt"); + std::string line; + + std::getline(info, line); + BOOST_TEST(line == "warning: WARNING=this is a warning"); + } +} + +BOOST_AUTO_TEST_SUITE_END() + } // !namespace } // !irccd