NAME
Test::Tarantool - The Swiss army knife for tests of Tarantool related Perl and lua code.
VERSION
Version 0.03
SYNOPSIS
use
Test::Tarantool;
use
AnyEvent;
# Clear data and exit on Ctrl+C.
my
$w
= AnyEvent->signal (
signal
=>
"INT"
,
cb
=>
sub
{
exit
0 });
my
@shards
=
map
{
my
$n
=
$_
;
Test::Tarantool->new(
host
=>
'127.17.3.0'
,
spaces
=> 'space[0] = {
enabled = 1,
index
= [ {
type = HASH,
unique = 1,
key_field = [ { fieldno = 0, type = STR }, ],
}, ],
}',
initlua
=>
do
{
open
my
$f
,
'<'
,
'init.lua'
;
local
$/ =
undef
;
<
$f
> or
""
;
},
on_die
=>
sub
{
warn
"Shard #$n unexpectedly terminated\n"
;
exit
; },
);
} 1..4;
my
@cluster
=
map
{ [
$_
->{host},
$_
->{p_port} ] }
@shards
;
{
my
$cv
= AE::cv();
$cv
->begin
for
(
@shards
);
$_
->start(
$cv
)
for
(
@shards
);
$cv
->
recv
;
}
{
$_
->sync_start()
for
(
@shards
);
}
{
my
(
$status
,
$reason
) =
$shards
[0]->sync_ro();
die
$reason
unless
$status
;
((
$shards
[0]->sync_admin_cmd(
"show info"
))[1]);
}
# Some test case here
$shards
[1]->pause();
# Some test case here
$shards
[1]->resume();
{
my
(
$status
,
$reason
) =
$shards
[0]->sync_rw();
die
$reason
unless
$status
;
((
$shards
[0]->sync_admin_cmd(
"show info"
))[1]);
}
# stop tarantools and clear work directoies
@shards
= ();
SUBROUTINES/METHODS
new option => value,...
Create new Tarantool instance. Every call of new method increase counter, below called as tarantool number or tn.
- root => $path
-
Tarantool work directory. Default is ./tnt_<10_random_lowercase_letters>
- arena => $size
-
The maximal size of tarantool arena in Gb. Default is 0.1
- cleanup => $bool
-
Remove tarantool work directory after garbage collection. Default is 1
- spaces => $string
-
Tarantool spaces description. This is only one required argument.
- initlua => $content
-
Content of init.lua file. Be default an empty file created.
- host => $address
-
Address bind to. Default: 127.0.0.1
- port => $port
-
Primary port number, base for s_port, a_port and r_port. Default is 6603+<tn>*4
- s_port => $port
-
Read-only (secondary) port. Default is port+1
- a_port => $port
-
Admin port. Default is port+2
- r_port => $port
-
Replication port. Default is port+3
- title => $title
-
Part of process name (custom_proc_title) Default is "yat<tn<"
- wal_mode => $mode
-
The WAL write mode. See the desctiption of wal_mode tarantool variable. Default is none. Look more about wal_mode in tarantool documentation.
- log_level => $number
-
Tarantool log level. Default is 5
- snapshot => $path
-
Path to some snapshot. If given the symbolic link to it will been created in tarantool work directory.
- replication_source => $string
-
If given the server is considered to be a Tarantool replica.
- logger => $sub
-
An subroutine called at every time, when tarantool write some thing in a log. The writed text passed as the first argument. Default is warn.
- on_die => $sub
-
An subroutine called on a unexpected tarantool termination.
start option => $value, $cb->($status, $reason)
Run tarantool instance.
- timeout => $timeout
-
If not After $timeout seconds tarantool will been kelled by the KILL signal if not started.
stop option => $value, $cb->($status, $reason)
stop tarantool instance
pause
Send STOP signal to instance
resume
Send CONT signal to instance
ro $cb->($status, $reason)
Switch tarantool instance to read only mode.
rw $cb->($status, $reason)
Switch tarantool instance to write mode.
admin_cmd $cmd, $cb->($status, $response_or_reason)
Exec a command via the amind port.
times
Return values of utime and stime from /proc/[pid]/stat, converted to seconds
sync_start sync_stop sync_ro sync_rw sync_admin_cmd
Aliases for start, stop, ro, rw, admin_cmd respectively, arguments a similar, but cb not passed.
AUTHOR
Anton Reznikov, <anton.n.reznikov at gmail.com>
BUGS
Please report any bugs or feature requests to <a.reznikov at corp.mail.ru>
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Test::Tarantool
ACKNOWLEDGEMENTS
Mons Anderson - The original idia of the module.
LICENSE AND COPYRIGHT
Copyright 2014 Anton Reznikov.
This program is released under the following license: GPL