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;
use Test::RedisServer;
use Test::TCP;

use EV;
use EV::Hiredis;

my $redis_server;
eval {
    $redis_server = Test::RedisServer->new;
} or plan skip_all => 'redis-server is required to this test';

my %connect_info = $redis_server->connect_info;

my $r = EV::Hiredis->new;

my $connected = 0;
my $error = 0;

$r->on_error(sub { $error++ });
$r->on_connect(sub {
    $connected++;

    my $t; $t = EV::timer .1, 0, sub {
        $r->disconnect;
        undef $t;
    };
});

$r->connect_unix( $connect_info{sock} );

EV::run;

is $connected, 1;
is $error, 0;

$redis_server->stop;

$r = EV::Hiredis->new;

$connected = 0;
$error = 0;

$r->on_error(sub {
    $error++;
});
$r->on_connect(sub {
    $connected++;

    my $t; $t = EV::timer .1, 0, sub {
        $r->disconnect;
        undef $t;
    };
});

$r->connect_unix( $connect_info{sock} );

EV::run;

is $connected, 0;
is $error, 1;

done_testing;