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::Exception;
use POSIX qw/setlocale/;

use Hiredis::Async;

setlocale( &POSIX::LC_ALL, 'C' );

# Redis automatically frees the redis context causing major problems.  We make
# sure that we can't run any commands after this sort of error.

my $redis = Hiredis::Async->new(host => '127.0.0.1', port => 12345);

my ($ping_res, $ping_err);
$redis->Command(['PING'], sub { ($ping_res, $ping_err) = @_ } );

ok $redis->IsAllocated, 'make sure it got allocated';

$redis->HandleWrite;

is $ping_res, undef, 'no response';
like $ping_err, qr/Connection refused/i, 'connection refused error';

ok !$redis->IsAllocated, 'make sure it got deallocated';

done_testing;