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