1# Run client before starting syslogd.
2# The client writes one message before and one after syslogd is started.
3# The kernel writes a sendsyslog(2) error message to the log socket.
4# Start syslogd, it reads the error and the second message from the log socket.
5# Find the kernel error message in file, syslogd, server log.
6# Check that the first message got lost.
7# Create a ktrace dump of the client and check that sendsyslog(2) has failed.
8
9use strict;
10use warnings;
11use Errno ':POSIX';
12
13my $errno = ENOTCONN;
14my $kerngrep = qr/sendsyslog: dropped \d+ messages?, error $errno, pid \d+$/;
15
16our %args = (
17    client => {
18	early => 1,
19	func => sub { write_between2logs(shift, sub {
20	    my $self = shift;
21	    ${$self->{syslogd}}->loggrep(qr/syslogd: started/, 5)
22		or die ref($self), " syslogd started not in syslogd.log";
23	})},
24	ktrace => {
25	    qr/CALL  sendsyslog\(/ => '>=2',
26	    qr/RET   sendsyslog -1 errno $errno / => '>=1',
27	},
28    },
29    syslogd => {
30	loggrep => {
31	    get_firstlog() => 0,
32	    qr/msg $kerngrep/ => 1,
33	    get_testgrep() => 1,
34	},
35    },
36    server => {
37	loggrep => {
38	    get_firstlog() => 0,
39	    $kerngrep => 1,
40	    get_testgrep() => 1,
41	},
42    },
43    file => {
44	loggrep => {
45	    get_firstlog() => 0,
46	    $kerngrep => 1,
47	    get_testgrep() => 1,
48	},
49    },
50);
51
521;
53