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::Redis;

BEGIN {
  eval q{use Test::LeakTrace};
  plan skip_all => "Test::LeakTrace required" if $@;
}

plan skip_all => 'Setup $REDIS_SERVER'
  unless $ENV{REDIS_SERVER};

plan tests => 5;

no_leaks_ok {
  redis()->ping(\&cb_ioloop_stop)->ioloop->start;
}
"ping";

no_leaks_ok {
  redis()->execute("strange_command", \&cb_ioloop_stop)->ioloop->start;
}
"error";

no_leaks_ok {
  redis()->set(test => 'test_ok', \&cb_ioloop_stop)->ioloop->start;
}
"set";

no_leaks_ok {
  redis()->get(test => \&cb_ioloop_stop)->ioloop->start;
}
"get";

no_leaks_ok {
  my $sub = redis()->subscribe('test:random:sub:key');
  $sub->on(data => \&cb_ioloop_stop);
  $sub->ioloop->start;
}
"subscribe";

sub cb_ioloop_stop {
  shift->ioloop->stop;
}

sub redis {
  my $redis = Mojo::Redis->new(server => $ENV{REDIS_SERVER}, timeout => 5);
  $redis->on(error => sub {});
  $redis->select(14);
  $redis;
}