2837 - remove print/lp* from gate and use CUPS from userland
1 #!/usr/bin/perl -w
2 #
3 # CDDL HEADER START
4 #
5 # The contents of this file are subject to the terms of the
6 # Common Development and Distribution License (the "License").
7 # You may not use this file except in compliance with the License.
8 #
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 # or http://www.opensolaris.org/os/licensing.
11 # See the License for the specific language governing permissions
12 # and limitations under the License.
13 #
14 # When distributing Covered Code, include this CDDL HEADER in each
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 # If applicable, add the following below this CDDL HEADER, with the
17 # fields enclosed by brackets "[]" replaced with your own identifying
18 # information: Portions Copyright [yyyy] [name of copyright owner]
19 #
20 # CDDL HEADER END
21 #
22 #
23 # Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
24 # Copyright (c) 2013, Joyent, Inc. All rights reserved.
25 #
26 #
27 # tester - run logadm tests
28 #
29 # requires a <bindir> argument to say where the various logadm
30 # binaries live (conftest, globtest, kwtest, luttest, optstest, and
31 # logadm itself).
32 #
33 # to run all the tests:
34 # tester [-f] <bindir>
35 #
36 # to run just a few tests, given their names:
37 # tester [-f] <bindir> globtest1 luttest1
38 #
39 # to setup a test and stop so you can run it by hand:
40 # tester [-f] -s globtest1 <bindir>
41 #
42 # tester will tell you what tmp directory it created for
43 # the test. to run it, cd there and run:
44 # sh runtest
45 # to check the results, run:
46 # sh checktest
47 #
48 # -f means "fast" -- without it, watchmalloc(3MALLOC) is setup for
49 # each test and they run a zillion times slower and produce core
50 # dumps when malloc/free problems are detected.
51 #
52 $watchmalloc=1; # default is to use watchmalloc
53 ${ENV} = "/bin";
54 umask 002;
55
56 # list of tests we run by default
57 @tests = (
58 "conftest1",
59 "conftest2",
60 "globtest1",
61 "globtest2",
62 "kwtest1",
63 "kwtest2",
64 "luttest1",
65 "optstest1",
66 "optstest2",
67 "logadmV1",
68 "logadmV2",
69 "logadmr",
70 "logadmw",
71 "logadm1",
72 "logadm1c",
73 "logadm2",
74 "logadm3",
75 "logadm4",
76 "logadm5",
77 "logadm6",
78 "logadm7",
79 "logadm8",
80 "logadm9",
81 "logadm9d",
82 "logadm10",
83 "logadm11",
84 "logadm12",
85 "logadm13",
86 "logadm14",
87 "logadm15",
88 "logadm16",
89 "logadm17",
90 "logadm18",
91 "logadm19",
92 "logadm20",
93 );
94
95 use Getopt::Std;
96 use File::Find;
97
98 $usage_summary = '[-s test-name] [-d dir] bindir [test-name...]';
99 $usage_getopts = 'fd:s:';
100 %usage = (
101 d=>'use dir for tests rather than creating one in /tmp',
102 s=>'setup only, do not run test');
103
104 # spew usage message, plus any given message, and exit
105 sub usage {
106 my $msg = shift;
107
108 if ($msg) {
109 chomp $msg;
110 warn "$0: $msg\n" if $msg;
111 }
112 warn "Usage: $0 $usage_summary\n";
113 foreach (sort keys %usage) {
114 warn " -$_ $usage{$_}\n";
115 }
116 exit 1;
117 }
118
119 #
120 # basic argument processing
121 #
122 $myname = $0;
123 $myname =~ s/.*\///; # just show last component in error mesages
124 getopts($usage_getopts) or usage;
125 $bindir = shift or usage;
126 usage("$bindir does not exist") unless -d $bindir;
127 usage("cannot list more than one test with -s option") if $opt_s && @ARGV;
128 @tests = @ARGV if @ARGV;
129 print "Fast mode\n" if $opt_f;
130 $watchmalloc = 0 if $opt_f;
131
132 $mydir=`pwd`;
133 chomp $mydir;
134
135 $dir = $opt_d;
136 $dir = "/tmp/logadmtest$$" unless $dir = $opt_d;
137
138 if (!-d $dir) {
139 mkdir $dir, 0777 or die "$myname: mkdir $dir: $!\n";
140 $needrmdir = 1;
141 }
142
143 chdir $dir or die "$myname: $dir: $!\n";
144
145 # common commands in runtest by tests
146 if ($watchmalloc) {
147 $envsetup =
148 "HOME=$dir export HOME; " .
149 "LD_PRELOAD=watchmalloc.so.1 export LD_PRELOAD; " .
150 "MALLOC_DEBUG=RW export MALLOC_DEBUG";
151 } else {
152 $envsetup = "HOME=$dir export HOME; ";
153 }
154
155 $| = 1; # a.k.a. setbuf(stdout, NULL)
156
157 if ($opt_s) {
158 #
159 # just setup the test, explain how to use it, and exit
160 #
161 $testname = $opt_s;
162 eval "&$opt_s";
163 die "$myname: ERROR: $@" if $@;
164 print "$myname: $testname setup complete, to run, cd to:\n";
165 print " $dir\n";
166 print "and run the command:\n";
167 print " sh runtest\n";
168 print "to check the results, run the command:\n";
169 print " sh checktest\n";
170 exit 0;
171 } else {
172 #
173 # run all the tests
174 #
175 foreach (@tests) {
176 $testname = $_;
177 print "Running $testname...";
178 eval "&$_";
179 if ($@) {
180 print " SETUP FAILURE\n";
181 print STDERR "$myname: ERROR: $@";
182 exit 1;
183 }
184 eval "runner('runtest')";
185 if ($@) {
186 print " RUNTEST FAILURE\n";
187 print STDERR "$myname: ERROR: $@";
188 print STDERR "results captured in directory $dir\n";
189 print STDERR " or use: $myname -s $testname $bindir\n";
190 print STDERR " to do a fresh setup of this test.\n";
191 exit 1;
192 }
193 eval "runner('checktest', '-x', '> checktest.out 2>&1')";
194 if ($@) {
195 print " CHECKTEST FAILURE\n";
196 print STDERR "$myname: ERROR: $@";
197 print STDERR "results captured in file $dir/checktest.out\n";
198 print STDERR " or use: $myname -s $testname $bindir\n";
199 print STDERR " to do a fresh setup of this test.\n";
200 exit 1;
201 }
202 print "pass\n";
203 # sanity...
204 die "unexpected dir $dir" unless $dir =~ m,/.+/,;
205 system("/bin/rm -rf $dir/*");
206 }
207 }
208
209 # if we were the ones who created $dir, remove it
210 if ($needrmdir) {
211 chdir $mydir;
212 rmdir $dir || die "$myname: rmdir $dir: $!\n";
213 }
214
215 exit 0;
216
217 #
218 # run a shell script and check for failure
219 #
220 # the shell scripts generated by this program always "exec" the binary
221 # under test so checking here are for exit code, signals, and core dump
222 # is actually checking the program under test and not /bin/sh
223 #
224 sub runner {
225 my ($cmd, $prefix, $suffix) = (@_, '', '');
226
227 my $fullcmd = "/bin/sh $prefix $cmd $suffix";
228 my $rc = 0xffff & system("$fullcmd");
229
230 if ($rc == 0) {
231 return; # cmd completed normally
232 } elsif ($rc == 0xff00) {
233 die "command \"$cmd\" failed: $!\n";
234 } elsif (($rc & 0xff) == 0) {
235 $rc >>= 8;
236 die "command \"$cmd\" exit $rc\n";
237 } else {
238 my $coremsg;
239 $coremsg = " (core dumped)" if ($rc & 0x80);
240 $rc &= ~0x80;
241 die "command \"$cmd\" signal $rc$coremsg\n" ;
242 }
243 }
244
245 #
246 # set_file(filename [, contents]) -- create a file, optionally with contents
247 #
248 sub set_file {
249 my $file = shift;
250 my $contents = shift;
251
252 open SF, ">$file" or die "create \"$file\": $!\n";
253 print SF $contents if defined($contents);
254 close SF;
255 }
256
257 #############
258 #############
259 ############# THE TESTS START AFTER HERE...
260 #############
261 #############
262
263 # common setup step -- create a testfile.conf
264 sub set_testconffile {
265 my $fname = shift;
266 $fname = 'testfile.conf' unless defined($fname);
267
268 set_file($fname, <<'EOF');
269 #
270 # logadm.conf
271 #
272 # Default settings for system log file management.
273 # The -w option to logadm(1M) is the preferred way to write to this file,
274 # but if you do edit it by hand, use "logadm -V" to check it for errors.
275 #
276 # The format of lines in this file is:
277 # <logname> <options>
278 # For each logname listed here, the default options to logadm
279 # are given. Options given on the logadm command line override
280 # the defaults contained in this file.
281 #
282 # logadm typically runs early every morning via an entry in
283 # root's crontab (see crontab(1)).
284 #
285 /var/adm/messages -C 4 -P 'Thu Nov 1 16:56:42 2001' -a 'kill -HUP `cat /var/run/*syslog*pid`'
286 /var/cron/log -s 512k -t /var/cron/olog
287 /var/lp/logs/lpsched -C 2 -N -t '$file.$N'
288 #
289 # The entry below is used by turnacct(1M)
290 #
291 /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
292 apache -C 24 -a '/usr/apache/bin/apachectl graceful' -p 1m -t '/var/apache/old-logs/$basename.%Y-%m' '/var/apache/logs/*{access,error}_log'
293 /var/log/syslog -C 8 -P 'Thu Nov 1 09:16:38 2001' -a 'kill -HUP `cat /var/run/*syslog*pid`'
294 /var/apache/logs/access_log -P 'Thu Nov 1 08:27:56 2001'
295 /var/apache/logs/error_log -P 'Thu Nov 1 08:27:56 2001'
296 /var/apache/logs/suexec_log -P 'Thu Nov 1 08:27:56 2001'
297 /var/apache/logs/mod_jserv.log -P 'Thu Nov 1 08:27:56 2001'
298 /var/apache/logs/jserv.log -P 'Thu Nov 1 08:27:56 2001'
299 EOF
300 }
301
302
303 ###########################################################################
304 #
305 # conftest1 -- minimal basic test of the conf.c code
306 #
307 ###########################################################################
308 sub conftest1 {
309 set_testconffile;
310
311 set_file('checktest', <<'EOF');
312 [ -s std.err ] && { cat std.err; exit 1; }
313 /bin/sed '/^conffile <testfile.conf>:$/d' <std.out >sed.out
314 exec /bin/diff testfile.conf sed.out
315 EOF
316
317 set_file('runtest', <<"EOF");
318 # test "conftest1"
319 $envsetup
320 exec $bindir/conftest testfile.conf >std.out 2>std.err
321 EOF
322 }
323
324 ###########################################################################
325 #
326 # conftest2 -- error path through conf.c
327 #
328 ###########################################################################
329 sub conftest2 {
330 set_file('testfile.conf', 'line fragment');
331
332 set_file('std.err.expect', <<'EOF');
333 conftest: Warning: file testfile.conf doesn't end with newline, last line ignored.
334 EOF
335
336 set_file('checktest', <<'EOF');
337 exec /bin/diff std.err.expect std.err
338 EOF
339
340 set_file('runtest', <<"EOF");
341 # test "conftest2"
342 $envsetup
343 $bindir/conftest testfile.conf >std.out 2>std.err || exit 0
344 exit 1
345 EOF
346 }
347
348 ###########################################################################
349 #
350 # globtest1 -- minimal basic test of the glob.c code
351 #
352 ###########################################################################
353 sub globtest1 {
354 set_file('fileBname12');
355 sleep 2; # ensure above name is odler than below name
356 set_file('fileAname12');
357 set_file('fileAname1');
358 set_file('fileAname3');
359 set_file('fileAname5');
360 set_file('fileAname7');
361 set_file('fileAname9');
362 set_file('fileAname11');
363 set_file('fileBname0');
364 set_file('fileBname2');
365 set_file('fileBname4');
366 set_file('fileBname6');
367 set_file('fileBname8');
368 set_file('fileBname10');
369 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
370 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
371 mkdir 'dir3', 0777 or die "mkdir dir3: $!\n";
372 mkdir 'dir1/dirA', 0777 or die "mkdir dir1/dirA: $!\n";
373 mkdir 'dir1/dirB', 0777 or die "mkdir dir1/dirB: $!\n";
374 mkdir 'dir1/dirC', 0777 or die "mkdir dir1/dirC: $!\n";
375 mkdir 'dir2/dirA', 0777 or die "mkdir dir2/dirA: $!\n";
376 mkdir 'dir2/dirB', 0777 or die "mkdir dir2/dirB: $!\n";
377 mkdir 'dir2/dirC', 0777 or die "mkdir dir2/dirC: $!\n";
378 set_file('dir1/fileAname1');
379 set_file('dir1/fileAname2');
380 set_file('dir1/fileAname3');
381 set_file('dir1/fileAname4');
382 set_file('dir1/fileAname5');
383 set_file('dir1/fileBname1');
384 set_file('dir1/fileBname2');
385 set_file('dir1/fileBname3');
386 set_file('dir1/fileBname4');
387 set_file('dir1/fileBname5');
388 # supply some varying sizes to produce different total size values
389 set_file('dir1/dirA/fileAname4', '4444');
390 sleep 2; # ensure above file is oldest in dirA
391 set_file('dir1/dirA/fileAname1', '1');
392 set_file('dir1/dirA/fileAname2', '22');
393 set_file('dir1/dirA/fileAname3', '333');
394 set_file('dir1/dirA/fileAname5', '55555');
395 set_file('dir1/dirA/fileBname1', '1');
396 set_file('dir1/dirA/fileBname2', '22');
397 set_file('dir1/dirA/fileBname3', '333');
398 set_file('dir1/dirA/fileBname4', '4444');
399 set_file('dir1/dirA/fileBname5', '55555');
400 set_file('dir1/dirB/fileAname1', '1');
401 set_file('dir1/dirB/fileAname2', '22');
402 set_file('dir1/dirB/fileAname3', '333');
403 set_file('dir1/dirB/fileAname4', '4444');
404 set_file('dir1/dirB/fileAname5', '55555');
405 set_file('dir1/dirB/fileBname1', '1');
406 set_file('dir1/dirB/fileBname2', '22');
407 set_file('dir1/dirB/fileBname3', '333');
408 set_file('dir1/dirB/fileBname4', '4444');
409 set_file('dir1/dirB/fileBname5', '55555');
410 set_file('dir1/dirC/fileAname10', '12345678901');
411 set_file('dir1/dirC/fileAname20', '123456789022');
412 set_file('dir1/dirC/fileAname30', '1234567890333');
413 set_file('dir1/dirC/fileAname40', '12345678904444');
414 set_file('dir1/dirC/fileAname50', '123456789055555');
415 set_file('dir1/dirC/fileBname10', '12345678901');
416 set_file('dir1/dirC/fileBname20', '123456789022');
417 set_file('dir1/dirC/fileBname30', '1234567890333');
418 set_file('dir1/dirC/fileBname40', '12345678904444');
419 set_file('dir1/dirC/fileBname50', '123456789055555');
420
421 set_file('std.out.expect', <<'EOF');
422 <file{A,B,C}name*>:
423 <./fileAname12>
424 <./fileAname1>
425 <./fileAname3>
426 <./fileAname5>
427 <./fileAname7>
428 <./fileAname9>
429 <./fileAname11>
430 <./fileBname12>
431 <./fileBname0>
432 <./fileBname2>
433 <./fileBname4>
434 <./fileBname6>
435 <./fileBname8>
436 <./fileBname10>
437 total size: 0
438 oldest <./fileBname12>
439 oldest <./fileBname8>
440 oldest <./fileBname6>
441 oldest <./fileBname4>
442 oldest <./fileBname2>
443 oldest <./fileBname10>
444 oldest <./fileBname0>
445 oldest <./fileAname9>
446 oldest <./fileAname7>
447 oldest <./fileAname5>
448 oldest <./fileAname3>
449 oldest <./fileAname12>
450 oldest <./fileAname11>
451 oldest <./fileAname1>
452 <file{A,B,C}name>:
453 <fileAname>
454 <fileBname>
455 <fileCname>
456 total size: 0
457 oldest <fileCname>
458 oldest <fileBname>
459 oldest <fileAname>
460 <dir1/dirA/file*>:
461 <./dir1/dirA/fileAname4>
462 <./dir1/dirA/fileAname1>
463 <./dir1/dirA/fileAname2>
464 <./dir1/dirA/fileAname3>
465 <./dir1/dirA/fileAname5>
466 <./dir1/dirA/fileBname1>
467 <./dir1/dirA/fileBname2>
468 <./dir1/dirA/fileBname3>
469 <./dir1/dirA/fileBname4>
470 <./dir1/dirA/fileBname5>
471 total size: 30
472 oldest <./dir1/dirA/fileAname4>
473 oldest <./dir1/dirA/fileBname5>
474 oldest <./dir1/dirA/fileBname4>
475 oldest <./dir1/dirA/fileBname3>
476 oldest <./dir1/dirA/fileBname2>
477 oldest <./dir1/dirA/fileBname1>
478 oldest <./dir1/dirA/fileAname5>
479 oldest <./dir1/dirA/fileAname3>
480 oldest <./dir1/dirA/fileAname2>
481 oldest <./dir1/dirA/fileAname1>
482 <dir[13]/[e-z]*>:
483 <./dir1/fileAname1>
484 <./dir1/fileAname2>
485 <./dir1/fileAname3>
486 <./dir1/fileAname4>
487 <./dir1/fileAname5>
488 <./dir1/fileBname1>
489 <./dir1/fileBname2>
490 <./dir1/fileBname3>
491 <./dir1/fileBname4>
492 <./dir1/fileBname5>
493 total size: 0
494 oldest <./dir1/fileBname5>
495 oldest <./dir1/fileBname4>
496 oldest <./dir1/fileBname3>
497 oldest <./dir1/fileBname2>
498 oldest <./dir1/fileBname1>
499 oldest <./dir1/fileAname5>
500 oldest <./dir1/fileAname4>
501 oldest <./dir1/fileAname3>
502 oldest <./dir1/fileAname2>
503 oldest <./dir1/fileAname1>
504 <dir?/dir[AC]/fileBname[2-9]>:
505 <./dir1/dirA/fileBname2>
506 <./dir1/dirA/fileBname3>
507 <./dir1/dirA/fileBname4>
508 <./dir1/dirA/fileBname5>
509 total size: 14
510 oldest <./dir1/dirA/fileBname5>
511 oldest <./dir1/dirA/fileBname4>
512 oldest <./dir1/dirA/fileBname3>
513 oldest <./dir1/dirA/fileBname2>
514 <file[A-Z]n.*e([0-9]+)$0>:
515 <./fileBname12>
516 <./fileAname12>
517 <./fileAname1>
518 <./fileAname3>
519 <./fileAname5>
520 <./fileAname7>
521 <./fileAname9>
522 <./fileAname11>
523 <./fileBname0>
524 <./fileBname2>
525 <./fileBname4>
526 <./fileBname6>
527 <./fileBname8>
528 <./fileBname10>
529 total size: 0
530 oldest <./fileBname12>
531 oldest <./fileAname12>
532 oldest <./fileAname11>
533 oldest <./fileBname10>
534 oldest <./fileAname9>
535 oldest <./fileBname8>
536 oldest <./fileAname7>
537 oldest <./fileBname6>
538 oldest <./fileAname5>
539 oldest <./fileBname4>
540 oldest <./fileAname3>
541 oldest <./fileBname2>
542 oldest <./fileAname1>
543 oldest <./fileBname0>
544 EOF
545
546 set_file('checktest', <<'EOF');
547 [ -s std.err ] && { cat std.err; exit 1; }
548 exec /bin/diff std.out.expect std.out
549 EOF
550
551 $testglobs='\'file{A,B,C}name*\' \'file{A,B,C}name\' \'dir1/dirA/file*\' \'dir[13]/[e-z]*\' \'dir?/dir[AC]/fileBname[2-9]\' -r \'file[A-Z]n.*e([0-9]+)$0\'';
552
553 set_file('runtest', <<"EOF");
554 # test "globtest1"
555 $envsetup
556 exec $bindir/globtest $testglobs >std.out 2>std.err
557 EOF
558 }
559
560 ###########################################################################
561 #
562 # globtest2 -- error path through glob.c
563 #
564 ###########################################################################
565 sub globtest2 {
566 set_file('std.err.expect', <<'EOF');
567 globtest: Error: Missing }
568 EOF
569
570 set_file('checktest', <<'EOF');
571 exec /bin/diff std.err.expect std.err
572 EOF
573
574 set_file('runtest', <<"EOF");
575 # test "globtest2"
576 $envsetup
577 $bindir/globtest 'hello{there' >std.out 2>std.err || exit 0
578 exit 1
579 EOF
580 }
581
582 ###########################################################################
583 #
584 # kwtest1 -- minimal basic test of the kw.c code
585 #
586 ###########################################################################
587 sub kwtest1 {
588 $domainname = `/bin/domainname`; chomp $domainname;
589 $isa = `/bin/uname -p`; chomp $isa;
590 $platform = `/bin/uname -i`; chomp $platform;
591 $nodename = `/bin/uname -n`; chomp $nodename;
592 $machine = `/bin/uname -m`; chomp $machine;
593 $release = `/bin/uname -r`; chomp $release;
594 # /bin/zonename is in SUNWzoneu and so may not be present
595 if (-f "/bin/zonename") {
596 $zonename = `/bin/zonename`; chomp $zonename;
597 } else {
598 $zonename = "global";
599 }
600 $secondblob=<<'EOF';
601 expand<$file.$n> n -1 hasn 1 result </var/log/syslog\.([0-9]+)$0>
602 expand<$file.$n> n 0 hasn 1 result </var/log/syslog.0>
603 expand<$file.$n> n 1 hasn 1 result </var/log/syslog.1>
604 expand<moose%d.$n> n -1 hasn 1 result <moose[0-9]+\.([0-9]+)$0>
605 expand<moose%d.$n> n 0 hasn 1 result <moose%d.0>
606 expand<moose%d.$n> n 1 hasn 1 result <moose%d.1>
607 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n -1 hasn 1 result </var/logs-[0-9]+/moose-ISAporklips[0-9]+\.([0-9]+)$0>
608 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n 0 hasn 1 result </var/logs-%Y/moose-ISAporklips%d.0>
609 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n 1 hasn 1 result </var/logs-%Y/moose-ISAporklips%d.1>
610 EOF
611 $percentd = `/bin/env TZ=UTC /bin/date +%d`; chomp $percentd;
612 $percentY = `/bin/env TZ=UTC /bin/date +%Y`; chomp $percentY;
613 $secondblob =~ s/%d/$percentd/mg;
614 $secondblob =~ s/%Y/$percentY/mg;
615 $secondblob =~ s/ISA/$isa/mg;
616 $utcenv = "TZ=UTC export TZ";
617 chomp $secondblob;
618 set_file('sed.out.expect', <<"EOF");
619 basename syslog
620 dirname /var/log
621 domain $domainname
622 file /var/log/syslog
623 home $dir
624 isa $isa
625 logname $ENV{LOGNAME}
626 machine $machine
627 nfile
628 nodename $nodename
629 platform $platform
630 release $release
631 user $ENV{USER}
632 zonename $zonename
633 $secondblob
634 EOF
635
636 set_file('checktest', <<'EOF');
637 [ -s std.err ] && { cat std.err; exit 1; }
638 /bin/sed -e '/^ *secs [0-9][0-9]*$/d'\
639 -e "s/%d/`/bin/env TZ=UTC /bin/date +%d`/g"\
640 -e "s/%Y/`/bin/env TZ=UTC /bin/date +%Y`/g"\
641 <std.out >sed.out
642 exec /bin/diff sed.out.expect sed.out
643 EOF
644
645 $kwtest='kwtest /var/log/syslog \'$file.$n\' \'moose%d.$n\' \'/var/logs-%Y/moose-$isa$#porklips%d.$n\'';
646 set_file('runtest', <<"EOF");
647 # test "kwtest1"
648 $envsetup
649 $utcenv
650 exec $bindir/$kwtest >std.out 2>std.err
651 EOF
652 }
653
654 ###########################################################################
655 #
656 # kwtest2 -- NULL environment variables test of the kw.c code
657 #
658 ###########################################################################
659 sub kwtest2 {
660 $domainname = `/bin/domainname`; chomp $domainname;
661 $isa = `/bin/uname -p`; chomp $isa;
662 $platform = `/bin/uname -i`; chomp $platform;
663 $nodename = `/bin/uname -n`; chomp $nodename;
664 $machine = `/bin/uname -m`; chomp $machine;
665 $release = `/bin/uname -r`; chomp $release;
666 # /bin/zonename is in SUNWzoneu and so may not be present
667 if (-f "/bin/zonename") {
668 $zonename = `/bin/zonename`; chomp $zonename;
669 } else {
670 $zonename = "global";
671 }
672 $secondblob=<<'EOF';
673 expand<$file.$n> n -1 hasn 1 result </var/log/syslog\.([0-9]+)$0>
674 expand<$file.$n> n 0 hasn 1 result </var/log/syslog.0>
675 expand<$file.$n> n 1 hasn 1 result </var/log/syslog.1>
676 expand<moose%d.$n> n -1 hasn 1 result <moose[0-9]+\.([0-9]+)$0>
677 expand<moose%d.$n> n 0 hasn 1 result <moose%d.0>
678 expand<moose%d.$n> n 1 hasn 1 result <moose%d.1>
679 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n -1 hasn 1 result </var/logs-[0-9]+/moose-ISAporklips[0-9]+\.([0-9]+)$0>
680 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n 0 hasn 1 result </var/logs-%Y/moose-ISAporklips%d.0>
681 expand</var/logs-%Y/moose-$isa$#porklips%d.$n> n 1 hasn 1 result </var/logs-%Y/moose-ISAporklips%d.1>
682 EOF
683 $percentd = `/bin/env TZ=UTC /bin/date +%d`; chomp $percentd;
684 $percentY = `/bin/env TZ=UTC /bin/date +%Y`; chomp $percentY;
685 $secondblob =~ s/%d/$percentd/mg;
686 $secondblob =~ s/%Y/$percentY/mg;
687 $secondblob =~ s/ISA/$isa/mg;
688 chomp $secondblob;
689 set_file('sed.out.expect', <<"EOF");
690 basename syslog
691 dirname /var/log
692 domain $domainname
693 file /var/log/syslog
694 home
695 isa $isa
696 logname
697 machine $machine
698 nfile
699 nodename $nodename
700 platform $platform
701 release $release
702 user
703 zonename $zonename
704 $secondblob
705 EOF
706
707 set_file('checktest', <<'EOF');
708 [ -s std.err ] && { cat std.err; exit 1; }
709 /bin/sed -e '/^ *secs [0-9][0-9]*$/d'\
710 -e "s/%d/`/bin/env TZ=UTC /bin/date +%d`/g"\
711 -e "s/%Y/`/bin/env TZ=UTC /bin/date +%Y`/g"\
712 <std.out >sed.out
713 exec /bin/diff sed.out.expect sed.out
714 EOF
715
716 $kwtest='kwtest /var/log/syslog \'$file.$n\' \'moose%d.$n\' \'/var/logs-%Y/moose-$isa$#porklips%d.$n\'';
717 set_file('runtest', <<"EOF");
718 # test "kwtest2"
719 $envsetup
720 LOGNAME=
721 export LOGNAME
722 HOME=
723 export HOME
724 USER=
725 export USER
726 TZ=UTC
727 export TZ
728 exec $bindir/$kwtest >std.out 2>std.err
729 EOF
730 }
731
732 ###########################################################################
733 #
734 # luttest1 -- minimal basic test of the lut.c code
735 #
736 ###########################################################################
737 sub luttest1 {
738 set_file('std.out.expect', <<'EOF');
739 lut contains:
740 <fix> <NULL> (<NULL>)
741 <one> <two> (<two>)
742 <seven> <eight> (<eight>)
743 <six> <NULL> (<NULL>)
744 <three> <four> (<four>)
745 dup lut contains:
746 <fix> <NULL> (<NULL>)
747 <one> <two> (<two>)
748 <seven> <eight> (<eight>)
749 <six> <NULL> (<NULL>)
750 <three> <four> (<four>)
751 EOF
752
753 set_file('checktest', <<'EOF');
754 [ -s std.err ] && { cat std.err; exit 1; }
755 exec /bin/diff std.out.expect std.out
756 EOF
757
758 set_file('runtest', <<"EOF");
759 # test "luttest1"
760 $envsetup
761 exec $bindir/luttest one=two three=four fix six seven=eight >std.out 2>std.err
762 EOF
763 }
764
765 ###########################################################################
766 #
767 # optstest1 -- minimal basic test of the opts.c code
768 #
769 ###########################################################################
770 sub optstest1 {
771 $options="-a -b moose -c 1h -d 'Fri Nov 2 13:19:55 2001' -e 1k -f 2 one two three";
772 set_file('std.out.expect', <<"EOF");
773 options: $options
774 EOF
775
776 set_file('checktest', <<'EOF');
777 [ -s std.err ] && { cat std.err; exit 1; }
778 exec /bin/diff std.out.expect std.out
779 EOF
780
781 set_file('runtest', <<"EOF");
782 # test "optstest1"
783 $envsetup
784 exec $bindir/optstest $options >std.out 2>std.err
785 EOF
786 }
787
788 ###########################################################################
789 #
790 # optstest2 -- error path through opts.c code
791 #
792 ###########################################################################
793 sub optstest2 {
794 $options="-a -b -c 1h -d 'Fri Nov 2 13:19:55 2001' -e 1k -f 2 one two three";
795 set_file('std.err.expect', <<'EOF');
796 optstest: Error: Option 'b' requires an argument
797 optstest: Error: opts parsing failed
798 EOF
799
800 set_file('checktest', <<'EOF');
801 [ -s std.out ] && exit 1
802 exec /bin/diff std.err.expect std.err
803 EOF
804
805 set_file('runtest', <<"EOF");
806 # test "optstest2"
807 $envsetup
808 $bindir/optstest $options >std.out 2>std.err || exit 0
809 exit 1
810 EOF
811 }
812
813 ###########################################################################
814 #
815 # logadmV1 -- test of "logadm -V"
816 #
817 ###########################################################################
818 sub logadmV1 {
819 set_testconffile;
820
821 set_file('std.out.expect', <<'EOF');
822 /var/adm/messages -C 4 -P 'Thu Nov 1 16:56:42 2001' -a 'kill -HUP `cat /var/run/*syslog*pid`'
823 /var/cron/log -s 512k -t /var/cron/olog
824 /var/lp/logs/lpsched -C 2 -N -t '$file.$N'
825 /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
826 apache -C 24 -a '/usr/apache/bin/apachectl graceful' -p 1m -t '/var/apache/old-logs/$basename.%Y-%m' '/var/apache/logs/*{access,error}_log'
827 /var/log/syslog -C 8 -P 'Thu Nov 1 09:16:38 2001' -a 'kill -HUP `cat /var/run/*syslog*pid`'
828 /var/apache/logs/access_log -P 'Thu Nov 1 08:27:56 2001'
829 /var/apache/logs/error_log -P 'Thu Nov 1 08:27:56 2001'
830 /var/apache/logs/suexec_log -P 'Thu Nov 1 08:27:56 2001'
831 /var/apache/logs/mod_jserv.log -P 'Thu Nov 1 08:27:56 2001'
832 /var/apache/logs/jserv.log -P 'Thu Nov 1 08:27:56 2001'
833 EOF
834
835 set_file('checktest', <<'EOF');
836 [ -s std.err ] && { cat std.err; exit 1; }
837 exec /bin/diff std.out.expect std.out
838 EOF
839
840 set_file('runtest', <<"EOF");
841 # test "logadmV1"
842 $envsetup
843 exec $bindir/logadm -f testfile.conf -F testfile.conf -V >std.out 2>std.err
844 EOF
845 }
846
847 ###########################################################################
848 #
849 # logadmV2 -- test of "logadm -V <entry>"
850 #
851 ###########################################################################
852 sub logadmV2 {
853 set_testconffile;
854
855 set_file('std.out.expect', <<'EOF');
856 /var/cron/log -s 512k -t /var/cron/olog
857 /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
858 EOF
859
860 set_file('checktest', <<'EOF');
861 [ -s std.err ] && { cat std.err; exit 1; }
862 exec /bin/diff std.out.expect std.out
863 EOF
864
865 set_file('runtest', <<"EOF");
866 # test "logadmV2"
867 $envsetup
868 exec $bindir/logadm -f testfile.conf -F testfile.conf -V /var/cron/log /var/adm/pacct >std.out 2>std.err
869 EOF
870 }
871
872 ###########################################################################
873 #
874 # logadmr -- test of "logadm -r <entry>"
875 #
876 ###########################################################################
877 sub logadmr {
878 set_testconffile;
879 set_testconffile('testfile.conf.orig');
880
881 set_file('diff.out.expect', <<'EOF');
882 18d17
883 < /var/cron/log -s 512k -t /var/cron/olog
884 23d21
885 < /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
886 EOF
887
888 set_file('checktest', <<'EOF');
889 [ -s std.err ] && { cat std.err; exit 1; }
890 /bin/diff testfile.conf.orig testfile.conf > diff.out
891 exec /bin/diff diff.out.expect diff.out
892 EOF
893
894 set_file('runtest', <<"EOF");
895 # test "logadmr"
896 $envsetup
897 exec $bindir/logadm -f testfile.conf -F testfile.conf -r /var/cron/log /var/adm/pacct >std.out 2>std.err
898 EOF
899 }
900
901 ###########################################################################
902 #
903 # logadmw -- test of "logadm -w <entry>"
904 #
905 ###########################################################################
906 sub logadmw {
907 set_testconffile;
908 set_testconffile('testfile.conf.orig');
909
910 set_file('diff.out.expect', <<'EOF');
911 30a31
912 > moose -C 20 -a moose_after_cmd -g pig -m 664 -o cow -p never /moose/file
913 EOF
914
915 set_file('checktest', <<'EOF');
916 [ -s std.err ] && { cat std.err; exit 1; }
917 /bin/diff testfile.conf.orig testfile.conf > diff.out
918 exec /bin/diff diff.out.expect diff.out
919 EOF
920
921 set_file('runtest', <<"EOF");
922 # test "logadmw"
923 $envsetup
924 exec $bindir/logadm -f testfile.conf -F testfile.conf -w moose -C 20 -a moose_after_cmd -g pig -m 664 -o cow -p never /moose/file >std.out 2>std.err
925 EOF
926 }
927
928 ###########################################################################
929 #
930 # logadm1 -- minimal basic test of logadm rotation
931 #
932 ###########################################################################
933 sub logadm1 {
934 set_file('logfile', 'initially logfile');
935 set_file('logfile.0', 'initially logfile.0');
936 my ($stdev, $stino, $stmode, $stnlink, $stuid, $stgid, $strdev,
937 $stsize, $statime, $stmtime, $stctime, $stblksize, $stblocks) =
938 lstat 'logfile' or die "lstat logfile: $!\n";
939
940 set_file('checktest', <<"EOF");
941 [ -s std.err ] && { cat std.err; exit 1; }
942 [ -s std.out ] && exit 1
943 [ -s logfile ] && exit 1
944 [ -f logfile.0 ] || exit 1
945 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
946 [ "`/bin/ls -i logfile.0 | /bin/awk '{ print \$1; }'`" = "$stino" ] || exit 1
947 [ -f logfile.1 ] || exit 1
948 [ "xinitially logfile.0" = "x`/bin/cat logfile.1`" ] || exit 1
949 exit 0
950 EOF
951
952 set_file('runtest', <<"EOF");
953 # test "logadm1"
954 $envsetup
955 exec $bindir/logadm -f /dev/null -p now logfile >std.out 2>std.err
956 EOF
957 }
958
959 ###########################################################################
960 #
961 # logadm1c -- same as logadm1 but with -c option
962 #
963 ###########################################################################
964 sub logadm1c {
965 set_file('logfile', 'initially logfile');
966 set_file('logfile.0', 'initially logfile.0');
967 my ($stdev, $stino, $stmode, $stnlink, $stuid, $stgid, $strdev,
968 $stsize, $statime, $stmtime, $stctime, $stblksize, $stblocks) =
969 lstat 'logfile' or die "lstat logfile: $!\n";
970
971 set_file('checktest', <<"EOF");
972 [ -s std.err ] && { cat std.err; exit 1; }
973 [ -s std.out ] && exit 1
974 [ -s logfile ] && exit 1
975 [ -f logfile.0 ] || exit 1
976 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
977 [ "`/bin/ls -i logfile.0 | /bin/awk '{ print \$1; }'`" = "$stino" ] && exit 1
978 [ -f logfile.1 ] || exit 1
979 [ "xinitially logfile.0" = "x`/bin/cat logfile.1`" ] || exit 1
980 exit 0
981 EOF
982
983 set_file('runtest', <<"EOF");
984 # test "logadm1c"
985 $envsetup
986 exec $bindir/logadm -f /dev/null -p now -c logfile >std.out 2>std.err
987 EOF
988 }
989
990 ###########################################################################
991 #
992 # logadm2 -- minimal basic test of logadm expiration
993 #
994 ###########################################################################
995 sub logadm2 {
996 set_file('logfile', 'initially logfile');
997 set_file('logfile.0', 'initially logfile.0');
998 set_file('logfile.1', 'initially logfile.1');
999
1000 set_file('checktest', <<'EOF');
1001 [ -s std.err ] && { cat std.err; exit 1; }
1002 [ -s std.out ] && exit 1
1003 [ -s logfile ] && exit 1
1004 [ -f logfile.0 ] || exit 1
1005 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
1006 [ -f logfile.1 ] || exit 1
1007 [ "xinitially logfile.0" = "x`/bin/cat logfile.1`" ] || exit 1
1008 [ -f logfile.2 ] && exit 1
1009 exit 0
1010 EOF
1011
1012 set_file('runtest', <<"EOF");
1013 # test "logadm2"
1014 $envsetup
1015 exec $bindir/logadm -f /dev/null -p now logfile -C2 >std.out 2>std.err
1016 EOF
1017 }
1018
1019 ###########################################################################
1020 #
1021 # logadm3 -- minimal basic test of logadm pre/post-commands
1022 #
1023 ###########################################################################
1024 sub logadm3 {
1025 set_file('logfile', 'initially logfile');
1026 set_file('logfile.0', 'initially logfile.0');
1027 set_file('logfile.1', 'initially logfile.1');
1028
1029 set_file('checktest', <<'EOF');
1030 [ -s std.err ] && { cat std.err; exit 1; }
1031 [ -s std.out ] && exit 1
1032 [ -s logfile ] && exit 1
1033 [ -f logfile.0 ] || exit 1
1034 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
1035 [ -f logfile.1 ] || exit 1
1036 [ "xinitially logfile.0" = "x`/bin/cat logfile.1`" ] || exit 1
1037 [ -f logfile.2 ] && exit 1
1038 [ -f pre.out ] || exit 1
1039 [ "xpre-command-stuff" = "x`/bin/cat pre.out`" ] || exit 1
1040 [ -f post.out ] || exit 1
1041 [ "xpost-command-stuff" = "x`/bin/cat post.out`" ] || exit 1
1042 exit 0
1043 EOF
1044
1045 set_file('runtest', <<"EOF");
1046 # test "logadm3"
1047 $envsetup
1048 exec $bindir/logadm -f /dev/null -p now logfile -C2 -b 'echo pre-command-stuff > pre.out' -a 'echo post-command-stuff > post.out' >std.out 2>std.err
1049 EOF
1050 }
1051
1052 ###########################################################################
1053 #
1054 # logadm4 -- test of -t template
1055 #
1056 ###########################################################################
1057 sub logadm4 {
1058 set_file('logfile', 'initially logfile');
1059
1060 set_file('checktest', <<'EOF');
1061 [ -s std.err ] && { cat std.err; exit 1; }
1062 [ -s std.out ] && exit 1
1063 [ -s logfile ] && exit 1
1064 TZ=UTC export TZ
1065 d=`/bin/date +%d`
1066 [ -f logfile.$d ] || exit 1
1067 [ "xinitially logfile" = "x`/bin/cat logfile.$d`" ] || exit 1
1068 exit 0
1069 EOF
1070
1071 set_file('runtest', <<"EOF");
1072 # test "logadm4"
1073 $envsetup
1074 exec $bindir/logadm -f /dev/null -p now logfile -t '\$file.\%d' >std.out 2>std.err
1075 EOF
1076 }
1077
1078 ###########################################################################
1079 #
1080 # logadm5 -- test of -R cmd and -E cmd
1081 #
1082 ###########################################################################
1083 sub logadm5 {
1084 set_file('logfile', 'initially logfile');
1085 set_file('logfile.0', 'initially logfile.0');
1086
1087 set_file('cmd.out.expect', <<'EOF');
1088 just rotated: initially logfile
1089 just expired: initially logfile.0
1090 EOF
1091
1092 set_file('checktest', <<'EOF');
1093 [ -s std.err ] && { cat std.err; exit 1; }
1094 [ -s std.out ] && exit 1
1095 [ -s logfile ] && exit 1
1096 [ -f logfile.0 ] || exit 1
1097 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
1098 [ -f logfile.1 ] || exit 1
1099 [ "xinitially logfile.0" = "x`/bin/cat logfile.1`" ] || exit 1
1100 exec /bin/diff cmd.out.expect cmd.out
1101 EOF
1102
1103 set_file('runtest', <<"EOF");
1104 # test "logadm5"
1105 $envsetup
1106 exec $bindir/logadm -f /dev/null -p now logfile -C1 -R 'echo just rotated: `/bin/cat \$file` >>cmd.out' -E 'echo just expired: `/bin/cat \$file` >>cmd.out' >std.out 2>std.err
1107 EOF
1108 }
1109
1110 ###########################################################################
1111 #
1112 # logadm6 -- test of -m, -o, -g
1113 #
1114 ###########################################################################
1115 sub logadm6 {
1116 set_file('logfile', 'initially logfile');
1117
1118 set_file('std.err.expect', <<'EOF');
1119 logadm: Warning: command failed: /bin/chown _nonexistentuser_:_nonexistentgroup_ logfile
1120 chown: unknown group id _nonexistentgroup_
1121 EOF
1122
1123 set_file('checktest', <<'EOF');
1124 [ -s std.err ] || exit 1;
1125 [ -s std.out ] && exit 1
1126 [ -s logfile ] && exit 1
1127 [ -f logfile.0 ] || exit 1
1128 [ "xinitially logfile" = "x`/bin/cat logfile.0`" ] || exit 1
1129 [ "`/bin/ls -l logfile | /bin/awk '{ print $1; }'`" = "-r----x--x" ] || exit 1
1130 exec /bin/diff std.err.expect std.err
1131 EOF
1132
1133 set_file('runtest', <<"EOF");
1134 # test "logadm6"
1135 $envsetup
1136 exec $bindir/logadm -f /dev/null -p now logfile -m 411 -o _nonexistentuser_ -g _nonexistentgroup_ >std.out 2>std.err
1137 EOF
1138 }
1139
1140 ###########################################################################
1141 #
1142 # logadm7 -- test running through a conffile
1143 #
1144 ###########################################################################
1145 sub logadm7 {
1146 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1147 set_file('dir1/syslog', 'initially dir1/syslog');
1148 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1149 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1150 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1151 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1152 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1153 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1154 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1155 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1156 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1157 set_file('dir2/messages', 'initially dir2/messages');
1158 set_file('dir2/messages.0', 'initially dir2/messages.0');
1159 set_file('dir2/messages.1', 'initially dir2/messages.1');
1160 set_file('dir2/messages.2', 'initially dir2/messages.2');
1161 set_file('dir2/messages.3', 'initially dir2/messages.3');
1162
1163 set_file('logadm.conf', <<'EOF');
1164 #
1165 # logadm.conf
1166 #
1167 # this comment # has at least another #-sign in it #...
1168 #
1169 # Default settings for system log file management.
1170 # The -w option to logadm(1M) is the preferred way to write to this file,
1171 # but if you do edit it by hand, use "logadm -V" to check it for errors.
1172 # but if you do edit it by hand, use "logadm -V" to check it for errors.
1173 #
1174 # The format of lines in this file is:
1175 # <logname> <options>
1176 # For each logname listed here, the default options to logadm
1177 # are given. Options given on the logadm command line override
1178 # the defaults contained in this file.
1179 #
1180 # logadm typically runs early every morning via an entry in
1181 # root's crontab (see crontab(1)).
1182 #
1183 dir1/syslog -C 8 -a 'echo kill -HUP `cat /var/run/*syslog*pid` >> cmd.out'
1184 dir2/messages -C 4 -a 'echo kill -HUP `cat /var/run/*syslog*pid` >> cmd.out'
1185 #
1186 # The entry below is used by turnacct(1M)
1187 #
1188 /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
1189 EOF
1190
1191 system("/bin/cp logadm.conf logadm.conf.orig");
1192
1193 $pid=`cat /var/run/*syslog*pid`;
1194 chomp $pid;
1195 set_file('cmd.out.expect', <<"EOF");
1196 kill -HUP $pid
1197 second kill -HUP $pid
1198 EOF
1199
1200 set_file('sed.out.expect', <<'EOF');
1201 # This file holds internal data for logadm(1M).
1202 # Do not edit.
1203 dir1/syslog
1204 dir2/messages
1205 EOF
1206
1207 set_file('checktest', <<'EOF');
1208 [ -s std.err ] && { cat std.err; exit 1; }
1209 [ -s std.out ] && exit 1
1210 [ -s logadm.timestamps ] || exit 1
1211 [ -s std.err2 ] && exit 1
1212 [ -s std.out2 ] && exit 1
1213 [ -s std.err3 ] && exit 1
1214 [ -s std.out3 ] && exit 1
1215 [ -s std.err4 ] && exit 1
1216 [ -s std.out4 ] && exit 1
1217 [ -f dir1/syslog ] || exit 1
1218 [ "xsomething" = "x`/bin/cat dir1/syslog`" ] || exit 1
1219 [ -f dir1/syslog.0 ] || exit 1
1220 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1221 [ -f dir1/syslog.1 ] || exit 1
1222 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1223 [ -f dir1/syslog.2 ] || exit 1
1224 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1225 [ -f dir1/syslog.3 ] || exit 1
1226 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
1227 [ -f dir1/syslog.4 ] || exit 1
1228 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
1229 [ -f dir1/syslog.5 ] || exit 1
1230 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
1231 [ -f dir1/syslog.6 ] || exit 1
1232 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
1233 [ -f dir1/syslog.7 ] || exit 1
1234 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
1235 [ -f dir1/syslog.8 ] && exit 1
1236
1237 [ -s dir2/messages ] && exit 1
1238 [ -f dir2/messages.0 ] || exit 1
1239 [ "xsomething" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1240 [ -f dir2/messages.1 ] || exit 1
1241 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1242 [ -f dir2/messages.2 ] || exit 1
1243 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1244 [ -f dir2/messages.3 ] || exit 1
1245 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.3`" ] || exit 1
1246 [ -f dir2/messages.4 ] && exit 1
1247 /bin/sed "s/ -P '[^']*' *//" < logadm.timestamps > sed.out
1248 /bin/diff sed.out.expect sed.out || exit 1
1249 exec /bin/diff logadm.conf.orig logadm.conf
1250 EOF
1251
1252 # first logadm call will rotate both syslog and messages
1253 # second one won't because size is zero
1254 # third one won't because of -P timestamps stored in conffile
1255 # fourth one will do messages because of -p now on command line
1256 set_file('runtest', <<"EOF");
1257 # test "logadm7"
1258 $envsetup
1259 $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err || exit 1
1260 $bindir/logadm -f logadm.conf -F logadm.timestamps dir1/syslog dir2/messages >std.out2 2>std.err2 || exit 1
1261 echo something > dir1/syslog
1262 echo something > dir2/messages
1263 $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out3 2>std.err3 || exit 1
1264 exec $bindir/logadm -f logadm.conf -F logadm.timestamps dir2/messages -p now -a 'echo second kill -HUP `cat /var/run/*syslog*pid` >> cmd.out' >std.out4 2>std.err4
1265 EOF
1266 }
1267
1268 ###########################################################################
1269 #
1270 # logadm8 -- test of -z
1271 #
1272 ###########################################################################
1273 sub logadm8 {
1274 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1275 set_file('dir1/syslog', 'initially dir1/syslog');
1276 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1277 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1278 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1279 system("/bin/gzip dir1/syslog.2");
1280 die "gzip dir1/syslog.2 didn't work\n" unless -f 'dir1/syslog.2.gz';
1281 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1282 system("/bin/gzip dir1/syslog.3");
1283 die "gzip dir1/syslog.3 didn't work\n" unless -f 'dir1/syslog.3.gz';
1284 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1285 system("/bin/gzip dir1/syslog.4");
1286 die "gzip dir1/syslog.4 didn't work\n" unless -f 'dir1/syslog.4.gz';
1287 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1288 system("/bin/gzip dir1/syslog.5");
1289 die "gzip dir1/syslog.5 didn't work\n" unless -f 'dir1/syslog.5.gz';
1290 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1291 system("/bin/gzip dir1/syslog.6");
1292 die "gzip dir1/syslog.6 didn't work\n" unless -f 'dir1/syslog.6.gz';
1293 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1294 system("/bin/gzip dir1/syslog.7");
1295 die "gzip dir1/syslog.7 didn't work\n" unless -f 'dir1/syslog.7.gz';
1296
1297 set_file('checktest', <<'EOF');
1298 [ -s std.err ] && { cat std.err; exit 1; }
1299 [ -s std.out ] && exit 1
1300 [ -f dir1/syslog ] || exit 1
1301 [ -s dir1/syslog ] && exit 1
1302 [ -f dir1/syslog.0 ] || exit 1
1303 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1304 [ -f dir1/syslog.1 ] || exit 1
1305 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1306 [ -f dir1/syslog.2.gz ] || exit 1
1307 [ "xinitially dir1/syslog.1" = "x`/bin/gzcat dir1/syslog.2.gz`" ] || exit 1
1308 [ -f dir1/syslog.3.gz ] || exit 1
1309 [ "xinitially dir1/syslog.2" = "x`/bin/gzcat dir1/syslog.3.gz`" ] || exit 1
1310 [ -f dir1/syslog.4.gz ] || exit 1
1311 [ "xinitially dir1/syslog.3" = "x`/bin/gzcat dir1/syslog.4.gz`" ] || exit 1
1312 [ -f dir1/syslog.5.gz ] || exit 1
1313 [ "xinitially dir1/syslog.4" = "x`/bin/gzcat dir1/syslog.5.gz`" ] || exit 1
1314 [ -f dir1/syslog.6.gz ] || exit 1
1315 [ "xinitially dir1/syslog.5" = "x`/bin/gzcat dir1/syslog.6.gz`" ] || exit 1
1316 [ -f dir1/syslog.7.gz ] || exit 1
1317 [ "xinitially dir1/syslog.6" = "x`/bin/gzcat dir1/syslog.7.gz`" ] || exit 1
1318 [ -f dir1/syslog.8 ] && exit 1
1319 [ -f dir1/syslog.8.gz ] && exit 1
1320 exit 0
1321 EOF
1322
1323 set_file('runtest', <<"EOF");
1324 # test "logadm8"
1325 $envsetup
1326 exec $bindir/logadm -f /dev/null dir1/syslog -z 2 -C 8 >std.out 2>std.err
1327 EOF
1328 }
1329
1330 ###########################################################################
1331 #
1332 # logadm9 -- test of age check
1333 #
1334 ###########################################################################
1335 sub logadm9 {
1336 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1337 set_file('dir1/syslog', 'initially dir1/syslog');
1338 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1339 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1340 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1341 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1342 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1343 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1344 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1345 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1346 set_file('dir1/notes', 'initially dir1/notes');
1347 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1348 set_file('dir2/messages', 'initially dir2/messages');
1349 set_file('dir2/messages.0', 'initially dir2/messages.0');
1350 set_file('dir2/messages.1', 'initially dir2/messages.1');
1351 set_file('dir2/messages.2', 'initially dir2/messages.2');
1352 set_file('dir2/messages.3', 'initially dir2/messages.3');
1353 set_file('dir2/log', 'initially dir2/log');
1354
1355 $now = time;
1356 $nowstr = gmtime($now);
1357 # a week minus 30 seconds ago...
1358 # technically not a full week, but the heuristic used by logadm
1359 # should think this is "close enough" to a full week
1360 $closetoweeksecs = $now - (60 * 60 * 24 * 7 - 30);
1361 $closetoweek = gmtime($closetoweeksecs);
1362 # a week minus six hours ago...
1363 $lessthanweeksecs = $now - (60 * 60 * 24 * 7 - 60 * 60 * 6);
1364 $lessthanweek = gmtime($lessthanweeksecs);
1365
1366 set_file('logadm.conf', <<"EOF");
1367 # now: $nowstr is $now
1368 # $closetoweek is $closetoweeksecs
1369 dir1/syslog -C 8 -P '$closetoweek'
1370 dir2/log -C 4
1371 # $lessthanweek is $lessthanweeksecs
1372 dir1/notes -C 2 -P '$lessthanweek'
1373 dir2/messages -C 4
1374 EOF
1375 set_file('logadm.timestamps', <<"EOF");
1376 dir2/log -P '$closetoweek'
1377 dir2/messages -P '$lessthanweek'
1378 EOF
1379
1380 set_file('sed.out.expect', <<"EOF");
1381 # This file holds internal data for logadm(1M).
1382 # Do not edit.
1383 dir1/syslog
1384 dir2/log
1385 dir1/notes
1386 dir2/messages
1387 EOF
1388
1389 set_file('checktest', <<'EOF');
1390 [ -s std.err ] && { cat std.err; exit 1; }
1391 [ -s std.out ] && exit 1
1392 [ -f dir1/syslog ] || exit 1
1393 [ -s dir1/syslog ] && exit 1
1394 [ -f dir1/syslog.0 ] || exit 1
1395 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1396 [ -f dir1/syslog.1 ] || exit 1
1397 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1398 [ -f dir1/syslog.2 ] || exit 1
1399 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1400 [ -f dir1/syslog.3 ] || exit 1
1401 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
1402 [ -f dir1/syslog.4 ] || exit 1
1403 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
1404 [ -f dir1/syslog.5 ] || exit 1
1405 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
1406 [ -f dir1/syslog.6 ] || exit 1
1407 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
1408 [ -f dir1/syslog.7 ] || exit 1
1409 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
1410 [ -f dir1/syslog.8 ] && exit 1
1411
1412 [ -s dir1/notes ] || exit 1
1413 [ "xinitially dir1/notes" = "x`/bin/cat dir1/notes`" ] || exit 1
1414 [ -f dir1/notes.0 ] && exit 1
1415
1416 [ -f dir2/messages ] || exit 1
1417 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages`" ] || exit 1
1418 [ -f dir2/messages.0 ] || exit 1
1419 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1420 [ -f dir2/messages.1 ] || exit 1
1421 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1422 [ -f dir2/messages.2 ] || exit 1
1423 [ "xinitially dir2/messages.2" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1424 [ -f dir2/messages.3 ] || exit 1
1425 [ "xinitially dir2/messages.3" = "x`/bin/cat dir2/messages.3`" ] || exit 1
1426 [ -f dir2/messages.4 ] && exit 1
1427
1428 [ -f dir2/log ] || exit 1
1429 [ -s dir2/log ] && exit 1
1430 [ -f dir2/log.0 ] || exit 1
1431 [ "xinitially dir2/log" = "x`/bin/cat dir2/log.0`" ] || exit 1
1432 [ -f dir2/log.1 ] && exit 1
1433
1434 /bin/sed "s/ -P '[^']*' *//" < logadm.timestamps > sed.out
1435 /bin/diff sed.out.expect sed.out || exit 1
1436 /bin/sed -n "s/ -P '[^']*' */<&>/p" < logadm.conf > sed.out
1437 [ -s sed.out ] && exit 1
1438 exit 0
1439 EOF
1440
1441 set_file('runtest', <<"EOF");
1442 # test "logadm9"
1443 $envsetup
1444 exec $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err
1445 EOF
1446 }
1447
1448 ###########################################################################
1449 #
1450 # logadm9d -- test of age check like logadm9, but age is a couple days
1451 #
1452 ###########################################################################
1453 sub logadm9d {
1454 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1455 set_file('dir1/syslog', 'initially dir1/syslog');
1456 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1457 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1458 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1459 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1460 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1461 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1462 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1463 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1464 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1465 set_file('dir2/messages', 'initially dir2/messages');
1466 set_file('dir2/messages.0', 'initially dir2/messages.0');
1467 set_file('dir2/messages.1', 'initially dir2/messages.1');
1468 set_file('dir2/messages.2', 'initially dir2/messages.2');
1469 set_file('dir2/messages.3', 'initially dir2/messages.3');
1470
1471 $now = time;
1472 $nowstr = gmtime($now);
1473 # a day minus 30 seconds ago...
1474 $closetodaysecs = $now - (60 * 60 * 24 - 30);
1475 $closetoday = gmtime($closetodaysecs);
1476 # a day minus six hours ago...
1477 $lessthandaysecs = $now - (60 * 60 * 24 - 60 * 60 * 6);
1478 $lessthanday = gmtime($lessthandaysecs);
1479
1480 set_file('logadm.conf', <<"EOF");
1481 # now: $nowstr is $now
1482 # $closetoday is $closetodaysecs
1483 dir1/syslog -p 1d -C 8 -P '$closetoday'
1484 # $lessthanday is $lessthandaysecs
1485 dir2/messages -p 1d -C 4 -P '$lessthanday'
1486 EOF
1487
1488 set_file('checktest', <<'EOF');
1489 [ -s std.err ] && { cat std.err; exit 1; }
1490 [ -s std.out ] && exit 1
1491 [ -f dir1/syslog ] || exit 1
1492 [ -s dir1/syslog ] && exit 1
1493 [ -f dir1/syslog.0 ] || exit 1
1494 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1495 [ -f dir1/syslog.1 ] || exit 1
1496 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1497 [ -f dir1/syslog.2 ] || exit 1
1498 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1499 [ -f dir1/syslog.3 ] || exit 1
1500 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
1501 [ -f dir1/syslog.4 ] || exit 1
1502 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
1503 [ -f dir1/syslog.5 ] || exit 1
1504 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
1505 [ -f dir1/syslog.6 ] || exit 1
1506 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
1507 [ -f dir1/syslog.7 ] || exit 1
1508 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
1509 [ -f dir1/syslog.8 ] && exit 1
1510
1511 [ -f dir2/messages ] || exit 1
1512 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages`" ] || exit 1
1513 [ -f dir2/messages.0 ] || exit 1
1514 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1515 [ -f dir2/messages.1 ] || exit 1
1516 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1517 [ -f dir2/messages.2 ] || exit 1
1518 [ "xinitially dir2/messages.2" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1519 [ -f dir2/messages.3 ] || exit 1
1520 [ "xinitially dir2/messages.3" = "x`/bin/cat dir2/messages.3`" ] || exit 1
1521 [ -f dir2/messages.4 ] && exit 1
1522 exit 0
1523 EOF
1524
1525 set_file('runtest', <<"EOF");
1526 # test "logadm9d"
1527 $envsetup
1528 exec $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err
1529 EOF
1530 }
1531
1532 ###########################################################################
1533 #
1534 # logadm10 -- test of size-based rotation check
1535 #
1536 ###########################################################################
1537 sub logadm10 {
1538 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1539 set_file('dir1/syslog', 'initially dir1/syslogXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
1540 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1541 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1542 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1543 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1544 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1545 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1546 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1547 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1548 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1549 set_file('dir2/messages', 'initially dir2/messages');
1550 set_file('dir2/messages.0', 'initially dir2/messages.0');
1551 set_file('dir2/messages.1', 'initially dir2/messages.1');
1552 set_file('dir2/messages.2', 'initially dir2/messages.2');
1553 set_file('dir2/messages.3', 'initially dir2/messages.3');
1554
1555 set_file('logadm.conf', <<"EOF");
1556 dir1/syslog -C 8 -s 30b
1557 dir2/messages -C 4 -s 30b
1558 EOF
1559
1560 set_file('checktest', <<'EOF');
1561 [ -s std.err ] && { cat std.err; exit 1; }
1562 [ -s std.out ] && exit 1
1563 [ -f dir1/syslog ] || exit 1
1564 [ -s dir1/syslog ] && exit 1
1565 [ -f dir1/syslog.0 ] || exit 1
1566 [ "xinitially dir1/syslogXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1567 [ -f dir1/syslog.1 ] || exit 1
1568 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1569 [ -f dir1/syslog.2 ] || exit 1
1570 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1571 [ -f dir1/syslog.3 ] || exit 1
1572 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
1573 [ -f dir1/syslog.4 ] || exit 1
1574 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
1575 [ -f dir1/syslog.5 ] || exit 1
1576 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
1577 [ -f dir1/syslog.6 ] || exit 1
1578 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
1579 [ -f dir1/syslog.7 ] || exit 1
1580 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
1581 [ -f dir1/syslog.8 ] && exit 1
1582
1583 [ -f dir2/messages ] || exit 1
1584 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages`" ] || exit 1
1585 [ -f dir2/messages.0 ] || exit 1
1586 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1587 [ -f dir2/messages.1 ] || exit 1
1588 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1589 [ -f dir2/messages.2 ] || exit 1
1590 [ "xinitially dir2/messages.2" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1591 [ -f dir2/messages.3 ] || exit 1
1592 [ "xinitially dir2/messages.3" = "x`/bin/cat dir2/messages.3`" ] || exit 1
1593 [ -f dir2/messages.4 ] && exit 1
1594 exit 0
1595 EOF
1596
1597 set_file('runtest', <<"EOF");
1598 # test "logadm10"
1599 $envsetup
1600 exec $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err
1601 EOF
1602 }
1603
1604 ###########################################################################
1605 #
1606 # logadm11 -- test of size-based expiration check
1607 #
1608 ###########################################################################
1609 sub logadm11 {
1610 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1611 set_file('dir1/syslog', 'initially dir1/syslog');
1612 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1613 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1614 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1615 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1616 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1617 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1618 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1619 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1620 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1621 set_file('dir2/messages', 'initially dir2/messages');
1622 set_file('dir2/messages.0', 'initially dir2/messages.0');
1623 set_file('dir2/messages.1', 'initially dir2/messages.1');
1624 set_file('dir2/messages.2', 'initially dir2/messages.2');
1625 set_file('dir2/messages.3', 'initially dir2/messages.3');
1626
1627 set_file('logadm.conf', <<"EOF");
1628 dir1/syslog -C 8 -s 30b -S 75b
1629 dir2/messages -C 4 -s 30b -S 75b
1630 EOF
1631
1632 set_file('checktest', <<'EOF');
1633 [ -s std.err ] && { cat std.err; exit 1; }
1634 [ -s std.out ] && exit 1
1635 [ -f dir1/syslog ] || exit 1
1636 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog`" ] || exit 1
1637 [ -f dir1/syslog.0 ] || exit 1
1638 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1639 [ -f dir1/syslog.1 ] || exit 1
1640 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1641 [ -f dir1/syslog.2 ] || exit 1
1642 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1643 [ -f dir1/syslog.3 ] && exit 1
1644 [ -f dir1/syslog.4 ] && exit 1
1645 [ -f dir1/syslog.5 ] && exit 1
1646 [ -f dir1/syslog.6 ] && exit 1
1647 [ -f dir1/syslog.7 ] && exit 1
1648 [ -f dir1/syslog.8 ] && exit 1
1649
1650 [ -f dir2/messages ] || exit 1
1651 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages`" ] || exit 1
1652 [ -f dir2/messages.0 ] || exit 1
1653 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1654 [ -f dir2/messages.1 ] || exit 1
1655 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1656 [ -f dir2/messages.2 ] || exit 1
1657 [ "xinitially dir2/messages.2" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1658 [ -f dir2/messages.3 ] && exit 1
1659 [ -f dir2/messages.4 ] && exit 1
1660 exit 0
1661 EOF
1662
1663 set_file('runtest', <<"EOF");
1664 # test "logadm11"
1665 $envsetup
1666 exec $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err
1667 EOF
1668 }
1669
1670 ###########################################################################
1671 #
1672 # logadm12 -- ENOENT error path
1673 #
1674 ###########################################################################
1675 sub logadm12 {
1676 set_file('std.err.expect', <<'EOF');
1677 logadm: Warning: logfile: No such file or directory
1678 EOF
1679
1680 set_file('checktest', <<"EOF");
1681 [ -s std.out ] && exit 1
1682 exec /bin/diff std.err.expect std.err
1683 EOF
1684
1685 set_file('runtest', <<"EOF");
1686 # test "logadm12"
1687 $envsetup
1688 exec $bindir/logadm -f /dev/null logfile >std.out 2>std.err
1689 EOF
1690 }
1691
1692 ###########################################################################
1693 #
1694 # logadm13 -- ENOENT error path with -N flag
1695 #
1696 ###########################################################################
1697 sub logadm13 {
1698 set_file('checktest', <<"EOF");
1699 [ -s std.err ] && { cat std.err; exit 1; }
1700 [ -s std.out ] && exit 1
1701 exit 0
1702 EOF
1703
1704 set_file('runtest', <<"EOF");
1705 # test "logadm13"
1706 $envsetup
1707 exec $bindir/logadm -N -f /dev/null logfile >std.out 2>std.err
1708 EOF
1709 }
1710
1711 ###########################################################################
1712 #
1713 # logadm14 -- test of -n and -v flags
1714 #
1715 ###########################################################################
1716 sub logadm14 {
1717 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
1718 set_file('dir1/syslog', 'initially dir1/syslog');
1719 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
1720 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
1721 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
1722 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
1723 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
1724 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
1725 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
1726 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
1727 mkdir 'dir2', 0777 or die "mkdir dir2: $!\n";
1728 set_file('dir2/messages', 'initially dir2/messages');
1729 set_file('dir2/messages.0', 'initially dir2/messages.0');
1730 set_file('dir2/messages.1', 'initially dir2/messages.1');
1731 set_file('dir2/messages.2', 'initially dir2/messages.2');
1732 set_file('dir2/messages.3', 'initially dir2/messages.3');
1733
1734 set_file('logadm.conf', <<'EOF');
1735 #
1736 # logadm.conf
1737 #
1738 # Default settings for system log file management.
1739 # The -w option to logadm(1M) is the preferred way to write to this file,
1740 # but if you do edit it by hand, use "logadm -V" to check it for errors.
1741 # but if you do edit it by hand, use "logadm -V" to check it for errors.
1742 #
1743 # The format of lines in this file is:
1744 # <logname> <options>
1745 # For each logname listed here, the default options to logadm
1746 # are given. Options given on the logadm command line override
1747 # the defaults contained in this file.
1748 #
1749 # logadm typically runs early every morning via an entry in
1750 # root's crontab (see crontab(1)).
1751 #
1752 dir1/syslog -C 8 -a 'echo kill -HUP `cat /var/run/*syslog*pid` >> cmd.out'
1753 dir2/messages -C 4 -a 'echo kill -HUP `cat /var/run/*syslog*pid` >> cmd.out'
1754 #
1755 # The entry below is used by turnacct(1M)
1756 #
1757 /var/adm/pacct -C 0 -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
1758 EOF
1759
1760 $gid = $);
1761 $gid =~ s/ .*//;
1762 set_file('grep.out.expect', <<'EOF'.<<"EOF".<<'EOF'.<<"EOF".<<'EOF');
1763 # loading logadm.conf
1764 # processing logname: dir1/syslog
1765 # using default rotate rules: -s1b -p1w
1766 # using default template: $file.$n
1767 mkdir -p dir1 # verify directory exists
1768 mv -f dir1/syslog.7 dir1/syslog.8 # rotate log file
1769 mkdir -p dir1 # verify directory exists
1770 mv -f dir1/syslog.6 dir1/syslog.7 # rotate log file
1771 mkdir -p dir1 # verify directory exists
1772 mv -f dir1/syslog.5 dir1/syslog.6 # rotate log file
1773 mkdir -p dir1 # verify directory exists
1774 mv -f dir1/syslog.4 dir1/syslog.5 # rotate log file
1775 mkdir -p dir1 # verify directory exists
1776 mv -f dir1/syslog.3 dir1/syslog.4 # rotate log file
1777 mkdir -p dir1 # verify directory exists
1778 mv -f dir1/syslog.2 dir1/syslog.3 # rotate log file
1779 mkdir -p dir1 # verify directory exists
1780 mv -f dir1/syslog.1 dir1/syslog.2 # rotate log file
1781 mkdir -p dir1 # verify directory exists
1782 mv -f dir1/syslog.0 dir1/syslog.1 # rotate log file
1783 mkdir -p dir1 # verify directory exists
1784 mv -f dir1/syslog dir1/syslog.0 # rotate log file
1785 touch dir1/syslog
1786 EOF
1787 chown $>:$gid dir1/syslog
1788 EOF
1789 chmod 664 dir1/syslog
1790 # processing logname: dir2/messages
1791 # using default rotate rules: -s1b -p1w
1792 # using default template: $file.$n
1793 mkdir -p dir2 # verify directory exists
1794 mv -f dir2/messages.3 dir2/messages.4 # rotate log file
1795 mkdir -p dir2 # verify directory exists
1796 mv -f dir2/messages.2 dir2/messages.3 # rotate log file
1797 mkdir -p dir2 # verify directory exists
1798 mv -f dir2/messages.1 dir2/messages.2 # rotate log file
1799 mkdir -p dir2 # verify directory exists
1800 mv -f dir2/messages.0 dir2/messages.1 # rotate log file
1801 mkdir -p dir2 # verify directory exists
1802 mv -f dir2/messages dir2/messages.0 # rotate log file
1803 touch dir2/messages
1804 EOF
1805 chown $>:$gid dir2/messages
1806 EOF
1807 chmod 664 dir2/messages
1808 # processing logname: /var/adm/pacct
1809 # using default template: $file.$n
1810 sh -c echo kill -HUP `cat /var/run/*syslog*pid` >> cmd.out # -a cmd
1811 # logadm.conf and logadm.timestamps unchanged
1812 EOF
1813
1814 set_file('checktest', <<'EOF');
1815 [ -s std.err ] && { cat std.err; exit 1; }
1816 [ -f std.out ] || exit 1
1817 [ -f dir1/syslog ] || exit 1
1818 [ "xinitially dir1/syslog" = "x`/bin/cat dir1/syslog`" ] || exit 1
1819 [ -f dir1/syslog.0 ] || exit 1
1820 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
1821 [ -f dir1/syslog.1 ] || exit 1
1822 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
1823 [ -f dir1/syslog.2 ] || exit 1
1824 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
1825 [ -f dir1/syslog.3 ] || exit 1
1826 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
1827 [ -f dir1/syslog.4 ] || exit 1
1828 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
1829 [ -f dir1/syslog.5 ] || exit 1
1830 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
1831 [ -f dir1/syslog.6 ] || exit 1
1832 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
1833 [ -f dir1/syslog.7 ] || exit 1
1834 [ "xinitially dir1/syslog.7" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
1835 [ -f dir1/syslog.8 ] && exit 1
1836
1837 [ -f dir2/messages ] || exit 1
1838 [ "xinitially dir2/messages" = "x`/bin/cat dir2/messages`" ] || exit 1
1839 [ -f dir2/messages.0 ] || exit 1
1840 [ "xinitially dir2/messages.0" = "x`/bin/cat dir2/messages.0`" ] || exit 1
1841 [ -f dir2/messages.1 ] || exit 1
1842 [ "xinitially dir2/messages.1" = "x`/bin/cat dir2/messages.1`" ] || exit 1
1843 [ -f dir2/messages.2 ] || exit 1
1844 [ "xinitially dir2/messages.2" = "x`/bin/cat dir2/messages.2`" ] || exit 1
1845 [ -f dir2/messages.3 ] || exit 1
1846 [ "xinitially dir2/messages.3" = "x`/bin/cat dir2/messages.3`" ] || exit 1
1847 [ -f dir2/messages.4 ] && exit 1
1848 /bin/grep -v 'recording rotation date' std.out > grep.out
1849 exec /bin/diff grep.out.expect grep.out
1850 EOF
1851
1852 set_file('runtest', <<"EOF");
1853 # test "logadm14"
1854 $envsetup
1855 exec $bindir/logadm -nv -f logadm.conf -F logadm.timestamps >std.out 2>std.err
1856 EOF
1857 }
1858
1859 ###########################################################################
1860 #
1861 # logadm15 -- test of -T
1862 #
1863 ###########################################################################
1864 sub logadm15 {
1865 set_file('logfile', '');
1866 set_file('logfile.0', 'initially logfile.0');
1867 set_file('logfile.1', 'initially logfile.1');
1868 set_file('logfile.2', 'initially logfile.2');
1869 set_file('logfile.3', 'initially logfile.3');
1870 set_file('logfile.4', 'initially logfile.4');
1871 set_file('logfile.5', 'initially logfile.5');
1872 set_file('logfile.6', 'initially logfile.6');
1873 set_file('logfile.7', 'initially logfile.7');
1874 set_file('logfile.8', 'initially logfile.8');
1875 set_file('logfile.9', 'initially logfile.9');
1876
1877 set_file('checktest', <<'EOF');
1878 [ -s std.err ] && { cat std.err; exit 1; }
1879 [ -s std.out ] && exit 1
1880 [ -f logfile ] || exit 1
1881 [ "x" = "x`/bin/cat logfile`" ] || exit 1
1882 [ -f logfile.0 ] || exit 1
1883 [ "xinitially logfile.0" = "x`/bin/cat logfile.0`" ] || exit 1
1884 [ -f logfile.1 ] || exit 1
1885 [ "xinitially logfile.1" = "x`/bin/cat logfile.1`" ] || exit 1
1886 [ -f logfile.2 ] || exit 1
1887 [ "xinitially logfile.2" = "x`/bin/cat logfile.2`" ] || exit 1
1888 [ -f logfile.3 ] && exit 1
1889 [ -f logfile.4 ] || exit 1
1890 [ "xinitially logfile.4" = "x`/bin/cat logfile.4`" ] || exit 1
1891 [ -f logfile.5 ] && exit 1
1892 [ -f logfile.6 ] || exit 1
1893 [ "xinitially logfile.6" = "x`/bin/cat logfile.6`" ] || exit 1
1894 [ -f logfile.7 ] && exit 1
1895 [ -f logfile.8 ] || exit 1
1896 [ "xinitially logfile.8" = "x`/bin/cat logfile.8`" ] || exit 1
1897 [ -f logfile.9 ] && exit 1
1898 [ -f logfile.10 ] && exit 1
1899 exit 0
1900 EOF
1901
1902 set_file('runtest', <<"EOF");
1903 # test "logadm15"
1904 $envsetup
1905 exec $bindir/logadm -f /dev/null logfile -C1 -T '*.[13579]'>std.out 2>std.err
1906 EOF
1907 }
1908
1909 ###########################################################################
1910 #
1911 # logadm16 -- test of -h
1912 #
1913 ###########################################################################
1914 sub logadm16 {
1915 set_file('std.err.expect', <<'EOF');
1916 Usage: logadm [options]
1917 (processes all entries in /etc/logadm.conf or conffile given by -f)
1918 or: logadm [options] logname...
1919 (processes the given lognames)
1920
1921 General options:
1922 -e mailaddr mail errors to given address
1923 -F timestamps use timestamps instead of /var/logadm/timestamps
1924 -f conffile use conffile instead of /etc/logadm.conf
1925 -h display help
1926 -N not an error if log file nonexistent
1927 -n show actions, don't perform them
1928 -r remove logname entry from conffile
1929 -V ensure conffile entries exist, correct
1930 -v print info about actions happening
1931 -w entryname write entry to config file
1932
1933 Options which control when a logfile is rotated:
1934 (default is: -s1b -p1w if no -s or -p)
1935 -p period only rotate if period passed since last rotate
1936 -P timestamp used to store rotation date in conffile
1937 -s size only rotate if given size or greater
1938
1939 Options which control how a logfile is rotated:
1940 (default is: -t '$file.$n', owner/group/mode taken from log file)
1941 -a cmd execute cmd after taking actions
1942 -b cmd execute cmd before taking actions
1943 -c copy & truncate logfile, don't rename
1944 -g group new empty log file group
1945 -l rotate log file with local time rather than UTC
1946 -m mode new empty log file mode
1947 -M cmd execute cmd to rotate the log file
1948 -o owner new empty log file owner
1949 -R cmd run cmd on file after rotate
1950 -t template template for naming old logs
1951 -z count gzip old logs except most recent count
1952
1953 Options which control the expiration of old logfiles:
1954 (default is: -C10 if no -A, -C, or -S)
1955 -A age expire logs older than age
1956 -C count expire old logs until count remain
1957 -E cmd run cmd on file to expire
1958 -S size expire until space used is below size
1959 -T pattern pattern for finding old logs
1960 EOF
1961
1962 set_file('checktest', <<'EOF');
1963 [ -s std.out ] && exit 1
1964 exec /bin/diff std.err.expect std.err
1965 EOF
1966
1967 set_file('runtest', <<"EOF");
1968 # test "logadm16"
1969 $envsetup
1970 exec $bindir/logadm -h >std.out 2>std.err
1971 EOF
1972 }
1973
1974 ###########################################################################
1975 #
1976 # logadm17 -- test that mkdir -p happens as necessary
1977 #
1978 ###########################################################################
1979 sub logadm17 {
1980 set_file('logfile', 'initially logfile');
1981
1982 set_file('checktest', <<'EOF');
1983 [ -s std.err ] && { cat std.err; exit 1; }
1984 [ -s std.out ] && exit 1
1985 [ -f dir1/dir2/logfile ] || exit 1
1986 [ -f logfile ] || exit 1
1987 [ "xinitially logfile" = "x`/bin/cat dir1/dir2/logfile`" ] || exit 1
1988 exit 0
1989 EOF
1990
1991 set_file('runtest', <<"EOF");
1992 # test "logadm17"
1993 $envsetup
1994 exec $bindir/logadm -f /dev/null -t 'dir1/dir2/\$basename' logfile -p now >std.out 2>std.err
1995 EOF
1996 }
1997
1998 ###########################################################################
1999 #
2000 # logadm18 -- test of -M option
2001 #
2002 ###########################################################################
2003 sub logadm18 {
2004 mkdir 'dir1', 0777 or die "mkdir dir1: $!\n";
2005 set_file('dir1/syslog', 'initially dir1/syslog');
2006 set_file('dir1/syslog.0', 'initially dir1/syslog.0');
2007 set_file('dir1/syslog.1', 'initially dir1/syslog.1');
2008 set_file('dir1/syslog.2', 'initially dir1/syslog.2');
2009 set_file('dir1/syslog.3', 'initially dir1/syslog.3');
2010 set_file('dir1/syslog.4', 'initially dir1/syslog.4');
2011 set_file('dir1/syslog.5', 'initially dir1/syslog.5');
2012 set_file('dir1/syslog.6', 'initially dir1/syslog.6');
2013 set_file('dir1/syslog.7', 'initially dir1/syslog.7');
2014
2015 set_file('logadm.conf', <<"EOF");
2016 dir1/syslog -C 8 -s 1b -M '/bin/tr [a-z] [A-Z] < \$file > \$nfile; /bin/rm -f \$file'
2017 EOF
2018
2019 set_file('checktest', <<'EOF');
2020 [ -s std.err ] && { cat std.err; exit 1; }
2021 [ -s std.out ] && exit 1
2022 [ -f dir1/syslog ] || exit 1
2023 [ -s dir1/syslog ] && exit 1
2024 [ -f dir1/syslog.0 ] || exit 1
2025 [ "xINITIALLY DIR1/SYSLOG" = "x`/bin/cat dir1/syslog.0`" ] || exit 1
2026 [ -f dir1/syslog.1 ] || exit 1
2027 [ "xinitially dir1/syslog.0" = "x`/bin/cat dir1/syslog.1`" ] || exit 1
2028 [ -f dir1/syslog.2 ] || exit 1
2029 [ "xinitially dir1/syslog.1" = "x`/bin/cat dir1/syslog.2`" ] || exit 1
2030 [ -f dir1/syslog.3 ] || exit 1
2031 [ "xinitially dir1/syslog.2" = "x`/bin/cat dir1/syslog.3`" ] || exit 1
2032 [ -f dir1/syslog.4 ] || exit 1
2033 [ "xinitially dir1/syslog.3" = "x`/bin/cat dir1/syslog.4`" ] || exit 1
2034 [ -f dir1/syslog.5 ] || exit 1
2035 [ "xinitially dir1/syslog.4" = "x`/bin/cat dir1/syslog.5`" ] || exit 1
2036 [ -f dir1/syslog.6 ] || exit 1
2037 [ "xinitially dir1/syslog.5" = "x`/bin/cat dir1/syslog.6`" ] || exit 1
2038 [ -f dir1/syslog.7 ] || exit 1
2039 [ "xinitially dir1/syslog.6" = "x`/bin/cat dir1/syslog.7`" ] || exit 1
2040 [ -f dir1/syslog.8 ] && exit 1
2041
2042 exit 0
2043 EOF
2044
2045 set_file('runtest', <<"EOF");
2046 # test "logadm18"
2047 $envsetup
2048 exec $bindir/logadm -f logadm.conf -F logadm.timestamps >std.out 2>std.err
2049 EOF
2050 }
2051
2052 #############################################################################
2053 #
2054 # logadm19 -- test of -l
2055 #
2056 #############################################################################
2057 sub logadm19 {
2058 set_file('logfile', 'initially logfile');
2059
2060 set_file('checktest', <<'EOF');
2061 [ -s std.err ] && { cat std.err; exit 1; }
2062 [ -s std.out ] && exit 1
2063 [ -s logfile ] && exit 1
2064 TZ= export TZ
2065 d=`/bin/date +\%d\%H\%M`
2066 [ -f logfile.$d ] || exit 1
2067 [ "xinitially logfile" = "x`/bin/cat logfile.$d`" ] || exit 1
2068 exit 0
2069 EOF
2070
2071 set_file('runtest', <<"EOF");
2072 # test "logadm19"
2073 $envsetup
2074 exec $bindir/logadm -f /dev/null -l -p now logfile -t '\$file.\%d\%H\%M' >std.out 2>std.err
2075 EOF
2076 }
2077
2078 #############################################################################
2079 #
2080 # logadm20 -- test of unquotables/error handling
2081 #
2082 #############################################################################
2083 sub logadm20 {
2084 set_file('logadm.conf', <<'EOF');
2085 # non-trivial entry
2086 /var/log/syslog -C 8 -a 'kill -HUP `cat /var/run/*syslog*pid`'
2087 EOF
2088
2089 set_file('std.err.expect', <<'EOF');
2090 logadm: Error: Can't protect quotes in </bin/echo "She can't take anymore, Cap'n!">
2091 logadm: Error: unsafe to update configuration file or timestamps
2092 logadm: Error: bailing out due to command line errors
2093 Use "logadm -h" for help.
2094 exit=1
2095 EOF
2096
2097 set_file('checktest', <<'EOF');
2098 [ -s std.err ] || exit 1
2099 [ -s std.out ] && exit 1
2100 [ -f logadm.conf????? ] && exit 1
2101 [ -f logadm.timestamps????? ] && exit 1
2102 exec /bin/diff std.err.expect std.err
2103 EOF
2104
2105 set_file('runtest', <<"EOF");
2106 # test "logadm20"
2107 $envsetup
2108 $bindir/logadm -f logadm.conf -F logadm.timestamps -w /a/b/c -p 1w -l -b "/bin/echo \\"She can't take anymore, Cap'n!\\"" >std.out 2>std.err
2109 echo exit=\$? >>std.err
2110 EOF
2111 }
--- EOF ---