The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Test::More;
use AnyEvent;

plan skip_all => 'You can run tests just as root' if $<;

use_ok 'AnyEvent::Ping';

my $ping = new_ok 'AnyEvent::Ping' => [timeout => 1];

subtest 'ping 127.0.0.1' => sub {
    my $result;
    my $cv = AnyEvent->condvar;

    $ping->ping(
        '127.0.0.1',
        2,
        sub {
            my $lres = shift;

            $result = $lres;

            $cv->send;
        }
    );

    $cv->recv;

    is_deeply $result, [['OK', $result->[0][1]], ['OK', $result->[1][1]]],
      'ping 127.0.0.1';

    done_testing;
};

subtest 'check two concurrent ping' => sub {
    my $cv = AnyEvent->condvar;
    my @res;

    my $ping_cb = sub {
        my $res = shift;
        push @res, $res;
        $cv->send if @res >= 2;
    };

    $ping->ping('127.0.0.1', 4, $ping_cb);
    $ping->ping('127.0.0.1', 4, $ping_cb);

    $cv->recv;

    is $res[0][0][0], 'OK', 'first concurrent ping ok';
    is $res[1][0][0], 'OK', 'second concurrent ping ok';

    done_testing;
};

done_testing;