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; print (($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; print (($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 The tarantool work directory, created if not exists. Default is ./tnt_<10_random_lowercase_letters> arena => $size The maximal size of tarantool arena in Gb. Default is 0.1 cleanup => $bool Remove the tarantool work directory after the 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 timeout => $timeout After $timeout seconds tarantool will been kelled by the KILL signal 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