1# The client connects with TCP. 2# The syslogd writes local messages into multiple files depending on priority. 3# The syslogd writes it into a file and through a pipe. 4# The syslogd passes it via UDP to the loghost. 5# The server receives the message on its UDP socket. 6# Find the message in client, file, pipe, syslogd, server log. 7# Check that local syslog messages end up the correct priority file. 8 9use strict; 10use warnings; 11use Socket; 12use Sys::Syslog; 13 14my %selector2messages = ( 15 "syslog.*" => 16 [qw{ start .*accepted .*close .*accepted .*peer exiting.* }], 17 "syslog.debug" => 18 [qw{ start .*accepted .*close .*accepted .*peer exiting.* }], 19 "syslog.info" => [qw{ start .*peer exiting.* }], 20 "syslog.notice" => [qw{ .*peer exiting.* }], 21 "syslog.warning" => [qw{ exiting.* }], 22 "syslog.err" => [qw{ exiting.* }], 23 "syslog.crit" => [], 24 "syslog.alert" => [], 25 "syslog.emerg" => [], 26 "syslog.none" => [], 27); 28 29our %args = ( 30 client => { 31 connect => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1", 32 port => 514 }, 33 redo => 2, 34 func => sub { 35 my $self = shift; 36 $self->{redo}--; 37 if ($self->{redo}) { 38 write_message($self, get_testlog()); 39 IO::Handle::flush(\*STDOUT); 40 ${$self->{syslogd}}->loggrep(get_testgrep(), 2); 41 } else { 42 write_message($self, get_testlog()); 43 IO::Handle::flush(\*STDOUT); 44 ${$self->{syslogd}}->loggrep(get_testgrep(), 2, 2); 45 setsockopt(STDOUT, SOL_SOCKET, SO_LINGER, pack('ii', 1, 0)) 46 or die ref($self), " set socket linger failed: $!"; 47 write_shutdown($self); 48 } 49 }, 50 }, 51 syslogd => { 52 options => ["-T", "127.0.0.1:514"], 53 conf => selector2config(%selector2messages), 54 }, 55 multifile => [ 56 (map { { loggrep => $_ } } (selector2loggrep(%selector2messages))), 57 ], 58); 59 601; 61