1*00b67f09SDavid van Moolenbroek /* $NetBSD: log_test.c,v 1.6 2014/12/10 04:37:53 christos Exp $ */
2*00b67f09SDavid van Moolenbroek
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek * Copyright (C) 2004, 2007, 2011, 2014 Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek * Copyright (C) 1999-2001 Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek *
7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek *
11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek */
19*00b67f09SDavid van Moolenbroek
20*00b67f09SDavid van Moolenbroek /* Id: log_test.c,v 1.29 2011/08/28 23:46:51 marka Exp */
21*00b67f09SDavid van Moolenbroek
22*00b67f09SDavid van Moolenbroek /* Principal Authors: DCL */
23*00b67f09SDavid van Moolenbroek
24*00b67f09SDavid van Moolenbroek #include <config.h>
25*00b67f09SDavid van Moolenbroek
26*00b67f09SDavid van Moolenbroek #include <stdlib.h>
27*00b67f09SDavid van Moolenbroek #include <unistd.h>
28*00b67f09SDavid van Moolenbroek
29*00b67f09SDavid van Moolenbroek #include <isc/commandline.h>
30*00b67f09SDavid van Moolenbroek #include <isc/mem.h>
31*00b67f09SDavid van Moolenbroek #include <isc/string.h>
32*00b67f09SDavid van Moolenbroek #include <isc/util.h>
33*00b67f09SDavid van Moolenbroek
34*00b67f09SDavid van Moolenbroek #include <dns/log.h>
35*00b67f09SDavid van Moolenbroek
36*00b67f09SDavid van Moolenbroek #define TEST_FILE "/tmp/test_log"
37*00b67f09SDavid van Moolenbroek #define SYSLOG_FILE "/var/log/daemon.log"
38*00b67f09SDavid van Moolenbroek #define FILE_VERSIONS 10
39*00b67f09SDavid van Moolenbroek
40*00b67f09SDavid van Moolenbroek char usage[] = "Usage: %s [-m] [-s syslog_logfile] [-r file_versions]\n";
41*00b67f09SDavid van Moolenbroek
42*00b67f09SDavid van Moolenbroek #define CHECK(expr) result = expr; \
43*00b67f09SDavid van Moolenbroek if (result != ISC_R_SUCCESS) { \
44*00b67f09SDavid van Moolenbroek fprintf(stderr, "%s: " #expr "%s: exiting\n", \
45*00b67f09SDavid van Moolenbroek progname, isc_result_totext(result)); \
46*00b67f09SDavid van Moolenbroek }
47*00b67f09SDavid van Moolenbroek
48*00b67f09SDavid van Moolenbroek int
main(int argc,char ** argv)49*00b67f09SDavid van Moolenbroek main(int argc, char **argv) {
50*00b67f09SDavid van Moolenbroek const char *progname, *syslog_file, *message;
51*00b67f09SDavid van Moolenbroek int ch, i, file_versions, stderr_line;
52*00b67f09SDavid van Moolenbroek isc_boolean_t show_final_mem = ISC_FALSE;
53*00b67f09SDavid van Moolenbroek isc_log_t *lctx;
54*00b67f09SDavid van Moolenbroek isc_logconfig_t *lcfg;
55*00b67f09SDavid van Moolenbroek isc_mem_t *mctx;
56*00b67f09SDavid van Moolenbroek isc_result_t result;
57*00b67f09SDavid van Moolenbroek isc_logdestination_t destination;
58*00b67f09SDavid van Moolenbroek const isc_logcategory_t *category;
59*00b67f09SDavid van Moolenbroek const isc_logmodule_t *module;
60*00b67f09SDavid van Moolenbroek
61*00b67f09SDavid van Moolenbroek progname = strrchr(*argv, '/');
62*00b67f09SDavid van Moolenbroek if (progname != NULL)
63*00b67f09SDavid van Moolenbroek progname++;
64*00b67f09SDavid van Moolenbroek else
65*00b67f09SDavid van Moolenbroek progname = *argv;
66*00b67f09SDavid van Moolenbroek
67*00b67f09SDavid van Moolenbroek syslog_file = SYSLOG_FILE;
68*00b67f09SDavid van Moolenbroek file_versions = FILE_VERSIONS;
69*00b67f09SDavid van Moolenbroek
70*00b67f09SDavid van Moolenbroek while ((ch = isc_commandline_parse(argc, argv, "ms:r:")) != -1) {
71*00b67f09SDavid van Moolenbroek switch (ch) {
72*00b67f09SDavid van Moolenbroek case 'm':
73*00b67f09SDavid van Moolenbroek show_final_mem = ISC_TRUE;
74*00b67f09SDavid van Moolenbroek break;
75*00b67f09SDavid van Moolenbroek case 's':
76*00b67f09SDavid van Moolenbroek syslog_file = isc_commandline_argument;
77*00b67f09SDavid van Moolenbroek break;
78*00b67f09SDavid van Moolenbroek case 'r':
79*00b67f09SDavid van Moolenbroek file_versions = atoi(isc_commandline_argument);
80*00b67f09SDavid van Moolenbroek if (file_versions < 0 &&
81*00b67f09SDavid van Moolenbroek file_versions != ISC_LOG_ROLLNEVER &&
82*00b67f09SDavid van Moolenbroek file_versions != ISC_LOG_ROLLINFINITE) {
83*00b67f09SDavid van Moolenbroek fprintf(stderr, "%s: file rotations must be "
84*00b67f09SDavid van Moolenbroek "%d (ISC_LOG_ROLLNEVER),\n\t"
85*00b67f09SDavid van Moolenbroek "%d (ISC_LOG_ROLLINFINITE) "
86*00b67f09SDavid van Moolenbroek "or > 0\n", progname,
87*00b67f09SDavid van Moolenbroek ISC_LOG_ROLLNEVER,
88*00b67f09SDavid van Moolenbroek ISC_LOG_ROLLINFINITE);
89*00b67f09SDavid van Moolenbroek exit(1);
90*00b67f09SDavid van Moolenbroek }
91*00b67f09SDavid van Moolenbroek break;
92*00b67f09SDavid van Moolenbroek case '?':
93*00b67f09SDavid van Moolenbroek fprintf(stderr, usage, progname);
94*00b67f09SDavid van Moolenbroek exit(1);
95*00b67f09SDavid van Moolenbroek }
96*00b67f09SDavid van Moolenbroek }
97*00b67f09SDavid van Moolenbroek
98*00b67f09SDavid van Moolenbroek argc -= isc_commandline_index;
99*00b67f09SDavid van Moolenbroek argv += isc_commandline_index;
100*00b67f09SDavid van Moolenbroek POST(argv);
101*00b67f09SDavid van Moolenbroek
102*00b67f09SDavid van Moolenbroek if (argc > 0) {
103*00b67f09SDavid van Moolenbroek fprintf(stderr, usage, progname);
104*00b67f09SDavid van Moolenbroek exit(1);
105*00b67f09SDavid van Moolenbroek }
106*00b67f09SDavid van Moolenbroek
107*00b67f09SDavid van Moolenbroek fprintf(stderr, "EXPECT:\n%s%d%s%s%s",
108*00b67f09SDavid van Moolenbroek "8 lines to stderr (first 4 numbered, #3 repeated)\n",
109*00b67f09SDavid van Moolenbroek file_versions == 0 || file_versions == ISC_LOG_ROLLNEVER ? 1 :
110*00b67f09SDavid van Moolenbroek file_versions > 0 ? file_versions + 1 : FILE_VERSIONS + 1,
111*00b67f09SDavid van Moolenbroek " " TEST_FILE " files, and\n",
112*00b67f09SDavid van Moolenbroek "2 lines to syslog\n",
113*00b67f09SDavid van Moolenbroek "lines ending with exclamation marks are errors\n\n");
114*00b67f09SDavid van Moolenbroek
115*00b67f09SDavid van Moolenbroek isc_log_opensyslog(progname, LOG_PID, LOG_DAEMON);
116*00b67f09SDavid van Moolenbroek
117*00b67f09SDavid van Moolenbroek mctx = NULL;
118*00b67f09SDavid van Moolenbroek lctx = NULL;
119*00b67f09SDavid van Moolenbroek lcfg = NULL;
120*00b67f09SDavid van Moolenbroek
121*00b67f09SDavid van Moolenbroek CHECK(isc_mem_create(0, 0, &mctx));
122*00b67f09SDavid van Moolenbroek CHECK(isc_log_create(mctx, &lctx, &lcfg));
123*00b67f09SDavid van Moolenbroek
124*00b67f09SDavid van Moolenbroek CHECK(isc_log_settag(lcfg, progname));
125*00b67f09SDavid van Moolenbroek
126*00b67f09SDavid van Moolenbroek isc_log_setcontext(lctx);
127*00b67f09SDavid van Moolenbroek dns_log_init(lctx);
128*00b67f09SDavid van Moolenbroek dns_log_setcontext(lctx);
129*00b67f09SDavid van Moolenbroek
130*00b67f09SDavid van Moolenbroek /*
131*00b67f09SDavid van Moolenbroek * Test isc_log_categorybyname and isc_log_modulebyname.
132*00b67f09SDavid van Moolenbroek */
133*00b67f09SDavid van Moolenbroek category = isc_log_categorybyname(lctx, "notify");
134*00b67f09SDavid van Moolenbroek if (category != NULL)
135*00b67f09SDavid van Moolenbroek fprintf(stderr, "%s category found. (expected)\n",
136*00b67f09SDavid van Moolenbroek category->name);
137*00b67f09SDavid van Moolenbroek else
138*00b67f09SDavid van Moolenbroek fprintf(stderr, "notify category not found!\n");
139*00b67f09SDavid van Moolenbroek
140*00b67f09SDavid van Moolenbroek module = isc_log_modulebyname(lctx, "xyzzy");
141*00b67f09SDavid van Moolenbroek if (module != NULL)
142*00b67f09SDavid van Moolenbroek fprintf(stderr, "%s module found!\n", module->name);
143*00b67f09SDavid van Moolenbroek else
144*00b67f09SDavid van Moolenbroek fprintf(stderr, "xyzzy module not found. (expected)\n");
145*00b67f09SDavid van Moolenbroek
146*00b67f09SDavid van Moolenbroek /*
147*00b67f09SDavid van Moolenbroek * Create a file channel to test file opening, size limiting and
148*00b67f09SDavid van Moolenbroek * version rolling.
149*00b67f09SDavid van Moolenbroek */
150*00b67f09SDavid van Moolenbroek
151*00b67f09SDavid van Moolenbroek destination.file.name = TEST_FILE;
152*00b67f09SDavid van Moolenbroek destination.file.maximum_size = 1;
153*00b67f09SDavid van Moolenbroek destination.file.versions = file_versions;
154*00b67f09SDavid van Moolenbroek
155*00b67f09SDavid van Moolenbroek CHECK(isc_log_createchannel(lcfg, "file_test", ISC_LOG_TOFILE,
156*00b67f09SDavid van Moolenbroek ISC_LOG_INFO, &destination,
157*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTTIME|
158*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTTAG|
159*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTLEVEL|
160*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTCATEGORY|
161*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTMODULE));
162*00b67f09SDavid van Moolenbroek
163*00b67f09SDavid van Moolenbroek /*
164*00b67f09SDavid van Moolenbroek * Create a dynamic debugging channel to a file descriptor.
165*00b67f09SDavid van Moolenbroek */
166*00b67f09SDavid van Moolenbroek destination.file.stream = stderr;
167*00b67f09SDavid van Moolenbroek
168*00b67f09SDavid van Moolenbroek CHECK(isc_log_createchannel(lcfg, "debug_test", ISC_LOG_TOFILEDESC,
169*00b67f09SDavid van Moolenbroek ISC_LOG_DYNAMIC, &destination,
170*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTTIME|
171*00b67f09SDavid van Moolenbroek ISC_LOG_PRINTLEVEL|
172*00b67f09SDavid van Moolenbroek ISC_LOG_DEBUGONLY));
173*00b67f09SDavid van Moolenbroek
174*00b67f09SDavid van Moolenbroek /*
175*00b67f09SDavid van Moolenbroek * Test the usability of the four predefined logging channels.
176*00b67f09SDavid van Moolenbroek */
177*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "default_syslog",
178*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_DATABASE,
179*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_CACHE));
180*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "default_stderr",
181*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_DATABASE,
182*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_CACHE));
183*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "default_debug",
184*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_DATABASE,
185*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_CACHE));
186*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "null",
187*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_DATABASE,
188*00b67f09SDavid van Moolenbroek NULL));
189*00b67f09SDavid van Moolenbroek
190*00b67f09SDavid van Moolenbroek /*
191*00b67f09SDavid van Moolenbroek * Use the custom channels.
192*00b67f09SDavid van Moolenbroek */
193*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "file_test",
194*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_GENERAL,
195*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_DB));
196*00b67f09SDavid van Moolenbroek
197*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "debug_test",
198*00b67f09SDavid van Moolenbroek DNS_LOGCATEGORY_GENERAL,
199*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_RBTDB));
200*00b67f09SDavid van Moolenbroek
201*00b67f09SDavid van Moolenbroek fprintf(stderr, "\n==> stderr begin\n");
202*00b67f09SDavid van Moolenbroek
203*00b67f09SDavid van Moolenbroek /*
204*00b67f09SDavid van Moolenbroek * Write to the internal default by testing both a category for which
205*00b67f09SDavid van Moolenbroek * no channel has been specified and a category which was specified
206*00b67f09SDavid van Moolenbroek * but not with the named module.
207*00b67f09SDavid van Moolenbroek */
208*00b67f09SDavid van Moolenbroek stderr_line = 1;
209*00b67f09SDavid van Moolenbroek
210*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_SECURITY, DNS_LOGMODULE_RBT,
211*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s (%d)",
212*00b67f09SDavid van Moolenbroek "Unspecified category and unspecified module to stderr",
213*00b67f09SDavid van Moolenbroek stderr_line++);
214*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBT,
215*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s (%d)",
216*00b67f09SDavid van Moolenbroek "Specified category and unspecified module to stderr",
217*00b67f09SDavid van Moolenbroek stderr_line++);
218*00b67f09SDavid van Moolenbroek
219*00b67f09SDavid van Moolenbroek /*
220*00b67f09SDavid van Moolenbroek * Write to default_syslog, default_stderr and default_debug.
221*00b67f09SDavid van Moolenbroek */
222*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_CACHE,
223*00b67f09SDavid van Moolenbroek ISC_LOG_WARNING, "%s (%d twice)",
224*00b67f09SDavid van Moolenbroek "Using the predefined channels to syslog+stderr",
225*00b67f09SDavid van Moolenbroek stderr_line++);
226*00b67f09SDavid van Moolenbroek
227*00b67f09SDavid van Moolenbroek /*
228*00b67f09SDavid van Moolenbroek * Write to predefined null channel.
229*00b67f09SDavid van Moolenbroek */
230*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_DATABASE, DNS_LOGMODULE_RBTDB,
231*00b67f09SDavid van Moolenbroek ISC_LOG_INFO, "This is to null and should not appear!");
232*00b67f09SDavid van Moolenbroek
233*00b67f09SDavid van Moolenbroek /*
234*00b67f09SDavid van Moolenbroek * Reset the internal default to use syslog instead of stderr,
235*00b67f09SDavid van Moolenbroek * and test it.
236*00b67f09SDavid van Moolenbroek */
237*00b67f09SDavid van Moolenbroek CHECK(isc_log_usechannel(lcfg, "default_syslog",
238*00b67f09SDavid van Moolenbroek ISC_LOGCATEGORY_DEFAULT, NULL));
239*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_SECURITY, DNS_LOGMODULE_RBT,
240*00b67f09SDavid van Moolenbroek ISC_LOG_ERROR, "%s%s",
241*00b67f09SDavid van Moolenbroek "This message to the redefined default category should ",
242*00b67f09SDavid van Moolenbroek "be second in syslog");
243*00b67f09SDavid van Moolenbroek /*
244*00b67f09SDavid van Moolenbroek * Write to the file channel.
245*00b67f09SDavid van Moolenbroek */
246*00b67f09SDavid van Moolenbroek if (file_versions >= 0 || file_versions == ISC_LOG_ROLLINFINITE) {
247*00b67f09SDavid van Moolenbroek
248*00b67f09SDavid van Moolenbroek /*
249*00b67f09SDavid van Moolenbroek * If file_versions is 0 or ISC_LOG_ROLLINFINITE, write
250*00b67f09SDavid van Moolenbroek * the "should not appear" and "should be in file" messages
251*00b67f09SDavid van Moolenbroek * to ensure they get rolled.
252*00b67f09SDavid van Moolenbroek */
253*00b67f09SDavid van Moolenbroek if (file_versions <= 0)
254*00b67f09SDavid van Moolenbroek file_versions = FILE_VERSIONS;
255*00b67f09SDavid van Moolenbroek
256*00b67f09SDavid van Moolenbroek else
257*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL,
258*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_DB, ISC_LOG_NOTICE,
259*00b67f09SDavid van Moolenbroek "This should be rolled over "
260*00b67f09SDavid van Moolenbroek "and not appear!");
261*00b67f09SDavid van Moolenbroek
262*00b67f09SDavid van Moolenbroek for (i = file_versions - 1; i >= 0; i--)
263*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL,
264*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_DB, ISC_LOG_NOTICE,
265*00b67f09SDavid van Moolenbroek "should be in file %d/%d", i,
266*00b67f09SDavid van Moolenbroek file_versions - 1);
267*00b67f09SDavid van Moolenbroek
268*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL,
269*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_DB, ISC_LOG_NOTICE,
270*00b67f09SDavid van Moolenbroek "should be in base file");
271*00b67f09SDavid van Moolenbroek } else {
272*00b67f09SDavid van Moolenbroek file_versions = FILE_VERSIONS;
273*00b67f09SDavid van Moolenbroek for (i = 1; i <= file_versions; i++)
274*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL,
275*00b67f09SDavid van Moolenbroek DNS_LOGMODULE_DB, ISC_LOG_NOTICE,
276*00b67f09SDavid van Moolenbroek "This is message %d in the log file", i);
277*00b67f09SDavid van Moolenbroek }
278*00b67f09SDavid van Moolenbroek
279*00b67f09SDavid van Moolenbroek
280*00b67f09SDavid van Moolenbroek /*
281*00b67f09SDavid van Moolenbroek * Write a debugging message to a category that has no
282*00b67f09SDavid van Moolenbroek * debugging channels for the named module.
283*00b67f09SDavid van Moolenbroek */
284*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_DB,
285*00b67f09SDavid van Moolenbroek ISC_LOG_DEBUG(1),
286*00b67f09SDavid van Moolenbroek "This debug message should not appear!");
287*00b67f09SDavid van Moolenbroek
288*00b67f09SDavid van Moolenbroek /*
289*00b67f09SDavid van Moolenbroek * Write debugging messages to a dynamic debugging channel.
290*00b67f09SDavid van Moolenbroek */
291*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
292*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "This critical message should "
293*00b67f09SDavid van Moolenbroek "not appear because the debug level is 0!");
294*00b67f09SDavid van Moolenbroek
295*00b67f09SDavid van Moolenbroek isc_log_setdebuglevel(lctx, 3);
296*00b67f09SDavid van Moolenbroek
297*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
298*00b67f09SDavid van Moolenbroek ISC_LOG_DEBUG(1), "%s (%d)",
299*00b67f09SDavid van Moolenbroek "Dynamic debugging to stderr", stderr_line++);
300*00b67f09SDavid van Moolenbroek isc_log_write(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
301*00b67f09SDavid van Moolenbroek ISC_LOG_DEBUG(5),
302*00b67f09SDavid van Moolenbroek "This debug level is too high and should not appear!");
303*00b67f09SDavid van Moolenbroek
304*00b67f09SDavid van Moolenbroek /*
305*00b67f09SDavid van Moolenbroek * Test out the duplicate filtering using the debug_test channel.
306*00b67f09SDavid van Moolenbroek */
307*00b67f09SDavid van Moolenbroek isc_log_setduplicateinterval(lcfg, 10);
308*00b67f09SDavid van Moolenbroek message = "This message should appear only once on stderr";
309*00b67f09SDavid van Moolenbroek
310*00b67f09SDavid van Moolenbroek isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
311*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s", message);
312*00b67f09SDavid van Moolenbroek isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
313*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s", message);
314*00b67f09SDavid van Moolenbroek
315*00b67f09SDavid van Moolenbroek isc_log_setduplicateinterval(lcfg, 1);
316*00b67f09SDavid van Moolenbroek message = "This message should appear twice on stderr";
317*00b67f09SDavid van Moolenbroek
318*00b67f09SDavid van Moolenbroek isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
319*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s", message);
320*00b67f09SDavid van Moolenbroek sleep(2);
321*00b67f09SDavid van Moolenbroek isc_log_write1(lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_RBTDB,
322*00b67f09SDavid van Moolenbroek ISC_LOG_CRITICAL, "%s", message);
323*00b67f09SDavid van Moolenbroek
324*00b67f09SDavid van Moolenbroek /*
325*00b67f09SDavid van Moolenbroek * Review where everything went.
326*00b67f09SDavid van Moolenbroek * XXXDCL NT
327*00b67f09SDavid van Moolenbroek */
328*00b67f09SDavid van Moolenbroek fputc('\n', stderr);
329*00b67f09SDavid van Moolenbroek if (system("head " TEST_FILE "*; rm -f " TEST_FILE "*") != 0) {
330*00b67f09SDavid van Moolenbroek fprintf(stderr, "system(\"head " TEST_FILE "*; rm -f "
331*00b67f09SDavid van Moolenbroek TEST_FILE "*\") failed\n");
332*00b67f09SDavid van Moolenbroek goto cleanup;
333*00b67f09SDavid van Moolenbroek }
334*00b67f09SDavid van Moolenbroek
335*00b67f09SDavid van Moolenbroek /* This is highly system specific. */
336*00b67f09SDavid van Moolenbroek if (freopen(syslog_file, "r", stdin) == NULL) {
337*00b67f09SDavid van Moolenbroek fprintf(stderr, "freopen(%s, \"r\", stdin) failed\n",
338*00b67f09SDavid van Moolenbroek syslog_file);
339*00b67f09SDavid van Moolenbroek goto cleanup;
340*00b67f09SDavid van Moolenbroek }
341*00b67f09SDavid van Moolenbroek fprintf(stderr, "\n==> %s <==\n", syslog_file);
342*00b67f09SDavid van Moolenbroek if (system("tail -2") != 0) {
343*00b67f09SDavid van Moolenbroek fprintf(stderr, "system(\"tail -2\") failed\n");
344*00b67f09SDavid van Moolenbroek goto cleanup;
345*00b67f09SDavid van Moolenbroek }
346*00b67f09SDavid van Moolenbroek fputc('\n', stderr);
347*00b67f09SDavid van Moolenbroek
348*00b67f09SDavid van Moolenbroek cleanup:
349*00b67f09SDavid van Moolenbroek isc_log_destroy(&lctx);
350*00b67f09SDavid van Moolenbroek
351*00b67f09SDavid van Moolenbroek if (show_final_mem)
352*00b67f09SDavid van Moolenbroek isc_mem_stats(mctx, stderr);
353*00b67f09SDavid van Moolenbroek
354*00b67f09SDavid van Moolenbroek return (0);
355*00b67f09SDavid van Moolenbroek }
356