1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

WL#5710 : enable and disable plugins

This patch corrects a problem found in PB. Some platforms have very
different locations for the mysql installation. The client was not
able to find either my_print_defaults or mysqld predictably.

The patch adds two new command options --mysqld and --my-print-defaults
which can be used to provide the location of mysqld and
my_print_defaults by providing the paths.

The patch also changes the concatenation of the soname extension to
fix a problem found on some Ubuntu systems.

The patch contains changes to the test to ensure it will run on all
platforms. A trap is set in the test to skip testing if the location
of mysqld, my_print_defaults, or the daemon_example.ini files cannot
be determined.
This commit is contained in:
Chuck Bell
2011-08-09 08:58:18 -04:00
parent 127d4f2e13
commit bfefb55272
3 changed files with 193 additions and 65 deletions

View File

@ -1,35 +1,107 @@
#
# 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`;
# The mysql_plugin tool expects all executables in "basedir", so they will be copied to it.
# It also expects a directory structure like in the installed mysql version, so errmsg.sys
# will be copied to "basedir/share". The directories differ between Windows and Unix.
--disable_abort_on_error
if(`SELECT CONVERT(@@version_compile_os USING latin1)
IN ('Win32','Win64','Windows')`)
# 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= $mysqld;\n";
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 == '')
{
let $MYSQLD_BASEDIR= $MYSQL_BASEDIR/sql/Debug;
--copy_file $MYSQL_BASEDIR/extra/Debug/my_print_defaults.exe $MYSQLD_BASEDIR/my_print_defaults.exe
--mkdir $MYSQLD_BASEDIR/share
--copy_file $MYSQL_BASEDIR/sql/share/english/errmsg.sys $MYSQLD_BASEDIR/share/errmsg.sys
--copy_file $MYSQL_BASEDIR/plugin/daemon_example/daemon_example.ini $DAEMONEXAMPLE_DIR/daemon_example.ini
}
if (`SELECT CONVERT(@@version_compile_os USING latin1)
NOT IN ('Win32','Win64','Windows')`)
{
let $MYSQLD_BASEDIR= $MYSQL_BASEDIR/sql;
--copy_file $MYSQL_BASEDIR/extra/my_print_defaults $MYSQLD_BASEDIR/my_print_defaults
--copy_file $MYSQL_BASEDIR/sql/share/english/errmsg.sys $MYSQLD_BASEDIR/share/errmsg.sys
--skip Test requires known location of my_print_defaults executable.
}
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=$DAEMONEXAMPLE_DIR;
# 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 --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--echo #
--echo # Ensure the plugin isn't loaded.
@ -52,11 +124,11 @@ EOF
#
# Enable the plugin
#
--exec $MYSQLD_BOOTSTRAP_CMD ENABLE daemon_example
--exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
#
# Ensure enabling an enabled plugin doesn't fail
--exec $MYSQLD_BOOTSTRAP_CMD ENABLE daemon_example
--exec $MYSQL_PLUGIN_CMD ENABLE daemon_example
#
# Restart the server
@ -88,7 +160,7 @@ EOF
#
# Disable the plugin
#
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example
#
# Restart the server
@ -121,81 +193,96 @@ EOF
--echo # Attempt to load non-existant plugin
--echo #
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE NOT_THERE_AT_ALL 2>&1
--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 $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example --plugin-ini=/NOT/THERE/pi.ini 2>&1
--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 $MYSQLD_BOOTSTRAP_CMD DISABLE 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE 2>&1
--echo #
--echo # Attempt to omit DISABLE|ENABLE
--echo #
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD daemon_example 2>&1
--echo #
--echo # Attempt to use bad paths - datadir
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=/data_not_there/ --basedir=$MYSQLD_BASEDIR --plugin-dir=$DAEMONEXAMPLE_DIR;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=/data_not_there/ --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Attempt to use bad paths - basedir
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=/basedir_not_there/ --plugin-dir=$DAEMONEXAMPLE_DIR;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=/basedir_not_there/ --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Attempt to use bad paths - plugin_dir
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=/plugin_not_there/;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQL_BASEDIR --plugin-dir=/plugin_not_there/ --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--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 --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 $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=$DAEMONEXAMPLE_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_soname.ini;
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 --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Bad format for config file
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR --plugin-dir=$DAEMONEXAMPLE_DIR --plugin-ini=$MYSQL_TEST_DIR/include/daemon_example_bad_format.ini;
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 --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Missing base_dir option
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --plugin-dir=$DAEMONEXAMPLE_DIR;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,139,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Missing data_dir option
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --basedir=$MYSQLD_BASEDIR --plugin-dir=$DAEMONEXAMPLE_DIR;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --basedir=$MYSQL_BASEDIR --plugin-dir=$PLUGIN_DIR --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,139,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Missing plugin_dir option
--echo #
let $MYSQLD_BOOTSTRAP_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQLD_DATADIR --basedir=$MYSQLD_BASEDIR;
let $MYSQL_PLUGIN_CMD= $MYSQL_PLUGIN -n --datadir=$MYSQL_DATADIR --basedir=$MYSQL_BASEDIR --mysqld=$MYSQLD --my-print-defaults=$MYSQL_MY_PRINT_DEFAULTS_BASEDIR;
--error 1,2,139,256
--exec $MYSQLD_BOOTSTRAP_CMD DISABLE daemon_example 2>&1
--exec $MYSQL_PLUGIN_CMD DISABLE daemon_example 2>&1
--echo #
--echo # Show the help.
@ -223,18 +310,9 @@ EOF
--error 0,1
--remove_file $expect_file
if(`SELECT CONVERT(@@version_compile_os USING latin1)
IN ('Win32','Win64','Windows')`)
{
--remove_file $DAEMONEXAMPLE_DIR/daemon_example.ini
--remove_file $MYSQLD_BASEDIR/my_print_defaults.exe
--remove_file $MYSQLD_BASEDIR/share/errmsg.sys
--rmdir $MYSQLD_BASEDIR/share
}
if(`SELECT CONVERT(@@version_compile_os USING latin1)
NOT IN ('Win32','Win64','Windows')`)
{
--remove_file $MYSQLD_BASEDIR/my_print_defaults
--remove_file $MYSQLD_BASEDIR/share/errmsg.sys
}
# 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