2
0
mirror of https://github.com/boostorg/redis.git synced 2026-01-19 04:42:09 +00:00
Files
redis/test/test_conn_logging.cpp
Anarthal (Rubén Pérez) f04d97ffa5 Updates the Logger interface to allow extensibility and type erasure (#273)
Removes all the logger::on_xxx functions
Removes the Logger template parameter to async_run
Adds a logger constructor that allows passing a std::function to customize logging behavior
Adds constructors to connection and basic_connection taking a logger
Deprecates config::logger_prefix
Deprecates the async_run overload taking a logger parameter
Deprecates the basic_connection::async_run overload not taking any config object
Deprecates the basic_connection::next_layer_type typedef
Makes the default log level logger::info
Makes the logging thread-safe
Cleans up deprecated functionality from examples
Adds docs on logging
Adds an example on how to integrate spdlog into Boost.Redis logging

close #213
2025-06-23 12:07:21 +02:00

160 lines
4.0 KiB
C++

//
// Copyright (c) 2025 Marcelo Zimbres Silva (mzimbres@gmail.com),
// Ruben Perez Hidalgo (rubenperez038 at gmail dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <boost/redis/config.hpp>
#include <boost/redis/connection.hpp>
#include <boost/redis/logger.hpp>
#include <boost/asio/io_context.hpp>
#include <boost/asio/ssl/context.hpp>
#include <boost/core/lightweight_test.hpp>
#include <boost/system/error_code.hpp>
#include "common.hpp"
#include <string>
#include <string_view>
#include <utility>
#include <vector>
using boost::system::error_code;
namespace net = boost::asio;
using namespace boost::redis;
namespace {
// user tests
// logging can be disabled
// logging can be changed verbosity
template <class Conn>
void run_with_invalid_config(net::io_context& ioc, Conn& conn)
{
config cfg;
cfg.use_ssl = true;
cfg.unix_socket = "/tmp/sock";
conn.async_run(cfg, [](error_code ec) {
BOOST_TEST_NE(ec, error_code());
});
ioc.run_for(test_timeout);
}
template <class Conn>
void test_connection_constructor_executor_1()
{
// Setup
net::io_context ioc;
std::vector<std::string> messages;
logger lgr(logger::level::info, [&](logger::level, std::string_view msg) {
messages.emplace_back(msg);
});
Conn conn{ioc.get_executor(), std::move(lgr)};
// Produce some logging
run_with_invalid_config(ioc, conn);
// Some logging was produced
BOOST_TEST_EQ(messages.size(), 1u);
}
template <class Conn>
void test_connection_constructor_context_1()
{
// Setup
net::io_context ioc;
std::vector<std::string> messages;
logger lgr(logger::level::info, [&](logger::level, std::string_view msg) {
messages.emplace_back(msg);
});
Conn conn{ioc, std::move(lgr)};
// Produce some logging
run_with_invalid_config(ioc, conn);
// Some logging was produced
BOOST_TEST_EQ(messages.size(), 1u);
}
template <class Conn>
void test_connection_constructor_executor_2()
{
// Setup
net::io_context ioc;
std::vector<std::string> messages;
logger lgr(logger::level::info, [&](logger::level, std::string_view msg) {
messages.emplace_back(msg);
});
Conn conn{
ioc.get_executor(),
net::ssl::context{net::ssl::context::tlsv12_client},
std::move(lgr)};
// Produce some logging
run_with_invalid_config(ioc, conn);
// Some logging was produced
BOOST_TEST_EQ(messages.size(), 1u);
}
template <class Conn>
void test_connection_constructor_context_2()
{
// Setup
net::io_context ioc;
std::vector<std::string> messages;
logger lgr(logger::level::info, [&](logger::level, std::string_view msg) {
messages.emplace_back(msg);
});
Conn conn{ioc, net::ssl::context{net::ssl::context::tlsv12_client}, std::move(lgr)};
// Produce some logging
run_with_invalid_config(ioc, conn);
// Some logging was produced
BOOST_TEST_EQ(messages.size(), 1u);
}
void test_disable_logging()
{
// Setup
net::io_context ioc;
std::vector<std::string> messages;
logger lgr(logger::level::disabled, [&](logger::level, std::string_view msg) {
messages.emplace_back(msg);
});
connection conn{ioc, std::move(lgr)};
// Produce some logging
run_with_invalid_config(ioc, conn);
// Some logging was produced
BOOST_TEST_EQ(messages.size(), 0u);
}
} // namespace
int main()
{
// basic_connection
using basic_conn_t = basic_connection<net::io_context::executor_type>;
test_connection_constructor_executor_1<basic_conn_t>();
test_connection_constructor_executor_2<basic_conn_t>();
test_connection_constructor_context_1<basic_conn_t>();
test_connection_constructor_context_2<basic_conn_t>();
// connection
test_connection_constructor_executor_1<connection>();
test_connection_constructor_executor_2<connection>();
test_connection_constructor_context_1<connection>();
test_connection_constructor_context_2<connection>();
test_disable_logging();
return boost::report_errors();
}