1
2#include "includes.h"
3#include "test_sink.h"
4
5#include <spdlog/cfg/env.h>
6#include <spdlog/cfg/argv.h>
7
8using spdlog::cfg::load_argv_levels;
9using spdlog::cfg::load_env_levels;
10using spdlog::sinks::test_sink_st;
11
12TEST_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
27TEST_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
37TEST_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
47TEST_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
59TEST_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
69TEST_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
81TEST_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
90TEST_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
99TEST_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
110TEST_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
128TEST_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
144TEST_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
160TEST_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
176TEST_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