|
| 1 | +use strict; |
| 2 | +use warnings; |
| 3 | +use Test::More; |
| 4 | +use File::Basename; |
| 5 | +use File::Spec; |
| 6 | +use Cwd 'abs_path'; |
| 7 | + |
| 8 | +# Load mysqltuner.pl as a library |
| 9 | +my $script_dir = dirname(abs_path(__FILE__)); |
| 10 | +my $script = abs_path(File::Spec->catfile($script_dir, '..', 'mysqltuner.pl')); |
| 11 | +require $script; |
| 12 | + |
| 13 | +# Mocking necessary database calls and variables |
| 14 | +no warnings 'redefine'; |
| 15 | + |
| 16 | +my $mocked_columns = []; |
| 17 | +*main::select_table_columns_db = sub { return @$mocked_columns }; |
| 18 | +*main::execute_system_command = sub { return "" }; # Dummy |
| 19 | +*main::subheaderprint = sub { }; |
| 20 | +*main::infoprint = sub { }; |
| 21 | +*main::goodprint = sub { }; |
| 22 | +*main::badprint = sub { }; |
| 23 | +*main::debugprint = sub { }; |
| 24 | +*main::select_one = sub { return 0 }; |
| 25 | +*main::select_array = sub { return () }; |
| 26 | +*main::mysql_version_le = sub { return 0 }; |
| 27 | +*main::mysql_version_ge = sub { return 1 }; |
| 28 | + |
| 29 | +subtest 'Detection Logic - MySQL 5.5/5.6 (Password only)' => sub { |
| 30 | + $mocked_columns = ['Host', 'User', 'Password', 'Select_priv']; |
| 31 | + my $res = main::get_password_column_name(); |
| 32 | + is($res, 'Password', 'Detected Password (capital P)'); |
| 33 | +}; |
| 34 | + |
| 35 | +subtest 'Detection Logic - MySQL 5.5/5.6 (password lowercase)' => sub { |
| 36 | + $mocked_columns = ['Host', 'User', 'password', 'Select_priv']; |
| 37 | + my $res = main::get_password_column_name(); |
| 38 | + is($res, 'password', 'Detected password (lowercase)'); |
| 39 | +}; |
| 40 | + |
| 41 | +subtest 'Detection Logic - MySQL 8.0 (authentication_string only)' => sub { |
| 42 | + $mocked_columns = ['Host', 'User', 'authentication_string', 'Select_priv']; |
| 43 | + my $res = main::get_password_column_name(); |
| 44 | + is($res, 'authentication_string', 'Detected authentication_string'); |
| 45 | +}; |
| 46 | + |
| 47 | +subtest 'Detection Logic - MariaDB Mixed (both exist)' => sub { |
| 48 | + $mocked_columns = ['Host', 'User', 'Password', 'authentication_string', 'Select_priv']; |
| 49 | + my $res = main::get_password_column_name(); |
| 50 | + is($res, "IF(plugin='mysql_native_password', authentication_string, Password)", 'Detected both and used IF(...)'); |
| 51 | +}; |
| 52 | + |
| 53 | +subtest 'Detection Logic - None exist' => sub { |
| 54 | + $mocked_columns = ['Host', 'User', 'Select_priv']; |
| 55 | + my $res = main::get_password_column_name(); |
| 56 | + is($res, '', 'Returned empty string when none exist'); |
| 57 | +}; |
| 58 | + |
| 59 | +done_testing(); |
0 commit comments