changeset 867:52f9ed8d530d

irccd: fix logs.verbose setting ignored While here add a test case for loggers.
author David Demelier <markand@malikania.fr>
date Thu, 25 Jul 2019 22:10:03 +0200
parents 0a9b03e5239e
children 7619105cc818
files libirccd-daemon/irccd/daemon/bot.cpp tests/src/libirccd-daemon/logger/CMakeLists.txt tests/src/libirccd-daemon/logger/logs-files.conf tests/src/libirccd-daemon/logger/main.cpp
diffstat 4 files changed, 57 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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()
--- 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
+)
--- /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"
--- 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 <algorithm>
+#include <fstream>
 
 #define BOOST_TEST_MODULE "Logger"
-#include <boost/test/unit_test.hpp>
+#include <boost/asio.hpp>
 #include <boost/format.hpp>
+#include <boost/test/unit_test.hpp>
 
+#include <irccd/daemon/bot.hpp>
 #include <irccd/daemon/logger.hpp>
 
 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