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