mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	 3742d6c940
			
		
	
	3742d6c940
	
	
	
		
			
			This patch corrects the test mysql_plugin so that it correctly masks the library extension of the plugin daemon_example.
		
			
				
	
	
		
			330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			330 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Test mysql_plugin tool
 | |
| #
 | |
| # This test contains test cases for testing the mysql_plugin client with
 | |
| # the daemon_example plugin. Test cases include tests for:
 | |
| #
 | |
| #   - successful enable/disable
 | |
| #   - incorrect paths
 | |
| #   - missing paths/options
 | |
| #
 | |
| # Implementation Notes
 | |
| #
 | |
| # The mysql_plugin tool now accepts --mysqld the path to mysqld server. The
 | |
| # mysqld path is extracted from MYSQLD_BOOTSTRAP_CMD line. We also extract
 | |
| # the path of MYSQLD_BASEDIR (where mysql exists) and use it for the errmsg
 | |
| # file. The directories differ between Windows and Unix but the Perl script
 | |
| # included below will pick as per platform.
 | |
| #
 | |
| # The test is also designed to issue the --skip directive if the location of
 | |
| # the mysqld, my_print_defaults, or daemon_example.ini files cannot be found.
 | |
| #
 | |
| 
 | |
| --source include/not_embedded.inc
 | |
| 
 | |
| # Add the datadir, basedir, plugin_dir to the bootstrap command
 | |
| let $MYSQLD_DATADIR= `select @@datadir`;
 | |
| let $MYSQL_BASEDIR= `select @@basedir`;
 | |
| let $MYSQL_ERRMSG_BASEDIR=`select @@lc_messages_dir`;
 | |
| let $PLUGIN_DIR=`select @@plugin_dir`;
 | |
| 
 | |
| --disable_abort_on_error
 | |
| 
 | |
| # Perl script to extract the location of the basedir from environment
 | |
| # variables. This is needed to ensure the test will run on the PB machines
 | |
| # designed to test release as well as debug builds. It also checks for the
 | |
| # location of the my_print_defaults and daemon_example.ini files.
 | |
| 
 | |
| perl;
 | |
| use File::Basename;
 | |
|   my ($mysqld)= split " ", $ENV{MYSQLD_BOOTSTRAP_CMD};
 | |
|   my $mysqld_basedir=dirname($mysqld);
 | |
|   my $my_print_defaults= $ENV{MYSQL_MY_PRINT_DEFAULTS};
 | |
|   my $my_print_defaults_basedir=dirname($my_print_defaults);
 | |
|   my $daemonexample_ini= "$ENV{DAEMONEXAMPLE_DIR}/daemon_example.ini";
 | |
|   my $plugindir_ini= "$ENV{PLUGIN_DIR}/daemon_example.ini";
 | |
|   my $notfound= "";
 | |
|   open(FILE, ">", "$ENV{MYSQL_TMP_DIR}/mysqld.inc") or die;
 | |
|   print FILE "let \$MYSQLD_BASEDIR= $mysqld_basedir;\n";
 | |
|   print FILE "let \$MYSQL_MY_PRINT_DEFAULTS_BASEDIR= $my_print_defaults_basedir;\n";
 | |
|   if ((!-e $daemonexample_ini) || (!-r $daemonexample_ini))
 | |
|   {
 | |
|     print FILE "let \$DAEMONEXAMPLE_DIR= $not_found;\n";
 | |
|   }
 | |
|   if ((!-e $plugindir_ini) || (!-r $plugindir_ini))
 | |
|   {
 | |
|     print FILE "let \$PLUGIN_DIR= $not_found;\n";
 | |
|   }
 | |
|   close FILE;
 | |
| EOF
 | |
| 
 | |
| 
 | |
| source $MYSQL_TMP_DIR/mysqld.inc;
 | |
| remove_file $MYSQL_TMP_DIR/mysqld.inc;
 | |
| 
 | |
| # The mysql_plugin tool expects a directory structure like in the installed
 | |
| # mysql version, so errmsg.sys will be copied to "basedir/share", we create
 | |
| # and remove this structure. 
 | |
| 
 | |
