1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
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( 15, 0,
sub {
diag( 'Emergency exit from event loop.' );
$cv->send;
}
);
$cv->recv;
return;
}
sub get_redis_version {
my $redis = shift;
my $ver;
ev_loop(
sub {
my $cv = shift;
$redis->info(
sub {
my $info = shift;
my $err = shift;
if ( defined $err ) {
diag( $err->message );
$cv->send;
return;
}
$ver = version->parse( 'v' . $info->{redis_version} );
$cv->send;
}
);
}
);
return $ver;
}
1;
|