Blame t/data-validation.t

Packit 972a07
#!perl -w
Packit 972a07
# --------------------------------------------------------------------
Packit 972a07
# The aim of this test is to start a syslog server (TCP or UDP) using 
Packit 972a07
# the one available in POE, make Sys::Syslog connect to it by manually 
Packit 972a07
# select the corresponding mechanism, send some messages and, inside 
Packit 972a07
# the POE syslog server, check that these message are correctly crafted. 
Packit 972a07
# --------------------------------------------------------------------
Packit 972a07
use strict;
Packit 972a07
Packit 972a07
my $port;
Packit 972a07
BEGIN {
Packit 972a07
    # override getservbyname()
Packit 972a07
    *CORE::GLOBAL::getservbyname = sub ($$) {
Packit 972a07
        my @v = CORE::getservbyname($_[0], $_[1]);
Packit 972a07
Packit 972a07
        if (@v) {
Packit 972a07
            $v[2] = $port;
Packit 972a07
        } else {
Packit 972a07
            @v = ($_[0], "", $port, $_[1]);
Packit 972a07
        }
Packit 972a07
Packit 972a07
        return wantarray ? @v : $port
Packit 972a07
    }
Packit 972a07
}
Packit 972a07
Packit 972a07
use File::Spec;
Packit 972a07
use Test::More;
Packit 972a07
use Socket;
Packit 972a07
use Sys::Syslog qw(:standard :extended :macros);
Packit 972a07
Packit 972a07
Packit 972a07
# check than POE is available
Packit 972a07
plan skip_all => "POE is not available" unless eval "use POE; 1";
Packit 972a07
Packit 972a07
# check than POE::Component::Server::Syslog is available and recent enough
Packit 972a07
plan skip_all => "POE::Component::Server::Syslog is not available"
Packit 972a07
    unless eval "use POE::Component::Server::Syslog; 1";
Packit 972a07
plan skip_all => "POE::Component::Server::Syslog is too old"
Packit 972a07
    if POE::Component::Server::Syslog->VERSION < 1.14;
Packit 972a07
Packit 972a07
plan tests => 1;
Packit 972a07
Packit 972a07
   $port    = 5140;
Packit 972a07
my $proto   = "tcp";
Packit 972a07
Packit 972a07
my $ident   = "pocosyslog";
Packit 972a07
my $text    = "Close the world, txEn eht nepO.";
Packit 972a07
Packit 972a07
Packit 972a07
$SIG{ALRM} = sub {
Packit 972a07
    ok( 0, "test took too much time to execute" );
Packit 972a07
    exit
Packit 972a07
};
Packit 972a07
alarm 30;
Packit 972a07
Packit 972a07
my $pid = fork();
Packit 972a07
Packit 972a07
if ($pid) {
Packit 972a07
    # parent: setup a syslog server
Packit 972a07
    POE::Component::Server::Syslog->spawn(
Packit 972a07
        Alias       => 'syslog',
Packit 972a07
        Type        => $proto, 
Packit 972a07
        BindAddress => '127.0.0.1',
Packit 972a07
        BindPort    => $port,
Packit 972a07
        InputState  => \&client_input,
Packit 972a07
        ErrorState  => \&client_error,
Packit 972a07
    );
Packit 972a07
Packit 972a07
    $SIG{CHLD} = sub { wait() };
Packit 972a07
    POE::Kernel->sig_child($pid);
Packit 972a07
Packit 972a07
    POE::Kernel->run;
Packit 972a07
}
Packit 972a07
else {
Packit 972a07
    # child: send a message to the syslog server setup in the parent
Packit 972a07
    sleep 2;
Packit 972a07
    openlog($ident, "ndelay,pid", "local0");
Packit 972a07
    setlogsock($proto);
Packit 972a07
    syslog(info => $text);
Packit 972a07
    closelog();
Packit 972a07
    exit
Packit 972a07
}
Packit 972a07
Packit 972a07
sub client_input {
Packit 972a07
    my $message = $_[&ARG0];
Packit 972a07
    delete $message->{'time'};  # too hazardous to test
Packit 972a07
Packit 972a07
    is_deeply(
Packit 972a07
        $message,
Packit 972a07
        {
Packit 972a07
            host     => scalar gethostbyaddr(inet_aton('127.0.0.1'), AF_INET),
Packit 972a07
            pri      => &LOG_LOCAL0 + &LOG_INFO,
Packit 972a07
            facility => &LOG_LOCAL0 >> 3,
Packit 972a07
            severity => &LOG_INFO,
Packit 972a07
            msg      => "$ident\[$pid]: $text\n\0",
Packit 972a07
        },
Packit 972a07
        "checking syslog message"
Packit 972a07
    );
Packit 972a07
Packit 972a07
    POE::Kernel->post(syslog => "shutdown");
Packit 972a07
    POE::Kernel->stop;
Packit 972a07
}
Packit 972a07
Packit 972a07
sub client_error {
Packit 972a07
    my $message = $_[&ARG0];
Packit 972a07
Packit 972a07
    require Data::Dumper;
Packit 972a07
    $Data::Dumper::Indent   = 0;    $Data::Dumper::Indent   = 0;
Packit 972a07
    $Data::Dumper::Sortkeys = 1;    $Data::Dumper::Sortkeys = 1;
Packit 972a07
    fail "checking syslog message";
Packit 972a07
    diag "[client_error] message = ", Data::Dumper::Dumper($message);
Packit 972a07
Packit 972a07
    POE::Kernel->post(syslog => "shutdown");
Packit 972a07
    POE::Kernel->stop;
Packit 972a07
}
Packit 972a07