| --mkdir $MYSQLD_BASEDIR/share
 | |
| --mkdir $MYSQLD_BASEDIR/share/mysql
 | |
| --copy_file $MYSQL_ERRMSG_BASEDIR/english/errmsg.sys $MYSQLD_BASEDIR/share/errmsg.sys
 | |
| --copy_file $MYSQL_ERRMSG_BASEDIR/english/errmsg.sys $MYSQLD_BASEDIR/share/mysql/errmsg.sys
 | |
| 
 | |
| # The mysql_plugin tool now accepts --my-print-defaults which points to the
 | |
| # executable my_print_defaults.exe we can get this path from the variable
 | |
| # $MYSQL_MY_PRINT_DEFAULTS.
 | |
| 
 | |
| # Check for my_print_defaults location. Skip if not found.
 | |
| if ($MYSQL_MY_PRINT_DEFAULTS_BASEDIR == '')
 | |
| {
 | |
|   --skip Test requires known location of my_print_defaults executable.
 | |
| }
 | |
| 
 | |
| # Check for mysqld location. Skip if not found.
 | |
| if ($MYSQLD == '')
 | |
| {
 | |
|   --skip Test requires known location of mysqld executable.
 | |
| }
 | |
| 
 | |
| # Check for daemon_example.ini location. Skip if not found in either
 | |
| # the plugin_dir path or the daemon_example_dir path.
 | |
| if ($PLUGIN_DIR == '')
 | |
| {
 | |
|   if ($DAEMONEXAMPLE_DIR == '')
 | |
|   {
 | |
|     --skip Test requires known location of daemon_example.ini file.  
 | |
|   }
 | |
|   let $PLUGIN_DIR = $DAEMONEXAMPLE_DIR;
 | |
| }
 | |
| 
 | |
| # Build client command for reuse.
 | |
| 
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| 
 | |
| --echo #
 | |
| --echo # Ensure the plugin isn't loaded.
 | |
| --echo #
 | |
| SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name;
 | |
| 
 | |
| --echo #
 | |
| --echo # Enable the plugin...
 | |
| --echo #
 | |
| let $expect_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
 | |
| # MTR will remove this file later, but this might be too late.
 | |
| --error 0,1
 | |
| --remove_file $expect_file
 | |
| --write_file $expect_file
 | |
| wait
 | |
| EOF
 | |
| --shutdown_server 10
 | |
| --source include/wait_until_disconnected.inc
 | |
| 
 | |
| #
 | |
| # Enable the plugin
 | |
| #
 | |
| --exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
 | |
| 
 | |
| #
 | |
| # Ensure enabling an enabled plugin doesn't fail
 | |
| --exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
 | |
| 
 | |
| #
 | |
| # Restart the server
 | |
| #
 | |
| --append_file $expect_file
 | |
| restart
 | |
| EOF
 | |
| --enable_reconnect
 | |
| --source include/wait_until_connected_again.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Simulate loading a plugin libary with multiple entry points.
 | |
| --echo # This will test the DISABLE to ensure all rows are removed.
 | |
| --echo #
 | |
| --replace_regex /\.dll/.so/
 | |
| eval INSERT INTO mysql.plugin VALUES ('wicky', '$DAEMONEXAMPLE'); 
 | |
| --replace_regex /\.dll/.so/
 | |
| eval INSERT INTO mysql.plugin VALUES ('wacky', '$DAEMONEXAMPLE'); 
 | |
| --replace_regex /\.dll/.so/
 | |
| eval INSERT INTO mysql.plugin VALUES ('wonky', '$DAEMONEXAMPLE'); 
 | |
| 
 | |
| --echo #
 | |
| --echo # Ensure the plugin is now loaded.
 | |
| --echo #
 | |
| --replace_regex /\.dll/.so/
 | |
| SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name;
 | |
| 
 | |
| --echo #
 | |
| --echo # Disable the plugin...
 | |
| --echo #
 | |
| # MTR will remove this file later, but this might be too late.
 | |
| --error 0,1
 | |
| --remove_file $expect_file
 | |
| --write_file $expect_file
 | |
| wait
 | |
