use strict; use warnings; use Test::More; BEGIN { eval "use IO::Socket::INET;"; if ($@) { plan skip_all => "No IO::Socket::INET installed"; exit(0); } if (!$ENV{LOG_HANDLER_SOCK_TEST}) { plan skip_all => "Set \$ENV{LOG_HANDLER_SOCK_TEST} to 1 to enable this test"; exit(0); } }; use Log::Handler::Output::Socket; use IO::Socket::INET; eval { $SIG{ALRM} = sub { die "STOP TEST" }; alarm 60; }; my $sock = IO::Socket::INET->new( LocalAddr => "127.0.0.1", Proto => "tcp", Listen => 1, Timeout => 15 ) or die $!; my $port = $sock->sockport; my $pid = fork; if (!$pid) { my $r = $sock->accept; my $m = <$r> || "empty"; if ($m ne "test message from logger") { die "something wents wrong ($m)"; } $sock->close; waitpid($pid, 0); exit(0); } $sock->close; sleep 1; plan tests => 4; ok(1, "fork"); my $log = Log::Handler::Output::Socket->new( peeraddr => "127.0.0.1", peerport => $port, proto => "tcp", timeout => 15, persistent => 0, reconnect => 0, ); ok(1, "new"); $log->log(message => "test message from logger") or do { ok(0, "testing log() - ".$log->errstr); }; ok(1, "testing log()"); $log->reload( { peeraddr => "localhost", peerport => $port, proto => "tcp", timeout => 15, persistent => 0, reconnect => 0, } ); ok($log->{sockopts}->{PeerAddr} eq "localhost", "checking reload ($log->{sockopts}->{PeerAddr})");