diff --git a/test/fuzz/fuzz_runner.cc b/test/fuzz/fuzz_runner.cc index df55dc341ac9..23d1108c07b7 100644 --- a/test/fuzz/fuzz_runner.cc +++ b/test/fuzz/fuzz_runner.cc @@ -9,21 +9,27 @@ namespace Envoy { namespace Fuzz { -void Runner::setupEnvironment(int argc, char** argv) { +spdlog::level::level_enum Runner::log_level_; + +void Runner::setupEnvironment(int argc, char** argv, spdlog::level::level_enum default_log_level) { Event::Libevent::Global::initialize(); TestEnvironment::initializeOptions(argc, argv); static auto* lock = new Thread::MutexBasicLockable(); const auto environment_log_level = TestEnvironment::getOptions().logLevel(); - Logger::Registry::initialize(std::min(environment_log_level, spdlog::level::info), - TestEnvironment::getOptions().logFormat(), *lock); + // We only override the default log level if it looks like we're debugging; + // otherwise the default environment log level might override the default and + // spew too much when running under a fuzz engine. + log_level_ = + environment_log_level <= spdlog::level::debug ? environment_log_level : default_log_level; + Logger::Registry::initialize(log_level_, TestEnvironment::getOptions().logFormat(), *lock); } } // namespace Fuzz } // namespace Envoy extern "C" int LLVMFuzzerInitialize(int* /*argc*/, char*** argv) { - Envoy::Fuzz::Runner::setupEnvironment(1, *argv); + Envoy::Fuzz::Runner::setupEnvironment(1, *argv, spdlog::level::off); return 0; } diff --git a/test/fuzz/fuzz_runner.h b/test/fuzz/fuzz_runner.h index 96d84d99bfde..e8c26497da59 100644 --- a/test/fuzz/fuzz_runner.h +++ b/test/fuzz/fuzz_runner.h @@ -6,6 +6,7 @@ // Bring in DEFINE_PROTO_FUZZER definition as per // https://github.com/google/libprotobuf-mutator#integrating-with-libfuzzer. #include "libprotobuf_mutator/src/libfuzzer/libfuzzer_macro.h" +#include "spdlog/spdlog.h" namespace Envoy { namespace Fuzz { @@ -17,8 +18,17 @@ class Runner { * invoked in this environment. * @param argc number of command-line args. * @param argv array of command-line args. + * @param default_loglevel default log level (overridable with -l). */ - static void setupEnvironment(int argc, char** argv); + static void setupEnvironment(int argc, char** argv, spdlog::level::level_enum default_log_level); + + /** + * @return spdlog::level::level_enum the log level for the fuzzer. + */ + static spdlog::level::level_enum logLevel() { return log_level_; } + +private: + static spdlog::level::level_enum log_level_; }; } // namespace Fuzz diff --git a/test/fuzz/main.cc b/test/fuzz/main.cc index f0158be3ecc7..991c8bf65268 100644 --- a/test/fuzz/main.cc +++ b/test/fuzz/main.cc @@ -51,6 +51,6 @@ int main(int argc, char** argv) { RELEASE_ASSERT(Envoy::Filesystem::directoryExists(corpus_path), ""); Envoy::test_corpus_ = Envoy::TestUtility::listFiles(corpus_path, true); testing::InitGoogleTest(&argc, argv); - Envoy::Fuzz::Runner::setupEnvironment(argc, argv); + Envoy::Fuzz::Runner::setupEnvironment(argc, argv, spdlog::level::info); return RUN_ALL_TESTS(); } diff --git a/test/mocks/server/mocks.cc b/test/mocks/server/mocks.cc index 4905f3bbdad4..65c55ba9f6e7 100644 --- a/test/mocks/server/mocks.cc +++ b/test/mocks/server/mocks.cc @@ -26,6 +26,7 @@ MockOptions::MockOptions(const std::string& config_path) : config_path_(config_p ON_CALL(*this, serviceClusterName()).WillByDefault(ReturnRef(service_cluster_name_)); ON_CALL(*this, serviceNodeName()).WillByDefault(ReturnRef(service_node_name_)); ON_CALL(*this, serviceZone()).WillByDefault(ReturnRef(service_zone_name_)); + ON_CALL(*this, logLevel()).WillByDefault(Return(log_level_)); ON_CALL(*this, logPath()).WillByDefault(ReturnRef(log_path_)); ON_CALL(*this, maxStats()).WillByDefault(Return(1000)); ON_CALL(*this, statsOptions()).WillByDefault(ReturnRef(stats_options_)); diff --git a/test/mocks/server/mocks.h b/test/mocks/server/mocks.h index b43691cbd2b1..3eadbf8e1cdd 100644 --- a/test/mocks/server/mocks.h +++ b/test/mocks/server/mocks.h @@ -80,6 +80,7 @@ class MockOptions : public Options { std::string service_cluster_name_; std::string service_node_name_; std::string service_zone_name_; + spdlog::level::level_enum log_level_{spdlog::level::trace}; std::string log_path_; Stats::StatsOptionsImpl stats_options_; bool hot_restart_disabled_{}; diff --git a/test/server/config_validation/config_fuzz_test.cc b/test/server/config_validation/config_fuzz_test.cc index 6ad1e6477cd1..96f9e82ce107 100644 --- a/test/server/config_validation/config_fuzz_test.cc +++ b/test/server/config_validation/config_fuzz_test.cc @@ -22,6 +22,7 @@ DEFINE_PROTO_FUZZER(const envoy::config::bootstrap::v2::Bootstrap& input) { bootstrap_file << input.DebugString(); options.config_path_ = bootstrap_path; options.v2_config_only_ = true; + options.log_level_ = Fuzz::Runner::logLevel(); try { validateConfig(options, Network::Address::InstanceConstSharedPtr(), component_factory); diff --git a/test/server/server_fuzz_test.cc b/test/server/server_fuzz_test.cc index 6b8d057ce682..afc1bed58e8e 100644 --- a/test/server/server_fuzz_test.cc +++ b/test/server/server_fuzz_test.cc @@ -33,6 +33,7 @@ DEFINE_PROTO_FUZZER(const envoy::config::bootstrap::v2::Bootstrap& input) { bootstrap_file << input.DebugString(); options.config_path_ = bootstrap_path; options.v2_config_only_ = true; + options.log_level_ = Fuzz::Runner::logLevel(); } try {