The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;

BEGIN {
    do { local $@; eval { require Net::Syslog } }
        || plan skip_all => "Net::Syslog needed for this test";
}

use Sys::Hostname::Long qw/ hostname_long /;
use Message::Passing::Output::Syslog;
use Message::Passing::Input::Syslog;
use Message::Passing::Output::Callback;
use AnyEvent;

my $cv = AnyEvent->condvar;
my $host = '127.0.0.1';

my $syslog = Message::Passing::Output::Syslog->new(
    hostname => $host,
    port     => '5140',
);

my @msgs;
my $l = Message::Passing::Input::Syslog->new(
    output_to => Message::Passing::Output::Callback->new(
        cb => sub {
            push(@msgs, shift());
            $cv->send;
        },
    ),
);

my $idle; $idle = AnyEvent->idle(cb => sub {
    $syslog->consume("foo");
    undef $idle;
});

$cv->recv;

ok scalar(@msgs);
delete $msgs[0]->{message_raw};
delete $msgs[0]->{datetime_raw};
my $time = delete $msgs[0]->{epochtime};
like $time, qr/^\d+$/;

is_deeply \@msgs, [
    {
        preamble        => '171',
        priority        => 'err',
        priority_int    => 3,
        facility        => 'local5',
        facility_int    => 168,
        host_raw        => "client.t[$$]:",
        host            => 'client',
        domain          => "t[$$]:",
        program_raw     => undef,
        program_name    => undef,
        program_sub     => undef,
        program_pid     => undef,
        content         => 'foo',
        message         => 'foo',
        received_from   => $host,
    }
];

done_testing;