1 2 #include "includes.h" 3 #include "test_sink.h" 4 5 #include <spdlog/cfg/env.h> 6 #include <spdlog/cfg/argv.h> 7 8 using spdlog::cfg::load_argv_levels; 9 using spdlog::cfg::load_env_levels; 10 using spdlog::sinks::test_sink_st; 11 12 TEST_CASE("env", "[cfg]") 13 { 14 spdlog::drop("l1"); 15 auto l1 = spdlog::create<test_sink_st>("l1"); 16 #ifdef CATCH_PLATFORM_WINDOWS 17 _putenv_s("SPDLOG_LEVEL", "l1=warn"); 18 #else 19 setenv("SPDLOG_LEVEL", "l1=warn", 1); 20 #endif 21 load_env_levels(); 22 REQUIRE(l1->level() == spdlog::level::warn); 23 spdlog::set_default_logger(spdlog::create<test_sink_st>("cfg-default")); 24 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 25 } 26 27 TEST_CASE("argv1", "[cfg]") 28 { 29 spdlog::drop("l1"); 30 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn"}; 31 load_argv_levels(2, argv); 32 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 33 REQUIRE(l1->level() == spdlog::level::warn); 34 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 35 } 36 37 TEST_CASE("argv2", "[cfg]") 38 { 39 spdlog::drop("l1"); 40 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=warn,trace"}; 41 load_argv_levels(2, argv); 42 auto l1 = spdlog::create<test_sink_st>("l1"); 43 REQUIRE(l1->level() == spdlog::level::warn); 44 REQUIRE(spdlog::default_logger()->level() == spdlog::level::trace); 45 } 46 47 TEST_CASE("argv3", "[cfg]") 48 { 49 spdlog::set_level(spdlog::level::trace); 50 51 spdlog::drop("l1"); 52 const char *argv[] = {"ignore", "SPDLOG_LEVEL=junk_name=warn"}; 53 load_argv_levels(2, argv); 54 auto l1 = spdlog::create<test_sink_st>("l1"); 55 REQUIRE(l1->level() == spdlog::level::trace); 56 REQUIRE(spdlog::default_logger()->level() == spdlog::level::trace); 57 } 58 59 TEST_CASE("argv4", "[cfg]") 60 { 61 spdlog::set_level(spdlog::level::info); 62 spdlog::drop("l1"); 63 const char *argv[] = {"ignore", "SPDLOG_LEVEL=junk"}; 64 load_argv_levels(2, argv); 65 auto l1 = spdlog::create<test_sink_st>("l1"); 66 REQUIRE(l1->level() == spdlog::level::info); 67 } 68 69 TEST_CASE("argv5", "[cfg]") 70 { 71 spdlog::set_level(spdlog::level::info); 72 spdlog::drop("l1"); 73 const char *argv[] = {"ignore", "ignore", "SPDLOG_LEVEL=l1=warn,trace"}; 74 load_argv_levels(3, argv); 75 auto l1 = spdlog::create<test_sink_st>("l1"); 76 REQUIRE(l1->level() == spdlog::level::warn); 77 REQUIRE(spdlog::default_logger()->level() == spdlog::level::trace); 78 spdlog::set_level(spdlog::level::info); 79 } 80 81 TEST_CASE("argv6", "[cfg]") 82 { 83 spdlog::set_level(spdlog::level::err); 84 const char *argv[] = {""}; 85 load_argv_levels(1, argv); 86 REQUIRE(spdlog::default_logger()->level() == spdlog::level::err); 87 spdlog::set_level(spdlog::level::info); 88 } 89 90 TEST_CASE("argv7", "[cfg]") 91 { 92 spdlog::set_level(spdlog::level::err); 93 const char *argv[] = {""}; 94 load_argv_levels(0, argv); 95 REQUIRE(spdlog::default_logger()->level() == spdlog::level::err); 96 spdlog::set_level(spdlog::level::info); 97 } 98 99 TEST_CASE("level-not-set-test1", "[cfg]") 100 { 101 spdlog::drop("l1"); 102 const char *argv[] = {"ignore", ""}; 103 load_argv_levels(2, argv); 104 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 105 l1->set_level(spdlog::level::trace); 106 REQUIRE(l1->level() == spdlog::level::trace); 107 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 108 } 109 110 TEST_CASE("level-not-set-test2", "[cfg]") 111 { 112 spdlog::drop("l1"); 113 spdlog::drop("l2"); 114 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"}; 115 116 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 117 l1->set_level(spdlog::level::warn); 118 auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2"); 119 l2->set_level(spdlog::level::warn); 120 121 load_argv_levels(2, argv); 122 123 REQUIRE(l1->level() == spdlog::level::trace); 124 REQUIRE(l2->level() == spdlog::level::warn); 125 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 126 } 127 128 TEST_CASE("level-not-set-test3", "[cfg]") 129 { 130 spdlog::drop("l1"); 131 spdlog::drop("l2"); 132 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace"}; 133 134 load_argv_levels(2, argv); 135 136 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 137 auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2"); 138 139 REQUIRE(l1->level() == spdlog::level::trace); 140 REQUIRE(l2->level() == spdlog::level::info); 141 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 142 } 143 144 TEST_CASE("level-not-set-test4", "[cfg]") 145 { 146 spdlog::drop("l1"); 147 spdlog::drop("l2"); 148 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=trace,warn"}; 149 150 load_argv_levels(2, argv); 151 152 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 153 auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2"); 154 155 REQUIRE(l1->level() == spdlog::level::trace); 156 REQUIRE(l2->level() == spdlog::level::warn); 157 REQUIRE(spdlog::default_logger()->level() == spdlog::level::warn); 158 } 159 160 TEST_CASE("level-not-set-test5", "[cfg]") 161 { 162 spdlog::drop("l1"); 163 spdlog::drop("l2"); 164 const char *argv[] = {"ignore", "SPDLOG_LEVEL=l1=junk,warn"}; 165 166 load_argv_levels(2, argv); 167 168 auto l1 = spdlog::create<spdlog::sinks::test_sink_st>("l1"); 169 auto l2 = spdlog::create<spdlog::sinks::test_sink_st>("l2"); 170 171 REQUIRE(l1->level() == spdlog::level::warn); 172 REQUIRE(l2->level() == spdlog::level::warn); 173 REQUIRE(spdlog::default_logger()->level() == spdlog::level::warn); 174 } 175 176 TEST_CASE("restore-to-default", "[cfg]") 177 { 178 spdlog::drop("l1"); 179 spdlog::drop("l2"); 180 const char *argv[] = {"ignore", "SPDLOG_LEVEL=info"}; 181 load_argv_levels(2, argv); 182 REQUIRE(spdlog::default_logger()->level() == spdlog::level::info); 183 } 184