Files
percona-toolkit/t/lib/MySQLConfig.t
Sveta Smirnova 5c999ca3e0 PT-2340 - Support MySQL 8.4
- Removed runtime.txt after discussion with Anastasia Alexandrova
- Added "use VersionParser" into tests in t/lib when needed
- Removed word master from tests for pt-archiver, pt-config-diff, pt-deadlock-logger, pt-duplicate-key-checker, pt-find, pt-fk-error-logger, pt-heartbeat, pt-index-usage, pt-ioprofile, pt-kill, pt-mysql-summary
- Removed word slave from tests for pt-archiver, pt-config-diff, pt-deadlock-logger, pt-duplicate-key-checker, pt-find, pt-fk-error-logger, pt-heartbeat, pt-index-usage, pt-ioprofile, pt-kill, pt-mysql-summary
- Updated modules for pt-archiver, pt-config-diff, pt-deadlock-logger, pt-duplicate-key-checker, pt-find, pt-fk-error-logger, pt-heartbeat, pt-index-usage, pt-ioprofile, pt-kill, pt-mysql-summary
- Changed mysql_ssl patch, so it is now short option s
- Added a check for existing zombies in t/pt-kill/execute_command.t
- Added bin/pt-galera-log-explainer to .gitignore
2024-07-27 01:59:52 +03:00

