1# The client sends messages with different facility and severity.
2# The syslogd writes 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 the messages appear in the correct log files.
8
9use strict;
10use warnings;
11use Sys::Syslog;
12
13my (@messages, @priorities);
14foreach my $fac (qw(local5 local6 local7)) {
15    foreach my $sev (qw(notice warning err)) {
16	my $msg = "$fac.$sev";
17	push @messages, $msg;
18	no strict 'refs';
19	my $prio = ("Sys::Syslog::LOG_".uc($fac))->() |
20	    ("Sys::Syslog::LOG_".uc($sev))->();
21	push @priorities, $prio;
22    }
23}
24
25my %selector2messages = (
26    "*.*" => [@messages],
27    "*.info" => [@messages],
28    "*.notice" => [@messages],
29    "*.warning" => [ grep { /\.(warning|err)$/ } @messages],
30    "*.err" => [ grep { /\.err$/ } @messages],
31    "*.crit" => [],
32    "*.none" => [],
33    "local5.*" => [qw(local5.notice local5.warning local5.err)],
34    "local5.info" => [qw(local5.notice local5.warning local5.err)],
35    "local5.notice" => [qw(local5.notice local5.warning local5.err)],
36    "local5.warning" => [qw(local5.warning local5.err)],
37    "local5.err" => [qw(local5.err)],
38    "local5.crit" => [],
39    "local5.none" => [],
40    "local5.warning;local5.err" => [qw(local5.err)],
41    "local5.err;local5.warning" => [qw(local5.warning local5.err)],
42    "local6.warning;local7.err" => [qw(local6.warning local6.err local7.err)],
43    "local6.err;local7.err" => [qw(local6.err local7.err)],
44    "local6,local7.err" => [qw(local6.err local7.err)],
45    "local6,local7.warning;local6.err" => [qw(local6.err local7.warning
46	local7.err)],
47    "*.*;local6,local7.none" => [qw(local5.notice local5.warning local5.err)],
48);
49
50our %args = (
51    client => {
52	func => sub {
53	    my $self = shift;
54	    for (my $i = 0; $i < @messages; $i++) {
55		syslog($priorities[$i], $messages[$i]);
56	    }
57	    write_log($self);
58	},
59    },
60    syslogd => {
61	conf => selector2config(%selector2messages),
62    },
63    multifile => [
64	(map { { loggrep => $_ } } (selector2loggrep(%selector2messages))),
65    ],
66    server => {
67	loggrep => { map { qr/ <$_>/ => 1 } @priorities },
68    },
69    file => {
70	loggrep => { map { qr/: $_$/ => 1 } @messages },
71    },
72);
73
741;
75