From 7fb7f4f45a977e570415098eb52bec72e481ef91 Mon Sep 17 00:00:00 2001 From: bluhm Date: Wed, 31 Dec 2014 14:05:26 +0000 Subject: [PATCH] Adapt and add regression tests for sending syslog messages over TCP. --- regress/usr.sbin/syslogd/args-maxunix.pl | 2 +- regress/usr.sbin/syslogd/args-proto-udp.pl | 2 +- regress/usr.sbin/syslogd/args-proto-udp4.pl | 2 +- regress/usr.sbin/syslogd/args-proto-udp6.pl | 2 +- .../usr.sbin/syslogd/args-server-tcp-close.pl | 42 +++++++++++++++++ .../usr.sbin/syslogd/args-server-tcp-error.pl | 47 +++++++++++++++++++ .../syslogd/args-server-tcp-sendback.pl | 46 ++++++++++++++++++ regress/usr.sbin/syslogd/args-server-tcp4.pl | 29 ++++++++++++ regress/usr.sbin/syslogd/args-server-tcp6.pl | 29 ++++++++++++ regress/usr.sbin/syslogd/args-server-udp4.pl | 2 +- regress/usr.sbin/syslogd/args-server-udp6.pl | 2 +- .../usr.sbin/syslogd/args-sighup-config.pl | 2 +- .../usr.sbin/syslogd/args-sighup-privsep.pl | 2 +- regress/usr.sbin/syslogd/args-sighup.pl | 2 +- 14 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 regress/usr.sbin/syslogd/args-server-tcp-close.pl create mode 100644 regress/usr.sbin/syslogd/args-server-tcp-error.pl create mode 100644 regress/usr.sbin/syslogd/args-server-tcp-sendback.pl create mode 100644 regress/usr.sbin/syslogd/args-server-tcp4.pl create mode 100644 regress/usr.sbin/syslogd/args-server-tcp6.pl diff --git a/regress/usr.sbin/syslogd/args-maxunix.pl b/regress/usr.sbin/syslogd/args-maxunix.pl index 084e85fb5ba..98357ecc485 100644 --- a/regress/usr.sbin/syslogd/args-maxunix.pl +++ b/regress/usr.sbin/syslogd/args-maxunix.pl @@ -36,7 +36,7 @@ our %args = ( (map { (get_testlog()." unix-$_.sock unix socket" => 1) } (1..(MAXUNIX-1))), get_testlog()." unix-".MAXUNIX.".sock unix socket" => 0, - } + }, }, ); diff --git a/regress/usr.sbin/syslogd/args-proto-udp.pl b/regress/usr.sbin/syslogd/args-proto-udp.pl index 835ee05bcf6..01b58f1dd99 100644 --- a/regress/usr.sbin/syslogd/args-proto-udp.pl +++ b/regress/usr.sbin/syslogd/args-proto-udp.pl @@ -13,7 +13,7 @@ our %args = ( syslogd => { loghost => '@udp://127.0.0.1:$connectport', loggrep => { - qr/Logging to FORW \@udp:\/\/127.0.0.1:\d+/ => '>=4', + qr/Logging to FORWUDP \@udp:\/\/127.0.0.1:\d+/ => '>=4', get_testlog() => 1, }, }, diff --git a/regress/usr.sbin/syslogd/args-proto-udp4.pl b/regress/usr.sbin/syslogd/args-proto-udp4.pl index b6de14fdae3..66953a847b1 100644 --- a/regress/usr.sbin/syslogd/args-proto-udp4.pl +++ b/regress/usr.sbin/syslogd/args-proto-udp4.pl @@ -13,7 +13,7 @@ our %args = ( syslogd => { loghost => '@udp4://127.0.0.1:$connectport', loggrep => { - qr/Logging to FORW \@udp4:\/\/127.0.0.1:\d+/ => '>=4', + qr/Logging to FORWUDP \@udp4:\/\/127.0.0.1:\d+/ => '>=4', get_testlog() => 1, }, }, diff --git a/regress/usr.sbin/syslogd/args-proto-udp6.pl b/regress/usr.sbin/syslogd/args-proto-udp6.pl index 55d3ea5806b..8b39c1598e6 100644 --- a/regress/usr.sbin/syslogd/args-proto-udp6.pl +++ b/regress/usr.sbin/syslogd/args-proto-udp6.pl @@ -13,7 +13,7 @@ our %args = ( syslogd => { loghost => '@udp6://[::1]:$connectport', loggrep => { - qr/Logging to FORW \@udp6:\/\/\[::1\]:\d+/ => '>=4', + qr/Logging to FORWUDP \@udp6:\/\/\[::1\]:\d+/ => '>=4', get_testlog() => 1, }, }, diff --git a/regress/usr.sbin/syslogd/args-server-tcp-close.pl b/regress/usr.sbin/syslogd/args-server-tcp-close.pl new file mode 100644 index 00000000000..aba01c7db2d --- /dev/null +++ b/regress/usr.sbin/syslogd/args-server-tcp-close.pl @@ -0,0 +1,42 @@ +# The TCP server closes the connection to syslogd. +# The client writes a message to Sys::Syslog native method. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via IPv4 TCP to an explicit loghost. +# The server receives the message on its TCP socket. +# Find the message in client, pipe, syslogd log. +# Check that syslogd writes a log message about the server close. + +use strict; +use warnings; +use Socket; + +our %args = ( + client => { + func => sub { + my $self = shift; + ${$self->{syslogd}}->loggrep("loghost .* connection close", 2) + or die "connection close in syslogd.log"; + write_log($self, @_); + }, + }, + syslogd => { + loghost => '@tcp://127.0.0.1:$connectport', + loggrep => { + qr/Logging to FORWTCP \@tcp:\/\/127.0.0.1:\d+/ => '>=4', + get_testlog() => 1, + qr/syslogd: loghost .* connection close/ => 2, + }, + }, + server => { + listen => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1" }, + func => sub {}, + loggrep => {}, + }, + file => { + loggrep => { + qr/syslogd: loghost .* connection close/ => 1, + }, + }, +); + +1; diff --git a/regress/usr.sbin/syslogd/args-server-tcp-error.pl b/regress/usr.sbin/syslogd/args-server-tcp-error.pl new file mode 100644 index 00000000000..a9f3d845f1e --- /dev/null +++ b/regress/usr.sbin/syslogd/args-server-tcp-error.pl @@ -0,0 +1,47 @@ +# The TCP server aborts the connection to syslogd. +# The client writes a message to Sys::Syslog native method. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via IPv4 TCP to an explicit loghost. +# The server receives the message on its TCP socket. +# Find the message in client, pipe, syslogd log. +# Check that syslogd writes a log message about the server error. + +use strict; +use warnings; +use Socket; + +our %args = ( + client => { + func => sub { + my $self = shift; + ${$self->{syslogd}}->loggrep("loghost .* connection error", 2) + or die "connection error in syslogd.log"; + write_log($self, @_); + }, + }, + syslogd => { + loghost => '@tcp://127.0.0.1:$connectport', + loggrep => { + qr/Logging to FORWTCP \@tcp:\/\/127.0.0.1:\d+/ => '>=4', + get_testlog() => 1, + qr/syslogd: loghost .* connection error/ => 2, + }, + }, + server => { + listen => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1" }, + func => sub { + my $self = shift; + setsockopt(STDOUT, SOL_SOCKET, SO_LINGER, pack('ii', 1, 0)) + or die "set socket linger failed: $!"; + }, + loggrep => {}, + }, + file => { + loggrep => { + qr/syslogd: loghost .* connection error: Connection reset by peer/ + => 1, + }, + }, +); + +1; diff --git a/regress/usr.sbin/syslogd/args-server-tcp-sendback.pl b/regress/usr.sbin/syslogd/args-server-tcp-sendback.pl new file mode 100644 index 00000000000..2677c055e33 --- /dev/null +++ b/regress/usr.sbin/syslogd/args-server-tcp-sendback.pl @@ -0,0 +1,46 @@ +# The TCP server writes a message back to the syslogd. +# The client writes a message to Sys::Syslog native method. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via IPv4 TCP to an explicit loghost. +# The server receives the message on its TCP socket. +# Find the message in client, pipe, syslogd, server log. +# Check that syslogd writes a debug message about the message sent back. + +use strict; +use warnings; +use Socket; + +my $sendback = "syslogd tcp server send back message"; + +our %args = ( + client => { + func => sub { + my $self = shift; + ${$self->{syslogd}}->loggrep("loghost .* did send .* back", 2) + or die "no send back in syslogd.log"; + write_log($self, @_); + }, + }, + syslogd => { + loghost => '@tcp://127.0.0.1:$connectport', + loggrep => { + qr/Logging to FORWTCP \@tcp:\/\/127.0.0.1:\d+/ => '>=4', + get_testlog() => 1, + qr/did send /.length($sendback).qr/ bytes back/ => 1, + }, + }, + server => { + listen => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1" }, + func => sub { + print($sendback); + read_log(@_); + }, + }, + file => { + loggrep => { + qr/$sendback/ => 0, + }, + }, +); + +1; diff --git a/regress/usr.sbin/syslogd/args-server-tcp4.pl b/regress/usr.sbin/syslogd/args-server-tcp4.pl new file mode 100644 index 00000000000..b52e65942ab --- /dev/null +++ b/regress/usr.sbin/syslogd/args-server-tcp4.pl @@ -0,0 +1,29 @@ +# The client writes a message to Sys::Syslog native method. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via IPv4 TCP to an explicit loghost. +# The server receives the message on its TCP socket. +# Find the message in client, file, pipe, syslogd, server log. +# Check that syslogd and server log contain 127.0.0.1 address. + +use strict; +use warnings; +use Socket; + +our %args = ( + syslogd => { + loghost => '@tcp://127.0.0.1:$connectport', + loggrep => { + qr/Logging to FORWTCP \@tcp:\/\/127.0.0.1:\d+/ => '>=4', + get_testlog() => 1, + }, + }, + server => { + listen => { domain => AF_INET, proto => "tcp", addr => "127.0.0.1" }, + loggrep => { + qr/listen sock: 127.0.0.1 \d+/ => 1, + get_testlog() => 1, + }, + }, +); + +1; diff --git a/regress/usr.sbin/syslogd/args-server-tcp6.pl b/regress/usr.sbin/syslogd/args-server-tcp6.pl new file mode 100644 index 00000000000..faa71aa528c --- /dev/null +++ b/regress/usr.sbin/syslogd/args-server-tcp6.pl @@ -0,0 +1,29 @@ +# The client writes a message to Sys::Syslog native method. +# The syslogd writes it into a file and through a pipe. +# The syslogd passes it via IPv6 TCP to an explicit loghost. +# The server receives the message on its TCP socket. +# Find the message in client, file, pipe, syslogd, server log. +# Check that syslogd and server log contain ::1 address. + +use strict; +use warnings; +use Socket; + +our %args = ( + syslogd => { + loghost => '@tcp://[::1]:$connectport', + loggrep => { + qr/Logging to FORWTCP \@tcp:\/\/\[::1\]:\d+/ => '>=4', + get_testlog() => 1, + }, + }, + server => { + listen => { domain => AF_INET6, proto => "tcp", addr => "::1" }, + loggrep => { + qr/listen sock: ::1 \d+/ => 1, + get_testlog() => 1, + }, + }, +); + +1; diff --git a/regress/usr.sbin/syslogd/args-server-udp4.pl b/regress/usr.sbin/syslogd/args-server-udp4.pl index 93a8298f68e..0abeb837fb8 100644 --- a/regress/usr.sbin/syslogd/args-server-udp4.pl +++ b/regress/usr.sbin/syslogd/args-server-udp4.pl @@ -13,7 +13,7 @@ our %args = ( syslogd => { loghost => '@127.0.0.1:$connectport', loggrep => { - qr/Logging to FORW \@127.0.0.1:\d+/ => '>=4', + qr/Logging to FORWUDP \@127.0.0.1:\d+/ => '>=4', get_testlog() => 1, }, }, diff --git a/regress/usr.sbin/syslogd/args-server-udp6.pl b/regress/usr.sbin/syslogd/args-server-udp6.pl index 8db614ade11..dadfea44e69 100644 --- a/regress/usr.sbin/syslogd/args-server-udp6.pl +++ b/regress/usr.sbin/syslogd/args-server-udp6.pl @@ -13,7 +13,7 @@ our %args = ( syslogd => { loghost => '@[::1]:$connectport', loggrep => { - qr/Logging to FORW \@\[::1\]:\d+/ => '>=4', + qr/Logging to FORWUDP \@\[::1\]:\d+/ => '>=4', get_testlog() => 1, }, }, diff --git a/regress/usr.sbin/syslogd/args-sighup-config.pl b/regress/usr.sbin/syslogd/args-sighup-config.pl index 9098824bc49..5f75fdd02a6 100644 --- a/regress/usr.sbin/syslogd/args-sighup-config.pl +++ b/regress/usr.sbin/syslogd/args-sighup-config.pl @@ -30,7 +30,7 @@ our %args = ( qr/config file changed: dying/ => 1, qr/syslogd: restarted/ => 0, get_between2loggrep(), - } + }, }, server => { func => sub { diff --git a/regress/usr.sbin/syslogd/args-sighup-privsep.pl b/regress/usr.sbin/syslogd/args-sighup-privsep.pl index 2caf900f046..e28b529ccff 100644 --- a/regress/usr.sbin/syslogd/args-sighup-privsep.pl +++ b/regress/usr.sbin/syslogd/args-sighup-privsep.pl @@ -28,7 +28,7 @@ our %args = ( loggrep => { qr/syslogd: restarted/ => 1, get_between2loggrep(), - } + }, }, server => { func => sub { diff --git a/regress/usr.sbin/syslogd/args-sighup.pl b/regress/usr.sbin/syslogd/args-sighup.pl index 73d0f56d698..63ffe2cac4c 100644 --- a/regress/usr.sbin/syslogd/args-sighup.pl +++ b/regress/usr.sbin/syslogd/args-sighup.pl @@ -30,7 +30,7 @@ our %args = ( qr/config file modified: restarting/ => 0, qr/syslogd: restarted/ => 1, get_between2loggrep(), - } + }, }, server => { func => sub { -- 2.20.1