917 lines
27 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;
use MySQLConfig;
use DSNParser;
use VersionParser;
use Sandbox;
use TextResultSetParser;
use PerconaTest;
my $dp = new DSNParser(opts=>$dsn_opts);
my $sb = new Sandbox(basedir => '/tmp', DSNParser => $dp);
my $dbh = $sb->get_dbh_for('source');
use Data::Dumper;
$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Quotekeys = 0;
my $output;
my $sample = "t/lib/samples/configs/";
my $trp = new TextResultSetParser();
throws_ok(
sub {
my $config = new MySQLConfig(
TextResultSetParser => $trp,
);
},
qr/I need a/,
'Must specify an input'
);
throws_ok(
sub {
my $config = new MySQLConfig(
file => 'foo',
output => 'bar',
TextResultSetParser => $trp,
);
},
qr/Specify only one/,
'Must specify only one input'
);
throws_ok(
sub {
my $config = new MySQLConfig(
file => 'fooz',
TextResultSetParser => $trp,
);
},
qr/Cannot open/,
'Dies if file cannot be opened'
);
# #############################################################################
# parse_show_variables()
# #############################################################################
$output = load_file("t/lib/samples/show-variables/vars003.txt");
is_deeply(
MySQLConfig::parse_show_variables(
output => $output,
TextResultSetParser => $trp,
),
{
auto_increment_increment => '1',
auto_increment_offset => '1',
automatic_sp_privileges => 'ON',
back_log => '50',
basedir => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23/',
binlog_cache_size => '32768',
bulk_insert_buffer_size => '8388608',
character_set_client => 'latin1',
character_set_connection => 'latin1',
character_set_database => 'latin1',
character_set_filesystem => 'binary',
character_set_results => 'latin1',
character_set_server => 'latin1',
character_set_system => 'utf8',
character_sets_dir => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23/share/mysql/charsets/',
collation_connection => 'latin1_swedish_ci',
collation_database => 'latin1_swedish_ci',
collation_server => 'latin1_swedish_ci',
completion_type => '0',
concurrent_insert => '1',
connect_timeout => '10',
datadir => '/tmp/12345/data/',
date_format => '%Y-%m-%d',
datetime_format => '%Y-%m-%d %H:%i:%s',
default_week_format => '0',
delay_key_write => 'ON',
delayed_insert_limit => '100',
delayed_insert_timeout => '300',
delayed_queue_size => '1000',
div_precision_increment => '4',
engine_condition_pushdown => 'OFF',
expire_logs_days => '0',
flush => 'OFF',
flush_time => '0',
ft_boolean_syntax => '',
ft_max_word_len => '84',
ft_min_word_len => '4',
ft_query_expansion_limit => '20',
ft_stopword_file => '(built-in)',
group_concat_max_len => '1024',
have_archive => 'YES',
have_bdb => 'NO',
have_blackhole_engine => 'YES',
have_community_features => 'YES',
have_compress => 'YES',
have_crypt => 'YES',
have_csv => 'YES',
have_dynamic_loading => 'YES',
have_example_engine => 'NO',
have_federated_engine => 'YES',
have_geometry => 'YES',
have_innodb => 'YES',
have_isam => 'NO',
have_merge_engine => 'YES',
have_ndbcluster => 'DISABLED',
have_openssl => 'DISABLED',
have_profiling => 'YES',
have_query_cache => 'YES',
have_raid => 'NO',
have_rtree_keys => 'YES',
have_ssl => 'DISABLED',
have_symlink => 'YES',
hostname => 'dante',
init_connect => '',
init_file => '',
init_slave => '',
innodb_adaptive_hash_index => 'ON',
innodb_additional_mem_pool_size => '1048576',
innodb_autoextend_increment => '8',
innodb_buffer_pool_awe_mem_mb => '0',
innodb_buffer_pool_size => '16777216',
innodb_checksums => 'ON',
innodb_commit_concurrency => '0',
innodb_concurrency_tickets => '500',
innodb_data_file_path => 'ibdata1:10M:autoextend',
innodb_data_home_dir => '/tmp/12345/data',
innodb_doublewrite => 'ON',
innodb_fast_shutdown => '1',
innodb_file_io_threads => '4',
innodb_file_per_table => 'OFF',
innodb_flush_log_at_trx_commit => '1',
innodb_flush_method => '',
innodb_force_recovery => '0',
innodb_lock_wait_timeout => '50',
innodb_locks_unsafe_for_binlog => 'OFF',
innodb_log_arch_dir => '',
innodb_log_archive => 'OFF',
innodb_log_buffer_size => '1048576',
innodb_log_file_size => '5242880',
innodb_log_files_in_group => '2',
innodb_log_group_home_dir => '/tmp/12345/data',
innodb_max_dirty_pages_pct => '90',
innodb_max_purge_lag => '0',
innodb_mirrored_log_groups => '1',
innodb_open_files => '300',
innodb_rollback_on_timeout => 'OFF',
innodb_support_xa => 'ON',
innodb_sync_spin_loops => '20',
innodb_table_locks => 'ON',
innodb_thread_concurrency => '8',
innodb_thread_sleep_delay => '10000',
innodb_use_legacy_cardinality_algorithm => 'ON',
interactive_timeout => '28800',
join_buffer_size => '131072',
keep_files_on_create => 'OFF',
key_buffer_size => '16777216',
key_cache_age_threshold => '300',
key_cache_block_size => '1024',
key_cache_division_limit => '100',
language => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23/share/mysql/english/',
large_files_support => 'ON',
large_page_size => '0',
large_pages => 'OFF',
lc_time_names => 'en_US',
license => 'GPL',
local_infile => 'ON',
locked_in_memory => 'OFF',
log => 'OFF',
log_bin => 'ON',
log_bin_trust_function_creators => 'OFF',
log_error => '',
log_queries_not_using_indexes => 'OFF',
log_slave_updates => 'ON',
log_slow_queries => 'OFF',
log_warnings => '1',
long_query_time => '10',
low_priority_updates => 'OFF',
lower_case_file_system => 'OFF',
lower_case_table_names => '0',
max_allowed_packet => '1048576',
max_binlog_cache_size => '18446744073709547520',
max_binlog_size => '1073741824',
max_connect_errors => '10',
max_connections => '100',
max_delayed_threads => '20',
max_error_count => '64',
max_heap_table_size => '16777216',
max_insert_delayed_threads => '20',
max_join_size => '18446744073709551615',
max_length_for_sort_data => '1024',
max_prepared_stmt_count => '16382',
max_relay_log_size => '0',
max_seeks_for_key => '18446744073709551615',
max_sort_length => '1024',
max_sp_recursion_depth => '0',
max_tmp_tables => '32',
max_user_connections => '0',
max_write_lock_count => '18446744073709551615',
multi_range_count => '256',
myisam_data_pointer_size => '6',
myisam_max_sort_file_size => '9223372036853727232',
myisam_recover_options => 'OFF',
myisam_repair_threads => '1',
myisam_sort_buffer_size => '8388608',
myisam_stats_method => 'nulls_unequal',
ndb_autoincrement_prefetch_sz => '1',
ndb_cache_check_time => '0',
ndb_connectstring => '',
ndb_force_send => 'ON',
ndb_use_exact_count => 'ON',
ndb_use_transactions => 'ON',
net_buffer_length => '16384',
net_read_timeout => '30',
net_retry_count => '10',
net_write_timeout => '60',
new => 'OFF',
old_passwords => 'OFF',
open_files_limit => '1024',
optimizer_prune_level => '1',
optimizer_search_depth => '62',
pid_file => '/tmp/12345/data/mysql_sandbox12345.pid',
plugin_dir => '',
port => '12345',
preload_buffer_size => '32768',
profiling => 'OFF',
profiling_history_size => '15',
protocol_version => '10',
query_alloc_block_size => '8192',
query_cache_limit => '1048576',
query_cache_min_res_unit => '4096',
query_cache_size => '0',
query_cache_type => 'ON',
query_cache_wlock_invalidate => 'OFF',
query_prealloc_size => '8192',
range_alloc_block_size => '4096',
read_buffer_size => '131072',
read_only => 'OFF',
read_rnd_buffer_size => '262144',
relay_log => 'mysql-relay-bin',
relay_log_index => '',
relay_log_info_file => 'relay-log.info',
relay_log_purge => 'ON',
relay_log_space_limit => '0',
rpl_recovery_rank => '0',
secure_auth => 'OFF',
secure_file_priv => '',
server_id => '12345',
skip_external_locking => 'ON',
skip_networking => 'OFF',
skip_show_database => 'OFF',
slave_compressed_protocol => 'OFF',
slave_load_tmpdir => '/tmp/',
slave_net_timeout => '3600',
slave_skip_errors => 'OFF',
slave_transaction_retries => '10',
slow_launch_time => '2',
socket => '/tmp/12345/mysql_sandbox12345.sock',
sort_buffer_size => '2097144',
sql_big_selects => 'ON',
sql_mode => '',
sql_notes => 'ON',
sql_warnings => 'OFF',
ssl_ca => '',
ssl_capath => '',
ssl_cert => '',
ssl_cipher => '',
ssl_key => '',
storage_engine => 'MyISAM',
sync_binlog => '0',
sync_frm => 'ON',
system_time_zone => 'MDT',
table_cache => '64',
table_lock_wait_timeout => '50',
table_type => 'MyISAM',
thread_cache_size => '0',
thread_stack => '262144',
time_format => '%H:%i:%s',
time_zone => 'SYSTEM',
timed_mutexes => 'OFF',
tmp_table_size => '33554432',
tmpdir => '/tmp/',
transaction_alloc_block_size => '8192',
transaction_prealloc_size => '4096',
tx_isolation => 'REPEATABLE-READ',
updatable_views_with_limit => 'YES',
version => '5.0.82-log',
version_comment => 'MySQL Community Server (GPL)',
version_compile_machine => 'x86_64',
version_compile_os => 'unknown-linux-gnu',
wait_timeout => '28800'
},
'parse_show_variables()',
);
# #############################################################################
# Config from mysqld --help --verbose
# #############################################################################
my $config = new MySQLConfig(
file => "$trunk/$sample/mysqldhelp001.txt",
TextResultSetParser => $trp,
);
is(
$config->format(),
'mysqld',
"Detect mysqld type"
);
is_deeply(
$config->variables(),
{
abort_slave_event_count => '0',
allow_suspicious_udfs => 'FALSE',
auto_increment_increment => '1',
auto_increment_offset => '1',
automatic_sp_privileges => 'TRUE',
back_log => '50',
basedir => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23',
bdb => 'FALSE',
bind_address => '',
binlog_cache_size => '32768',
bulk_insert_buffer_size => '8388608',
character_set_client_handshake => 'TRUE',
character_set_filesystem => 'binary',
character_set_server => 'latin1',
character_sets_dir => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23/share/mysql/charsets/',
chroot => '',
collation_server => 'latin1_swedish_ci',
completion_type => '0',
concurrent_insert => '1',
connect_timeout => '10',
console => 'FALSE',
datadir => '/tmp/12345/data/',
date_format => '',
datetime_format => '',
default_character_set => 'latin1',
default_collation => 'latin1_swedish_ci',
default_time_zone => '',
default_week_format => '0',
delayed_insert_limit => '100',
delayed_insert_timeout => '300',
delayed_queue_size => '1000',
des_key_file => '',
disconnect_slave_event_count => '0',
div_precision_increment => '4',
enable_locking => 'FALSE',
enable_pstack => 'FALSE',
engine_condition_pushdown => 'FALSE',
expire_logs_days => '0',
external_locking => 'FALSE',
federated => 'TRUE',
flush_time => '0',
ft_max_word_len => '84',
ft_min_word_len => '4',
ft_query_expansion_limit => '20',
ft_stopword_file => '',
gdb => 'FALSE',
group_concat_max_len => '1024',
help => 'TRUE',
init_connect => '',
init_file => '',
init_slave => '',
innodb => 'TRUE',
innodb_adaptive_hash_index => 'TRUE',
innodb_additional_mem_pool_size => '1048576',
innodb_autoextend_increment => '8',
innodb_buffer_pool_awe_mem_mb => '0',
innodb_buffer_pool_size => '16777216',
innodb_checksums => 'TRUE',
innodb_commit_concurrency => '0',
innodb_concurrency_tickets => '500',
innodb_data_home_dir => '/tmp/12345/data',
innodb_doublewrite => 'TRUE',
innodb_fast_shutdown => '1',
innodb_file_io_threads => '4',
innodb_file_per_table => 'FALSE',
innodb_flush_log_at_trx_commit => '1',
innodb_flush_method => '',
innodb_force_recovery => '0',
innodb_lock_wait_timeout => '3',
innodb_locks_unsafe_for_binlog => 'FALSE',
innodb_log_arch_dir => '',
innodb_log_buffer_size => '1048576',
innodb_log_file_size => '5242880',
innodb_log_files_in_group => '2',
innodb_log_group_home_dir => '/tmp/12345/data',
innodb_max_dirty_pages_pct => '90',
innodb_max_purge_lag => '0',
innodb_mirrored_log_groups => '1',
innodb_open_files => '300',
innodb_rollback_on_timeout => 'FALSE',
innodb_status_file => 'FALSE',
innodb_support_xa => 'TRUE',
innodb_sync_spin_loops => '20',
innodb_table_locks => 'TRUE',
innodb_thread_concurrency => '8',
innodb_thread_sleep_delay => '10000',
innodb_use_legacy_cardinality_algorithm => 'TRUE',
interactive_timeout => '28800',
isam => 'FALSE',
join_buffer_size => '131072',
keep_files_on_create => 'FALSE',
key_buffer_size => '16777216',
key_cache_age_threshold => '300',
key_cache_block_size => '1024',
key_cache_division_limit => '100',
language => '/home/daniel/mysql_binaries/mysql-5.0.82-linux-x86_64-glibc23/share/mysql/english/',
large_pages => 'FALSE',
lc_time_names => 'en_US',
local_infile => 'TRUE',
log => 'OFF',
log_bin => 'mysql-bin',
log_bin_index => 'OFF',
log_bin_trust_function_creators => 'FALSE',
log_bin_trust_routine_creators => 'FALSE',
log_error => '',
log_isam => 'myisam.log',
log_queries_not_using_indexes => 'FALSE',
log_short_format => 'FALSE',
log_slave_updates => 'TRUE',
log_slow_admin_statements => 'FALSE',
log_slow_queries => 'OFF',
log_tc => 'tc.log',
log_tc_size => '24576',
log_update => 'OFF',
log_warnings => '1',
long_query_time => '10',
low_priority_updates => 'FALSE',
lower_case_table_names => '0',
master_connect_retry => '60',
master_host => '',
master_info_file => 'master.info',
master_password => '',
master_port => '3306',
master_retry_count => '86400',
master_ssl => 'FALSE',
master_ssl_ca => '',
master_ssl_capath => '',
master_ssl_cert => '',
master_ssl_cipher => '',
master_ssl_key => '',
master_user => 'test',
max_allowed_packet => '1048576',
max_binlog_cache_size => '18446744073709547520',
max_binlog_dump_events => '0',
max_binlog_size => '1073741824',
max_connect_errors => '10',
max_connections => '100',
max_delayed_threads => '20',
max_error_count => '64',
max_heap_table_size => '16777216',
max_join_size => '18446744073709551615',
max_length_for_sort_data => '1024',
max_prepared_stmt_count => '16382',
max_relay_log_size => '0',
max_seeks_for_key => '18446744073709551615',
max_sort_length => '1024',
max_sp_recursion_depth => '0',
max_tmp_tables => '32',
max_user_connections => '0',
max_write_lock_count => '18446744073709551615',
memlock => 'FALSE',
merge => 'TRUE',
multi_range_count => '256',
myisam_block_size => '1024',
myisam_data_pointer_size => '6',
myisam_max_extra_sort_file_size => '2147483648',
myisam_max_sort_file_size => '9223372036853727232',
myisam_recover => 'OFF',
myisam_repair_threads => '1',
myisam_sort_buffer_size => '8388608',
myisam_stats_method => 'nulls_unequal',
ndb_autoincrement_prefetch_sz => '1',
ndb_cache_check_time => '0',
ndb_connectstring => '',
ndb_force_send => 'TRUE',
ndb_mgmd_host => '',
ndb_nodeid => '0',
ndb_optimized_node_selection => 'TRUE',
ndb_shm => 'FALSE',
ndb_use_exact_count => 'TRUE',
ndb_use_transactions => 'TRUE',
ndbcluster => 'FALSE',
net_buffer_length => '16384',
net_read_timeout => '30',
net_retry_count => '10',
net_write_timeout => '60',
new => 'FALSE',
old_passwords => 'FALSE',
old_style_user_limits => 'FALSE',
open_files_limit => '0',
optimizer_prune_level => '1',
optimizer_search_depth => '62',
pid_file => '/tmp/12345/data/mysql_sandbox12345.pid',
plugin_dir => '',
port => '12345',
port_open_timeout => '0',
preload_buffer_size => '32768',
profiling_history_size => '15',
query_alloc_block_size => '8192',
query_cache_limit => '1048576',
query_cache_min_res_unit => '4096',
query_cache_size => '0',
query_cache_type => '1',
query_cache_wlock_invalidate => 'FALSE',
query_prealloc_size => '8192',
range_alloc_block_size => '4096',
read_buffer_size => '131072',
read_only => 'FALSE',
read_rnd_buffer_size => '262144',
record_buffer => '131072',
relay_log => 'mysql-relay-bin',
relay_log_index => '',
relay_log_info_file => 'relay-log.info',
relay_log_purge => 'TRUE',
relay_log_space_limit => '0',
replicate_same_server_id => 'FALSE',
report_host => '127.0.0.1',
report_password => '',
report_port => '12345',
report_user => '',
rpl_recovery_rank => '0',
safe_user_create => 'FALSE',
secure_auth => 'FALSE',
secure_file_priv => '',
server_id => '12345',
show_slave_auth_info => 'FALSE',
skip_grant_tables => 'FALSE',
skip_slave_start => 'FALSE',
slave_compressed_protocol => 'FALSE',
slave_load_tmpdir => '/tmp/',
slave_net_timeout => '3600',
slave_transaction_retries => '10',
slow_launch_time => '2',
socket => '/tmp/12345/mysql_sandbox12345.sock',
sort_buffer_size => '2097144',
sporadic_binlog_dump_fail => 'FALSE',
sql_mode => 'OFF',
ssl => 'FALSE',
ssl_ca => '',
ssl_capath => '',
ssl_cert => '',
ssl_cipher => '',
ssl_key => '',
symbolic_links => 'TRUE',
sync_binlog => '0',
sync_frm => 'TRUE',
sysdate_is_now => 'FALSE',
table_cache => '64',
table_lock_wait_timeout => '50',
tc_heuristic_recover => '',
temp_pool => 'TRUE',
thread_cache_size => '0',
thread_concurrency => '10',
thread_stack => '262144',
time_format => '',
timed_mutexes => 'FALSE',
tmp_table_size => '33554432',
tmpdir => '',
transaction_alloc_block_size => '8192',
transaction_prealloc_size => '4096',
updatable_views_with_limit => '1',
use_symbolic_links => 'TRUE',
verbose => 'TRUE',
wait_timeout => '28800',
warnings => '1'
},
'mysqldhelp001.txt'
);
is(
$config->value_of('wait_timeout'),
28800,
'value_of() from mysqld'
);
ok(
$config->has('wait_timeout'),
'has() from mysqld'
);
ok(
!$config->has('foo'),
"has(), doesn't have it"
);
# #############################################################################
# Config from SHOW VARIABLES
# #############################################################################
$config = new MySQLConfig(
result_set => [ [qw(foo bar)], [qw(a z)] ],
TextResultSetParser => $trp,
);
is(
$config->format(),
'show_variables',
"Detect show_variables type (arrayref)"
);
is_deeply(
$config->variables(),
{
foo => 'bar',
a => 'z',
},
'Variables from arrayref'
);
is(
$config->value_of('foo'),
'bar',
'value_of() from arrayref',
);
ok(
$config->has('foo'),
'has() from arrayref',
);
# #############################################################################
# Config from my_print_defaults
# #############################################################################
$config = new MySQLConfig(
file => "$trunk/$sample/myprintdef001.txt",
TextResultSetParser => $trp,
);
is(
$config->format(),
'my_print_defaults',
"Detect my_print_defaults type"
);
is(
$config->value_of('port'),
'12349',
"Duplicate var's last value used"
);
is(
$config->value_of('innodb_buffer_pool_size'),
'16777216',
'Converted size char to int'
);
is(
$config->value_of('log_slave_updates'),
'ON',
"Var is ON if specified in my_print_defaults"
);
is_deeply(
$config->duplicate_variables(),
{
'port' => [12345],
},
'duplicate_variables()'
);
# #############################################################################
# Config from option file (my.cnf)
# #############################################################################
$config = new MySQLConfig(
file => "$trunk/$sample/mycnf001.txt",
TextResultSetParser => $trp,
);
is(
$config->format(),
'option_file',
"Detect option_file type"
);
is_deeply(
$config->variables(),
{
'user' => 'mysql',
'pid_file' => '/var/run/mysqld/mysqld.pid',
'socket' => '/var/run/mysqld/mysqld.sock',
'port' => 3306,
'basedir' => '/usr',
'datadir' => '/var/lib/mysql',
'tmpdir' => '/tmp',
'skip_external_locking' => 'ON',
'bind_address' => '127.0.0.1',
'key_buffer' => 16777216,
'max_allowed_packet' => 16777216,
'thread_stack' => 131072,
'thread_cache_size' => 8,
'myisam_recover' => 'BACKUP',
'query_cache_limit' => 1048576,
'query_cache_size' => 16777216,
'expire_logs_days' => 10,
'max_binlog_size' => 104857600,
'skip_federated' => 'ON',
},
"Vars from option file"
) or print Dumper($config->variables());
$config = new MySQLConfig(
file => "$trunk/$sample/mycnf002.txt",
TextResultSetParser => $trp,
);
is_deeply(
$config->variables(),
{
var1 => '16777216', # 16 Mb
var2 => '16777216',
var3 => '16777216',
var4 => '16777216',
var5 => '16384', # 16 Kb
var6 => '16384',
var7 => '16384',
var8 => '16384',
var9 => '1073741824', # 1 Gb
var10 => '1073741824',
var11 => '1073741824',
var12 => '1073741824',
},
"Size postfixes MB, KB, etc."
) or print Dumper($config->variables());
# ############################################################################
# Baron's test cases.
# ############################################################################
$config = new MySQLConfig(
file => "$trunk/$sample/mycnf-baron-001.txt",
TextResultSetParser => $trp,
);
is_deeply(
$config->variables(),
{
'datadir' => '/home/baron/etc/mysql/server/5.1.50/data/',
'port' => '5150',
'socket' => '/home/baron/etc/mysql/server/5.1.50/data/mysql.sock',
'language' => './share/english',
'basedir' => '/home/baron/etc/mysql/server/5.1.50',
'log_bin' => 'ON',
'plugin_load' => 'innodb=ha_innodb_plugin.so.0;innodb_trx=ha_innodb_plugin.so.0;innodb_locks=ha_innodb_plugin.so.0;innodb_cmp=ha_innodb_plugin.so.0;innodb_cmp_reset=ha_innodb_plugin.so.0;innodb_cmpmem=ha_innodb_plugin.so.0;innodb_cmpmem_reset=ha_innodb_plugin.so.0',
'ignore_builtin_innodb' => 'ON',
},
"mycnf-baron-001.cnf"
);
$config = new MySQLConfig(
file => "$trunk/t/lib/samples/show-variables/vars-baron-001.txt",
TextResultSetParser => $trp,
);
is(
$config->format(),
'show_variables',
'Detect show_variables type for unformatted SHOW VARIABLES output'
);
is(
$config->value_of('wait_timeout'),
28800,
"Get vars from unformatted SHOW VARIABLES output"
);
$config = new MySQLConfig(
file => "$trunk/$sample/mycnf-baron-002.txt",
TextResultSetParser => $trp,
);
is_deeply(
$config->value_of('innodb_file_per_table'),
'ON',
"innodb_file_per_table (mycnf-baron-002.cnf)"
);
# #############################################################################
# Online test.
# #############################################################################
SKIP: {
skip 'Cannot connect to sandbox master', 3 unless $dbh;
$config = new MySQLConfig(
dbh => $dbh,
);
is(
$config->format(),
"show_variables",
"Detect show_variables type (dbh)"
);
is(
$config->value_of('datadir'),
'/tmp/12345/data/',
"Vars from dbh"
);
like(
$config->mysql_version(),
qr/5\.\d+\.\d+/,
"MySQL version from dbh"
) if ($sandbox_version lt '8.0');
like(
$config->mysql_version(),
qr/8\.\d+\.\d+/,
"MySQL version from dbh"
) if ($sandbox_version ge '8.0');
}
$config = new MySQLConfig(
file => "$trunk/t/lib/samples/configs/mycnf-kc-001.txt",
TextResultSetParser => $trp,
);
is(
$config->value_of('user'),
'mysql',
'end of line comment in option file'
);
is(
$config->value_of('password'),
'password # still part of it!',
'end of line comments respect quoted values'
);
is(
$config->value_of('something'),
'something ; or # another',
"..and removing comments doesn't leave trailing whitespace"
);
ok(
defined $config->value_of('log_bin'),
"bools with comments in the end are found"
);
is(
$config->value_of('log_bin'),
"ON",
"And the comment is correctly stripped out"
);
is_deeply(
[ sort keys %{$config->variables} ],
[ sort qw( password something user log_bin )],
"start of line comments with # or ; are ignored"
);
# #############################################################################
# Use of uninitialized value in substitution (s///) at pt-config-diff line 1996
# https://bugs.launchpad.net/percona-toolkit/+bug/917770
# #############################################################################
$config = eval {
new MySQLConfig(
file => "$trunk/t/pt-config-diff/samples/bug_917770.cnf",
TextResultSetParser => $trp,
);
};
is(
$EVAL_ERROR,
'',
"Bug 917770: Lives ok on lines with just spaces"
);
is(
$config->format(),
'option_file',
"Detect option_file type"
);
# #############################################################################
# Done.
# #############################################################################
{
local *STDERR;
open STDERR, '>', \$output;
$config->_d('Complete test coverage');
}
like(
$output,
qr/Complete test coverage/,
'_d() works'
);
ok($sb->ok(), "Sandbox servers") or BAIL_OUT(__FILE__ . " broke the sandbox");
done_testing;
exit;