AnyEvent-RipeRedis
view release on metacpan or search on metacpan
t/08-eval.t view on Meta::CPAN
use 5.008000;
use strict;
use warnings;
use Test::More;
use AnyEvent::RipeRedis qw( :err_codes );
use Digest::SHA qw( sha1_hex );
use Scalar::Util qw( weaken );
use version 0.77;
require 't/test_helper.pl';
my $server_info = run_redis_instance();
if ( !defined $server_info ) {
plan skip_all => 'redis-server is required for this test';
}
my $redis = AnyEvent::RipeRedis->new(
host => $server_info->{host},
port => $server_info->{port},
);
my $ver = get_redis_version($redis);
if ( $ver < version->parse( 'v2.6' ) ) {
plan skip_all => 'redis-server 2.6 or higher is required for this test';
}
plan tests => 17;
t_no_script($redis);
t_eval_cached($redis);
t_eval_cached_mbulk($redis);
t_error_reply($redis);
t_errors_in_mbulk_reply($redis);
$redis->disconnect;
sub t_no_script {
my $redis = shift;
my $t_err;
my $script = q{
return redis.status_reply( 'OK' )
};
my $script_sha1 = sha1_hex($script);
ev_loop(
sub {
my $cv = shift;
$redis->evalsha( $script_sha1, 0,
sub {
my $reply = shift;
$t_err = shift;
$cv->send;
}
);
}
);
my $t_npref = 'no script';
like( $t_err->message, qr/^NOSCRIPT/, "$t_npref; error message" );
is( $t_err->code, E_NO_SCRIPT, "$t_npref; error code" );
return;
}
sub t_eval_cached {
my $redis = shift;
my $script = q{
return ARGV[1]
};
my @t_replies;
ev_loop(
sub {
my $cv = shift;
my $redis = $redis;
weaken( $redis );
$redis->eval_cached( $script, 0, 42,
sub {
my $reply = shift;
my $err = shift;
if ( defined $err ) {
diag( $err->message );
$cv->send;
return;
}
push( @t_replies, $reply );
$redis->eval_cached( $script, 0, 15 );
$redis->eval_cached( $script, 0, 57,
sub {
my $reply = shift;
my $err = shift;
if ( defined $err ) {
diag( $err->message );
$cv->send;
return;
}
push( @t_replies, $reply );
$cv->send;
}
);
}
);
}
);
is_deeply( \@t_replies, [ qw( 42 57 ) ], "eval_cached" );
return;
}
sub t_eval_cached_mbulk {
my $redis = shift;
my $script = q{
return
{ ARGV[1], ARGV[2],
{ ARGV[3],
{ ARGV[5], ARGV[6] },
ARGV[4],
{ ARGV[7], ARGV[8] }
}
}
};
my $t_reply;
( run in 0.848 second using v1.01-cache-2.11-cpan-39bf76dae61 )