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