xref: /freebsd-src/contrib/kyua/utils/logging/operations_test.cpp (revision b0d29bc47dba79f6f38e67eabadfb4b32ffd9390)
1*b0d29bc4SBrooks Davis // Copyright 2011 The Kyua Authors.
2*b0d29bc4SBrooks Davis // All rights reserved.
3*b0d29bc4SBrooks Davis //
4*b0d29bc4SBrooks Davis // Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis // modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis // met:
7*b0d29bc4SBrooks Davis //
8*b0d29bc4SBrooks Davis // * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis // * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis //   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis // * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis //   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis //   without specific prior written permission.
16*b0d29bc4SBrooks Davis //
17*b0d29bc4SBrooks Davis // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis 
29*b0d29bc4SBrooks Davis #include "utils/logging/operations.hpp"
30*b0d29bc4SBrooks Davis 
31*b0d29bc4SBrooks Davis extern "C" {
32*b0d29bc4SBrooks Davis #include <unistd.h>
33*b0d29bc4SBrooks Davis }
34*b0d29bc4SBrooks Davis 
35*b0d29bc4SBrooks Davis #include <fstream>
36*b0d29bc4SBrooks Davis #include <string>
37*b0d29bc4SBrooks Davis 
38*b0d29bc4SBrooks Davis #include <atf-c++.hpp>
39*b0d29bc4SBrooks Davis 
40*b0d29bc4SBrooks Davis #include "utils/datetime.hpp"
41*b0d29bc4SBrooks Davis #include "utils/format/macros.hpp"
42*b0d29bc4SBrooks Davis #include "utils/fs/operations.hpp"
43*b0d29bc4SBrooks Davis #include "utils/fs/path.hpp"
44*b0d29bc4SBrooks Davis 
45*b0d29bc4SBrooks Davis namespace datetime = utils::datetime;
46*b0d29bc4SBrooks Davis namespace fs = utils::fs;
47*b0d29bc4SBrooks Davis namespace logging = utils::logging;
48*b0d29bc4SBrooks Davis 
49*b0d29bc4SBrooks Davis 
50*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(generate_log_name__before_log);
ATF_TEST_CASE_BODY(generate_log_name__before_log)51*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(generate_log_name__before_log)
52*b0d29bc4SBrooks Davis {
53*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 0, 0);
54*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("/some/dir/foobar.20110221-181000.log"),
55*b0d29bc4SBrooks Davis                    logging::generate_log_name(fs::path("/some/dir"), "foobar"));
56*b0d29bc4SBrooks Davis 
57*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 1, 987654);
58*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file", 123, "A message");
59*b0d29bc4SBrooks Davis 
60*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 2, 123);
61*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("/some/dir/foobar.20110221-181000.log"),
62*b0d29bc4SBrooks Davis                    logging::generate_log_name(fs::path("/some/dir"), "foobar"));
63*b0d29bc4SBrooks Davis }
64*b0d29bc4SBrooks Davis 
65*b0d29bc4SBrooks Davis 
66*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(generate_log_name__after_log);
ATF_TEST_CASE_BODY(generate_log_name__after_log)67*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(generate_log_name__after_log)
68*b0d29bc4SBrooks Davis {
69*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 15, 0, 0);
70*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file", 123, "A message");
71*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 15, 1, 987654);
72*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file", 123, "A message");
73*b0d29bc4SBrooks Davis 
74*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 15, 2, 123);
75*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("/some/dir/foobar.20110221-181500.log"),
76*b0d29bc4SBrooks Davis                    logging::generate_log_name(fs::path("/some/dir"), "foobar"));
77*b0d29bc4SBrooks Davis 
78*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 15, 3, 1);
79*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file", 123, "A message");
80*b0d29bc4SBrooks Davis 
81*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 15, 4, 91);
82*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(fs::path("/some/dir/foobar.20110221-181500.log"),
83*b0d29bc4SBrooks Davis                    logging::generate_log_name(fs::path("/some/dir"), "foobar"));
84*b0d29bc4SBrooks Davis }
85*b0d29bc4SBrooks Davis 
86*b0d29bc4SBrooks Davis 
87*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(log);
ATF_TEST_CASE_BODY(log)88*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(log)
89*b0d29bc4SBrooks Davis {
90*b0d29bc4SBrooks Davis     logging::set_inmemory();
91*b0d29bc4SBrooks Davis 
92*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 0, 0);
93*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "f1", 1, "Debug message");
94*b0d29bc4SBrooks Davis 
95*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 1, 987654);
96*b0d29bc4SBrooks Davis     logging::log(logging::level_error, "f2", 2, "Error message");
97*b0d29bc4SBrooks Davis 
98*b0d29bc4SBrooks Davis     logging::set_persistency("debug", fs::path("test.log"));
99*b0d29bc4SBrooks Davis 
100*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 2, 123);
101*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "f3", 3, "Info message");
102*b0d29bc4SBrooks Davis 
103*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 10, 3, 456);
104*b0d29bc4SBrooks Davis     logging::log(logging::level_warning, "f4", 4, "Warning message");
105*b0d29bc4SBrooks Davis 
106*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
107*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
108*b0d29bc4SBrooks Davis 
109*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
110*b0d29bc4SBrooks Davis 
111*b0d29bc4SBrooks Davis     std::string line;
112*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
113*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
114*b0d29bc4SBrooks Davis         (F("20110221-181000 D %s f1:1: Debug message") % pid).str(), line);
115*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
116*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
117*b0d29bc4SBrooks Davis         (F("20110221-181001 E %s f2:2: Error message") % pid).str(), line);
118*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
119*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
120*b0d29bc4SBrooks Davis         (F("20110221-181002 I %s f3:3: Info message") % pid).str(), line);
121*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
122*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
123*b0d29bc4SBrooks Davis         (F("20110221-181003 W %s f4:4: Warning message") % pid).str(), line);
124*b0d29bc4SBrooks Davis }
125*b0d29bc4SBrooks Davis 
126*b0d29bc4SBrooks Davis 
127*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_inmemory__reset);
ATF_TEST_CASE_BODY(set_inmemory__reset)128*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_inmemory__reset)
129*b0d29bc4SBrooks Davis {
130*b0d29bc4SBrooks Davis     logging::set_persistency("debug", fs::path("test.log"));
131*b0d29bc4SBrooks Davis 
132*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 20, 0, 654321);
133*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "file", 123, "Debug message");
134*b0d29bc4SBrooks Davis     logging::set_inmemory();
135*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "file", 123, "Debug message 2");
136*b0d29bc4SBrooks Davis 
137*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
138*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
139*b0d29bc4SBrooks Davis 
140*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
141*b0d29bc4SBrooks Davis 
142*b0d29bc4SBrooks Davis     std::string line;
143*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
144*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
145*b0d29bc4SBrooks Davis         (F("20110221-182000 D %s file:123: Debug message") % pid).str(), line);
146*b0d29bc4SBrooks Davis }
147*b0d29bc4SBrooks Davis 
148*b0d29bc4SBrooks Davis 
149*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_persistency__no_backlog);
ATF_TEST_CASE_BODY(set_persistency__no_backlog)150*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__no_backlog)
151*b0d29bc4SBrooks Davis {
152*b0d29bc4SBrooks Davis     logging::set_persistency("debug", fs::path("test.log"));
153*b0d29bc4SBrooks Davis 
154*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 2, 21, 18, 20, 0, 654321);
155*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "file", 123, "Debug message");
156*b0d29bc4SBrooks Davis 
157*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
158*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
159*b0d29bc4SBrooks Davis 
160*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
161*b0d29bc4SBrooks Davis 
162*b0d29bc4SBrooks Davis     std::string line;
163*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
164*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
165*b0d29bc4SBrooks Davis         (F("20110221-182000 D %s file:123: Debug message") % pid).str(), line);
166*b0d29bc4SBrooks Davis }
167*b0d29bc4SBrooks Davis 
168*b0d29bc4SBrooks Davis 
169*b0d29bc4SBrooks Davis /// Creates a log for testing purposes, buffering messages on start.
170*b0d29bc4SBrooks Davis ///
171*b0d29bc4SBrooks Davis /// \param level The level of the desired log.
172*b0d29bc4SBrooks Davis /// \param path The output file.
173*b0d29bc4SBrooks Davis static void
create_log(const std::string & level,const std::string & path)174*b0d29bc4SBrooks Davis create_log(const std::string& level, const std::string& path)
175*b0d29bc4SBrooks Davis {
176*b0d29bc4SBrooks Davis     logging::set_inmemory();
177*b0d29bc4SBrooks Davis 
178*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 0, 100);
179*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "file1", 11, "Debug 1");
180*b0d29bc4SBrooks Davis 
181*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 1, 200);
182*b0d29bc4SBrooks Davis     logging::log(logging::level_error, "file2", 22, "Error 1");
183*b0d29bc4SBrooks Davis 
184*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 2, 300);
185*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file3", 33, "Info 1");
186*b0d29bc4SBrooks Davis 
187*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 3, 400);
188*b0d29bc4SBrooks Davis     logging::log(logging::level_warning, "file4", 44, "Warning 1");
189*b0d29bc4SBrooks Davis 
190*b0d29bc4SBrooks Davis     logging::set_persistency(level, fs::path(path));
191*b0d29bc4SBrooks Davis 
192*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 4, 500);
193*b0d29bc4SBrooks Davis     logging::log(logging::level_debug, "file1", 11, "Debug 2");
194*b0d29bc4SBrooks Davis 
195*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 5, 600);
196*b0d29bc4SBrooks Davis     logging::log(logging::level_error, "file2", 22, "Error 2");
197*b0d29bc4SBrooks Davis 
198*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 6, 700);
199*b0d29bc4SBrooks Davis     logging::log(logging::level_info, "file3", 33, "Info 2");
200*b0d29bc4SBrooks Davis 
201*b0d29bc4SBrooks Davis     datetime::set_mock_now(2011, 3, 19, 11, 40, 7, 800);
202*b0d29bc4SBrooks Davis     logging::log(logging::level_warning, "file4", 44, "Warning 2");
203*b0d29bc4SBrooks Davis }
204*b0d29bc4SBrooks Davis 
205*b0d29bc4SBrooks Davis 
206*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_persistency__some_backlog__debug);
ATF_TEST_CASE_BODY(set_persistency__some_backlog__debug)207*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__some_backlog__debug)
208*b0d29bc4SBrooks Davis {
209*b0d29bc4SBrooks Davis     create_log("debug", "test.log");
210*b0d29bc4SBrooks Davis 
211*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
212*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
213*b0d29bc4SBrooks Davis 
214*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
215*b0d29bc4SBrooks Davis 
216*b0d29bc4SBrooks Davis     std::string line;
217*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
218*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
219*b0d29bc4SBrooks Davis         (F("20110319-114000 D %s file1:11: Debug 1") % pid).str(), line);
220*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
221*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
222*b0d29bc4SBrooks Davis         (F("20110319-114001 E %s file2:22: Error 1") % pid).str(), line);
223*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
224*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
225*b0d29bc4SBrooks Davis         (F("20110319-114002 I %s file3:33: Info 1") % pid).str(), line);
226*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
227*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
228*b0d29bc4SBrooks Davis         (F("20110319-114003 W %s file4:44: Warning 1") % pid).str(), line);
229*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
230*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
231*b0d29bc4SBrooks Davis         (F("20110319-114004 D %s file1:11: Debug 2") % pid).str(), line);
232*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
233*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
234*b0d29bc4SBrooks Davis         (F("20110319-114005 E %s file2:22: Error 2") % pid).str(), line);
235*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
236*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
237*b0d29bc4SBrooks Davis         (F("20110319-114006 I %s file3:33: Info 2") % pid).str(), line);
238*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
239*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
240*b0d29bc4SBrooks Davis         (F("20110319-114007 W %s file4:44: Warning 2") % pid).str(), line);
241*b0d29bc4SBrooks Davis }
242*b0d29bc4SBrooks Davis 
243*b0d29bc4SBrooks Davis 
244*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_persistency__some_backlog__error);
ATF_TEST_CASE_BODY(set_persistency__some_backlog__error)245*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__some_backlog__error)
246*b0d29bc4SBrooks Davis {
247*b0d29bc4SBrooks Davis     create_log("error", "test.log");
248*b0d29bc4SBrooks Davis 
249*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
250*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
251*b0d29bc4SBrooks Davis 
252*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
253*b0d29bc4SBrooks Davis 
254*b0d29bc4SBrooks Davis     std::string line;
255*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
256*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
257*b0d29bc4SBrooks Davis         (F("20110319-114001 E %s file2:22: Error 1") % pid).str(), line);
258*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
259*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
260*b0d29bc4SBrooks Davis         (F("20110319-114005 E %s file2:22: Error 2") % pid).str(), line);
261*b0d29bc4SBrooks Davis }
262*b0d29bc4SBrooks Davis 
263*b0d29bc4SBrooks Davis 
264*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_persistency__some_backlog__info);
ATF_TEST_CASE_BODY(set_persistency__some_backlog__info)265*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__some_backlog__info)
266*b0d29bc4SBrooks Davis {
267*b0d29bc4SBrooks Davis     create_log("info", "test.log");
268*b0d29bc4SBrooks Davis 
269*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
270*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
271*b0d29bc4SBrooks Davis 
272*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
273*b0d29bc4SBrooks Davis 
274*b0d29bc4SBrooks Davis     std::string line;
275*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
276*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
277*b0d29bc4SBrooks Davis         (F("20110319-114001 E %s file2:22: Error 1") % pid).str(), line);
278*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
279*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
280*b0d29bc4SBrooks Davis         (F("20110319-114002 I %s file3:33: Info 1") % pid).str(), line);
281*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
282*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
283*b0d29bc4SBrooks Davis         (F("20110319-114003 W %s file4:44: Warning 1") % pid).str(), line);
284*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
285*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
286*b0d29bc4SBrooks Davis         (F("20110319-114005 E %s file2:22: Error 2") % pid).str(), line);
287*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
288*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
289*b0d29bc4SBrooks Davis         (F("20110319-114006 I %s file3:33: Info 2") % pid).str(), line);
290*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
291*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
292*b0d29bc4SBrooks Davis         (F("20110319-114007 W %s file4:44: Warning 2") % pid).str(), line);
293*b0d29bc4SBrooks Davis }
294*b0d29bc4SBrooks Davis 
295*b0d29bc4SBrooks Davis 
296*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(set_persistency__some_backlog__warning);
ATF_TEST_CASE_BODY(set_persistency__some_backlog__warning)297*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__some_backlog__warning)
298*b0d29bc4SBrooks Davis {
299*b0d29bc4SBrooks Davis     create_log("warning", "test.log");
300*b0d29bc4SBrooks Davis 
301*b0d29bc4SBrooks Davis     std::ifstream input("test.log");
302*b0d29bc4SBrooks Davis     ATF_REQUIRE(input);
303*b0d29bc4SBrooks Davis 
304*b0d29bc4SBrooks Davis     const pid_t pid = ::getpid();
305*b0d29bc4SBrooks Davis 
306*b0d29bc4SBrooks Davis     std::string line;
307*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
308*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
309*b0d29bc4SBrooks Davis         (F("20110319-114001 E %s file2:22: Error 1") % pid).str(), line);
310*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
311*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
312*b0d29bc4SBrooks Davis         (F("20110319-114003 W %s file4:44: Warning 1") % pid).str(), line);
313*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
314*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
315*b0d29bc4SBrooks Davis         (F("20110319-114005 E %s file2:22: Error 2") % pid).str(), line);
316*b0d29bc4SBrooks Davis     ATF_REQUIRE(std::getline(input, line).good());
317*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(
318*b0d29bc4SBrooks Davis         (F("20110319-114007 W %s file4:44: Warning 2") % pid).str(), line);
319*b0d29bc4SBrooks Davis }
320*b0d29bc4SBrooks Davis 
321*b0d29bc4SBrooks Davis 
322*b0d29bc4SBrooks Davis ATF_TEST_CASE(set_persistency__fail);
ATF_TEST_CASE_HEAD(set_persistency__fail)323*b0d29bc4SBrooks Davis ATF_TEST_CASE_HEAD(set_persistency__fail)
324*b0d29bc4SBrooks Davis {
325*b0d29bc4SBrooks Davis     set_md_var("require.user", "unprivileged");
326*b0d29bc4SBrooks Davis }
ATF_TEST_CASE_BODY(set_persistency__fail)327*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(set_persistency__fail)
328*b0d29bc4SBrooks Davis {
329*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::range_error, "'foobar'",
330*b0d29bc4SBrooks Davis                          logging::set_persistency("foobar", fs::path("log")));
331*b0d29bc4SBrooks Davis 
332*b0d29bc4SBrooks Davis     fs::mkdir(fs::path("dir"), 0644);
333*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(std::runtime_error, "dir/fail.log",
334*b0d29bc4SBrooks Davis                          logging::set_persistency("debug",
335*b0d29bc4SBrooks Davis                                                   fs::path("dir/fail.log")));
336*b0d29bc4SBrooks Davis }
337*b0d29bc4SBrooks Davis 
338*b0d29bc4SBrooks Davis 
ATF_INIT_TEST_CASES(tcs)339*b0d29bc4SBrooks Davis ATF_INIT_TEST_CASES(tcs)
340*b0d29bc4SBrooks Davis {
341*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, generate_log_name__before_log);
342*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, generate_log_name__after_log);
343*b0d29bc4SBrooks Davis 
344*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, log);
345*b0d29bc4SBrooks Davis 
346*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_inmemory__reset);
347*b0d29bc4SBrooks Davis 
348*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__no_backlog);
349*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__some_backlog__debug);
350*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__some_backlog__error);
351*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__some_backlog__info);
352*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__some_backlog__warning);
353*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, set_persistency__fail);
354*b0d29bc4SBrooks Davis }
355