#!/usr/bin/perl
use warnings;
use strict;
use utf8;
use open qw(:std :utf8);
use lib qw(lib ../lib);
use lib qw(blib/lib blib/arch ../blib/lib ../blib/arch);
use constant PLAN => 18;
use Test::More tests => PLAN;
use Encode qw(decode encode);
my $LE = $] > 5.01 ? '<' : '';
BEGIN {
# Подготовка объекта тестирования для работы с utf8
my $builder = Test::More->builder;
binmode $builder->output, ":utf8";
binmode $builder->failure_output, ":utf8";
binmode $builder->todo_output, ":utf8";
use_ok 'DR::Tarantool', 'tarantool';
use_ok 'DR::Tarantool::StartTest';
use_ok 'DR::Tarantool', ':constant';
use_ok 'File::Spec::Functions', 'catfile', 'rel2abs';
use_ok 'File::Basename', 'dirname', 'basename';
use_ok 'AnyEvent';
use_ok 'DR::Tarantool::AsyncClient';
}
my $cfg_dir = catfile dirname(__FILE__), 'test-data';
ok -d $cfg_dir, 'directory with test data';
my $tcfg = catfile $cfg_dir, 'llc-easy.cfg';
ok -r $tcfg, $tcfg;
my $script_dir = catfile dirname(__FILE__), 'test-data';
my $lua_file = catfile $script_dir, 'init.lua';
ok -d $script_dir, "-d $script_dir";
ok -r $lua_file, "-r $lua_file";
my $tnt = run DR::Tarantool::StartTest(
cfg => $tcfg,
script_dir => $script_dir
);
my $spaces = {
1 => {
name => 'test_space',
fields => [
{
name => 'id',
type => 'STR',
},
],
indexes => {
0 => 'id',
},
},
};
SKIP: {
unless ($tnt->started and !$ENV{SKIP_TNT}) {
diag $tnt->log unless $ENV{SKIP_TNT};
skip "tarantool isn't started", PLAN - 11;
}
my $client = tarantool port => $tnt->primary_port, spaces => $spaces;
ok $client, 'Connected';
$client->insert(test_space => [ 1 .. 10 ]);
my $tuple = $client->select(test_space => 1);
is_deeply $tuple->raw, [ 1 .. 10 ], 'tuple was written';
$tuple = $client->call_lua('box.dostring', [
"return box.select(1, 0, '1')"
] => 'test_space'
);
is_deeply $tuple->raw, [ 1 .. 10 ], 'tuple was read by dostring';
$tuple = $client->call_lua('box.dostring', [
"local tuple = box.select(1, 0, '1'); return tuple"
] => 'test_space'
);
is_deeply [$tuple->raw], [[ 1 .. 10 ]], 'tuple was read by dostring';
$tuple = $client->call_lua('box.dostring', [
q^
local tuple = box.select(1, 0, '1')
tuple = tuple:transform( #tuple, 0, ... )
tuple = tuple:transform( 1, 1 )
return { tuple:unpack() }
^,
11,
12,
13,
14
] => 'test_space'
);
diag explain $tuple->raw unless
is_deeply [$tuple->raw], [[ 1, 3 .. 14 ]], 'tuple was read by dostring';
$tuple = eval { $client->call_lua('box.dostring', [
q^
local tuple = box.select(1, 0, '1')
tuple = tuple:transform( #tuple, 0, ... )
tuple = tuple:transform( 1, 1 )
return tuple
^,
11,
12,
13,
14
] => 'test_space'
);
};
diag explain eval { $tuple->raw } unless
is_deeply [eval { $tuple->raw }], [[ 1, 3 .. 14 ]], 'tuple was read';
ok !$tnt->is_dead, 'Tarantool is still working';
}