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 Mojo::IOLoop;
use IO::Socket::INET;

plan skip_all => "Unable to open raw socket: $!"
  unless IO::Socket::INET->new(Type => SOCK_RAW);

plan tests => 5;

use_ok 'MojoX::Ping';

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

my $result;

$ping->ping(
    '127.0.0.1',
    2,
    sub {
        my ($ping, $lres) = @_;

        $result = $lres;

        $ping->ioloop->stop;
    }
);

$ping->ioloop->start;

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

# Check two concurrent ping
my @res;
$ping->ping('127.0.0.1', 4, \&ping_cb);
$ping->ping('127.0.0.1', 4, \&ping_cb);
$ping->ioloop->start;
is $res[0][0][0], 'OK', 'first concurrent ping ok';
is $res[1][0][0], 'OK', 'second concurrent ping ok';

sub ping_cb {
    my ($ping, $res) = @_;
    push @res, $res;
    $ping->ioloop->stop if @res >= 2;
}