The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.008000;
use strict;
use warnings;

use lib 't/tlib';

use Test::More;
use Test::RedisRunner;
use AnyEvent;
use version 0.77;

####
sub run_redis_instance {
  my %params = @_;

  my $redis_server = eval {
    return Test::RedisRunner->new(
      conf => \%params,
    );
  };
  if ( !defined $redis_server ) {
    return;
  }

  my %conn_info = $redis_server->connect_info();

  return {
    server   => $redis_server,
    host     => $conn_info{host},
    port     => $conn_info{port},
    password => $params{requirepass},
  };
}

####
sub ev_loop {
  my $sub = shift;

  my $cv = AE::cv();

  $sub->( $cv );

  my $timer = AE::timer( 10, 0,
    sub {
      diag( 'Emergency exit from event loop. Test failed' );
      $cv->send();
    }
  );

  $cv->recv();

  return;
}

####
sub get_redis_version {
  my $redis = shift;

  my $ver;

  ev_loop(
    sub {
      my $cv = shift;

      $redis->info(
        { on_done => sub {
            my $data = shift;

            $ver = version->parse( 'v' . $data->{redis_version} );

            $cv->send();
          },
        }
      );
    }
  );

  return $ver;
}

1;