my
$test_version
;
BEGIN {
sub
skip_all {
my
(
$msg
) =
@_
;
print
"1..1\n"
,
"ok - Skipped. $msg\n"
;
exit
;
}
if
($^O =~ /^(?:mswin|win)/i) {
skip_all (
'This module is not for Windows'
);
}
my
$opt_mysql
=
$ENV
{SANDBOX_BINARY} ||
"$ENV{HOME}/opt/mysql"
;
unless
( -d -d
$opt_mysql
)
{
skip_all (
"This test module requires tarballs extracted in $ENV{HOME}/opt/bin"
);
}
$ENV
{TEST_SANDBOX_HOME}=
"$ENV{PWD}/t/test_sb"
;
$ENV
{PERL5LIB}=
"$ENV{PWD}/lib"
;
$ENV
{PATH}=
"$ENV{PWD}/bin:$ENV{PATH}"
;
$ENV
{TEST_VERSION} =
$ENV
{TEST_VERSION} ||
'5.6.29'
;
$ENV
{SANDBOX_AS_ROOT} = 1;
for
my
$env_var
(
qw(NODE_OPTIONS MASTER_OPTIONS SLAVE_OPTIONS)
)
{
if
(
$ENV
{
$env_var
})
{
$ENV
{
$env_var
} =
undef
;
}
}
$test_version
=
$ENV
{TEST_VERSION} ;
my
(
$major
,
$minor
,
$rev
) = split_version(
$test_version
);
my
$compare_test
=
sprintf
(
"%05d-%05d-%05d"
,
$major
,
$minor
,
$rev
);
my
$ver_8_0_3
=
sprintf
(
"%05d-%05d-%05d"
, 8, 0, 3);
if
( (
$major
!= 10 ) && (
$compare_test
ge
$ver_8_0_3
) )
{
$ENV
{TEST_REPL_DELAY} = 2;
}
};
our
@ISA
=
qw(Exporter)
;
our
@EXPORT_OK
=
qw( test_sandbox find_plugindir skip_all confirm_version skip_version)
;
our
@EXPORT
=
@EXPORT_OK
;
sub
skip_version
{
my
(
$version
,
$reason
) =
@_
;
warn
"# skipping version $version for this test. $reason\n"
;
print
"1..1\n"
;
print
"ok 1 # $reason\n"
;
exit
}
sub
confirm_version
{
my
(
$min_version
,
$max_version
) =
@_
;
my
(
$major
,
$minor
,
$rev
) = split_version(
$test_version
);
my
(
$major1
,
$minor1
,
$rev1
) = split_version(
$min_version
);
my
(
$major2
,
$minor2
,
$rev2
) = split_version(
$max_version
);
my
$compare_test
=
sprintf
(
"%05d-%05d-%05d"
,
$major
,
$minor
,
$rev
);
my
$compare_min
=
sprintf
(
"%05d-%05d-%05d"
,
$major1
,
$minor1
,
$rev1
);
my
$compare_max
=
sprintf
(
"%05d-%05d-%05d"
,
$major2
,
$minor2
,
$rev2
);
unless
((
$compare_test
ge
$compare_min
) && (
$compare_test
le
$compare_max
))
{
skip_version(
$test_version
,
"It is not in the required range ($min_version - $max_version)"
);
}
}
sub
test_sandbox {
my
(
$cmd
,
$expected_tests
,
$informative
) =
@_
;
unless
(
$cmd
) {
die
"command expected\n"
;
}
unless
(
$expected_tests
) {
die
"number of tests expected as second parameter\n"
;
}
$expected_tests
=~ /^\d+$/
or
die
"the 'expected tests' parameter must be a number \n"
;
if
( ( -d
$test_version
)
or (( -f
$test_version
) && (
$test_version
=~ /\.tar\.gz$/) )
or ( -d
"$ENV{HOME}/opt/mysql/$test_version"
)) {
warn
"Testing <$test_version>. "
.
"Please wait. This will take a few minutes\n"
if
$informative
;
print
"1..$expected_tests\n"
;
}
else
{
print
"1..1\n"
;
print
"ok 1 # skip - no binaries found for $test_version\n"
;
print
" - See the README under 'TESTING' for more options.\n"
if
$informative
;
exit
;
}
$ENV
{TAP_MODE} =1;
system
(
"$cmd --versions=$test_version "
);
}
sub
find_plugindir {
my
(
$minimum_version
,
$maximum_version
,
$use_current
) =
@_
;
my
$minimum_version_str
;
my
$maximum_version_str
;
if
(
$minimum_version
=~ /(\d+)\.(\d+)\.(\d+)/)
{
$minimum_version_str
=
sprintf
(
'%02d-%02d-%02d'
, $1, $2, $3);
}
else
{
die
"# Invalid minimum version provided : $minimum_version\n"
;
}
if
(
$maximum_version
=~ /(\d+)\.(\d+)\.(\d+)/)
{
$maximum_version_str
=
sprintf
(
'%02d-%02d-%02d'
, $1, $2, $3);
}
else
{
die
"# Invalid maximum version provided : $maximum_version\n"
;
}
my
$plugindir
;
if
(
$ENV
{SANDBOX_BINARY}
&&
( -d
$ENV
{SANDBOX_BINARY})
)
{
my
$highest_version
=
''
;
my
@versions
= ();
my
@dirs
=
sort
{
$b
cmp
$a
}
grep
{ (
$_
ge
$minimum_version_str
) && (
$_
le
$maximum_version_str
) }
map
{ m{(\d)\.(\d)\.(\d+)/?$};
sprintf
(
'%02d-%02d-%02d'
,$1,$2,$3) }
grep
{ /\d+\.\d+\.\d+/ }
grep
{ -d
$_
}
glob
(
"$ENV{SANDBOX_BINARY}/*/"
) ;
unless
(
@dirs
) {
skip_all(
"no directories found under $ENV{SANDBOX_BINARY}"
);
}
$highest_version
=
$dirs
[0];
if
(
$highest_version
lt
$minimum_version_str
) {
skip_all(
"no suitable version found for this test"
);
}
my
$TEST_VERSION
=
$ENV
{TEST_VERSION} ||
$highest_version
;
unless
(
grep
{
$TEST_VERSION
eq
$_
}
@dirs
) {
$TEST_VERSION
=
$highest_version
unless
$use_current
;
}
warn
"# Testing plugin with <$TEST_VERSION>\n"
;
$ENV
{TEST_VERSION} =
$TEST_VERSION
;
$plugindir
=
"$ENV{SANDBOX_BINARY}/$TEST_VERSION/lib/plugin"
;
unless
( -d
$plugindir
) {
$plugindir
=
"$ENV{SANDBOX_BINARY}/$TEST_VERSION/lib/mysql/plugin"
;
unless
( -d
$plugindir
) {
skip_all(
"Plugin directory for $TEST_VERSION not found"
);
}
}
}
else
{
skip_all(
'no $SANDBOX_BINARY found'
);
}
$ENV
{
'SB_PLUGIN_DIR'
} =
$plugindir
;
}
1;