The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use Test::More;
use Test::TCP;

use Redis;
use Test::RedisServer;

eval { Test::RedisServer->new } or plan skip_all => 'redis-server is required in PATH to run this test';

# unix socket by default
my $server = Test::RedisServer->new;
ok $server->pid, 'pid ok';

my %connect_info = $server->connect_info;
like $connect_info{sock}, qr!/redis\.sock$!, 'unix socket ok';
ok !$connect_info{server}, 'server key does not exists ok';

my $redis = Redis->new(%connect_info);
is $redis->ping, 'PONG', 'ping pong ok';

$server->stop;
is $server->pid, undef, 'pid remove ok';
is $redis->ping, undef, 'no server available ok';

# port
my $port = empty_port();
$server = Test::RedisServer->new(conf => {
    bind => '127.0.0.1',
    port => $port,
});
ok $server->pid, 'pid ok';

%connect_info = $server->connect_info;
ok !$connect_info{sock}, 'sock does not exists ok';
is $connect_info{server}, '127.0.0.1:' . $port, 'server addr ok';

$redis = Redis->new(%connect_info);
is $redis->ping, 'PONG', 'ping pong ok';

undef $server;

is $redis->ping, undef, 'server died ok';

done_testing;