| EOF
 | |
| --shutdown_server 10
 | |
| --source include/wait_until_disconnected.inc
 | |
| 
 | |
| #
 | |
| # Disable the plugin
 | |
| #
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example
 | |
| 
 | |
| #
 | |
| # Restart the server
 | |
| #
 | |
| --append_file $expect_file
 | |
| restart
 | |
| EOF
 | |
| --enable_reconnect
 | |
| --source include/wait_until_connected_again.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Ensure the plugin isn't loaded.
 | |
| --echo #
 | |
| SELECT * FROM mysql.plugin WHERE dl like 'libdaemon%' ORDER BY name;
 | |
| 
 | |
| #
 | |
| # Stop the server for error conditions
 | |
| #
 | |
| let $expect_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
 | |
| # MTR will remove this file later, but this might be too late.
 | |
| --error 0,1
 | |
| --remove_file $expect_file
 | |
| --write_file $expect_file
 | |
| wait
 | |
| EOF
 | |
| --shutdown_server 10
 | |
| --source include/wait_until_disconnected.inc
 | |
| 
 | |
| --echo #
 | |
| --echo # Attempt to load non-existant plugin
 | |
| --echo #
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE NOT_THERE_AT_ALL 2>&1
 | |
| 
 | |
| --echo #
 | |
| --echo # Attempt to use non-existant plugin.ini file
 | |
| --echo #
 | |
| --error 1,2,7,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example --plugin-ini=/NOT/THERE/pi.ini 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to omit the plugin
 | |
| --echo #
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to omit DISABLE|ENABLE
 | |
| --echo #
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to use bad paths - datadir
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=/data_not_there/ --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to use bad paths - basedir
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=/basedir_not_there/ --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| replace_result "/basedir_not_there//" "/basedir_not_there/";
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to use bad paths - plugin_dir
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=/plugin_not_there/ --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to use bad paths - mysqld
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=/mysqld_not_there/ --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Attempt to use bad paths - my_print_defaults
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=/my_print_defaults_not_there/;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| 
 | |
| --echo # 
 | |
| --echo # Missing library
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_soname.ini --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Bad format for config file
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_format.ini --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Missing base_dir option
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,139,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Missing data_dir option
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,139,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo # 
 | |
| --echo # Missing plugin_dir option
 | |
| --echo #
 | |
| let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQL_DATADIR --basedir=$MYSQL_BASEDIR --mysqld=$MYSQLD_BASEDIR --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
 | |
| --error 1,2,139,256
 | |
| --exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
 | |
| 
 | |
| --echo #
 | |
| --echo # Show the help.
 | |
| --echo #
 | |
| replace_result $MYSQL_PLUGIN mysql_plugin;
 | |
| --replace_regex /Ver [0-9.]+ Distrib [0-9.]+/Ver V.V.VV Distrib XX.XX.XX/ /XX-m[0-9]+/XX/
 | |
| --exec $MYSQL_PLUGIN --help
 | |
| 
 | |
| replace_result $MYSQL_PLUGIN mysql_plugin;
 | |
| --replace_regex /Ver [0-9.]+ Distrib [0-9.]+/Ver V.V.VV Distrib XX.XX.XX/ /XX-m[0-9]+/XX/
 | |
| --exec $MYSQL_PLUGIN --version
 | |
| 
 | |
| #
 | |
| # Restart the server
 | |
| #
 | |
| --append_file $expect_file
 | |
| restart
 | |
| EOF
 | |
| --enable_reconnect
 | |
| --source include/wait_until_connected_again.inc
 | |
| 
 | |
| #
 | |
| # Cleanup
 | |
| # MTR will remove this file later, but this might be too late.
 | |
| --error 0,1
 | |
| --remove_file $expect_file
 | |
| 
 | |
| # Cleanup the share folder in the binary path.
 | |
| --remove_file $MYSQLD_BASEDIR/share/errmsg.sys
 | |
| --rmdir $MYSQLD_BASEDIR/share/mysql
 | |
| --rmdir $MYSQLD_BASEDIR/share
 | |
| 
 | |
| --enable_abort_on_error
 |