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