Files
percona-toolkit/t/lib/VersionParser.t
Sveta Smirnova e2207ea232 PT-2340 - Support MySQL 8.4
- Removed offensive terminology from library files and their tests
- Removed unused sandbox/prove2junit.pl
- Added option mysql_ssl to DSN and possibility to have DSN of multiple letters
2024-07-25 19:03:33 +03:00

152 lines
3.6 KiB
Perl

#!/usr/bin/perl
BEGIN {
die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n"
unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH};
unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib";
};
use strict;
use warnings FATAL => 'all';
use English qw(-no_match_vars);
use Test::More tests => 31;
use VersionParser;
use PerconaTest;
my $v1 = new_ok "VersionParser", [ "4.1" ], "new from string works";
is(
"$v1",
"4.1",
"object from string stringifies as expected"
);
is(
$v1->innodb_version,
'NO',
'default ->innodb_version is NO'
);
is(
$v1->flavor(),
"Unknown",
"default ->flavor is Unknown"
);
my $v2;
$v2 = new_ok "VersionParser", [ qw( major 5 minor 5 revision 5 ) ], "new from parts works";
is( "$v2", "5.5.5", "..and stringifies correctly" );
$v2 = new_ok "VersionParser", [ { qw( major 5 minor 5 revision 5 ) } ], "new from hashref works";
is( "$v2", "5.5.5", "..and stringifies correctly" );
for my $test (
[ "5.0.1", "lt", "5.0.2" ],
[ "5.0", "eq", "5.0.2" ],
[ "5.1.0", "gt", "5.0.99" ],
[ "6", "gt", "5.9.9" ],
[ "4", "ne", "5.0.2" ],
[ "5.0.1", "ne", "5.0.2" ],
[ "5.0.1", "eq", "5.0.1" ],
[ "5.0.1", "eq", "5" ],
[ "5.0.1", "lt", "6" ],
[ "5.0.1", "gt", "5.0.09" ],
# TODO: Should these actually happen?
# [ "5.0.1" eq "5.0.10" ]
# [ "5.0.10" lt "5.0.3" ]
) {
my ($v, $cmp, $against, $test) = @$test;
cmp_ok( VersionParser->new($v), $cmp, $against, "$v $cmp $against" );
}
my $c = VersionParser->new("5.5.1");
is(
$c->comment("SET NAMES utf8"),
"/*!50501 SET NAMES utf8 */",
"->comment works as expected"
);
is(
$c->comment('@@hostname,'),
'/*!50501 @@hostname, */',
'->comment works with @@variable'
);
is(
VersionParser->new('5.0.38-Ubuntu_0ubuntu1.1-log')->normalized_version,
'50038',
'Parser works on ordinary version',
);
is(
VersionParser->new('5.5')->normalized_version,
'50500',
'Parser works on a simplified version',
);
my $fractional_version = VersionParser->new('5.0.08');
is(
$fractional_version->revision,
'0.8',
'Verson(5.0.08), the revision is 0.8',
);
is(
"$fractional_version",
"5.0.08",
"Version(5.0.08) stringifies to 5.0.08"
);
is(
$fractional_version->normalized_version(),
"50000",
"Version(5.0.08) normalizes to 50000"
);
# Open a connection to MySQL, or skip the rest of the tests.
use DSNParser;
use Sandbox;
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('source');
SKIP: {
skip 'Cannot connect to MySQL', 2 unless $dbh;
my $vp = new_ok "VersionParser", [ $dbh ], "new from dbh works";
cmp_ok($vp, "ge", '3.23.00', 'Version is > 3.23');
unlike(
$vp->innodb_version(),
qr/DISABLED/,
"InnoDB version"
);
my ($ver) = $dbh->selectrow_array("SELECT VERSION()");
$ver =~ s/(\d+\.\d+\.\d+).*/$1/;
is(
"$vp",
$ver,
"object from dbh stringifies as expected"
);
my (undef, $flavor) = $dbh->selectrow_array("SHOW VARIABLES LIKE 'version_comment'");
SKIP: {
skip "Couldn't fetch version_comment from the db", 1 unless $flavor;
is(
$vp->flavor(),
$flavor,
"When created from a dbh, flavor is set through version_comment",
);
};
}
# #############################################################################
# Done.
# #############################################################################
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
exit;