From: Bjorn Munch Date: December 16 2010 12:46pm Subject: bzr commit into mysql-5.5-mtr branch (bjorn.munch:3128) Bug#58841 List-Archive: http://lists.mysql.com/commits/127066 X-Bug: 58841 Message-Id: <201012161246.oBGCkVAO022735@khepri15.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1932442369==" --===============1932442369== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/bm136801/my/genplug-55/ based on revid:bjorn.munch@stripped 3128 Bjorn Munch 2010-12-16 Bug #58841 Generalise handling of plugins in MTR mysql-test-run.pl script Put descriptions of plugins into a separate file read by MTR MTR itself has generalised code to read this and set env. variables Removed the *SO variables, updated some tests accordingly added: mysql-test/include/plugin.defs modified: mysql-test/mysql-test-run.pl mysql-test/t/bug46261.test mysql-test/t/fulltext_plugin.test mysql-test/t/plugin.test mysql-test/t/plugin_auth-master.opt mysql-test/t/plugin_load-master.opt mysql-test/t/plugin_load_option-master.opt mysql-test/t/plugin_not_embedded.test === added file 'mysql-test/include/plugin.defs' --- a/mysql-test/include/plugin.defs 1970-01-01 00:00:00 +0000 +++ b/mysql-test/include/plugin.defs 2010-12-16 12:42:52 +0000 @@ -0,0 +1,31 @@ +# Definition file for plugins. +# +# +# +# The following variables will be set for a plugin, where PLUGVAR +# represents the variable name given as the 3rd item +# +# PLUGVAR: name of plugin file including extension .so or .dll +# PLUGVAR_DIR: name of directory where plugin was found +# PLUGVAR_OPT: mysqld option --plugin_dir=.... +# +# If a listed plugin is not found, the corresponding variables will be +# set to empty, they will not be unset. +# +# The PLUGVAR variable is not quoted, so you must remember to quote it +# when using it in an INSTALL PLUGIN command. +# +# The envorinment variables can be used in tests. If adding a new plugin, +# you are free to pick your variable name, but please keep it upper +# case for consistency. + + +auth_test_plugin plugin/auth PLUGIN_AUTH +udf_example sql UDF_EXAMPLE_LIB +ha_example storage/example EXAMPLE_PLUGIN +semisync_master plugin/semisync SEMISYNC_MASTER_PLUGIN +semisync_slave plugin/semisync SEMISYNC_SLAVE_PLUGIN +ha_archive storage/archive ARCHIVE_PLUGIN +ha_blackhole storage/blackhole BLACKHOLE_PLUGIN +ha_federated storage/federated FEDERATED_PLUGIN +mypluglib plugin/fulltext SIMPLE_PARSER === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-12-09 14:32:39 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-12-16 12:42:52 +0000 @@ -131,7 +131,6 @@ my $opt_start_dirty; my $opt_start_exit; my $start_only; -my $auth_filename; # the name of the authentication test plugin my $auth_plugin; # the path to the authentication test plugin END { @@ -1121,21 +1120,7 @@ sub command_line_setup { "$basedir/sql/share/charsets", "$basedir/share/charsets"); - # Look for client test plugin - if (IS_WINDOWS) - { - $auth_filename = "auth_test_plugin.dll"; - } - else - { - $auth_filename = "auth_test_plugin.so"; - } - $auth_plugin= - mtr_file_exists(vs_config_dirs('plugin/auth/',$auth_filename), - "$basedir/plugin/auth/.libs/" . $auth_filename, - "$basedir/lib/mysql/plugin/" . $auth_filename, - "$basedir/lib/plugin/" . $auth_filename); - + ($auth_plugin)= find_plugin("auth_test_plugin", "plugin/auth"); if (using_extern()) { @@ -1974,6 +1959,42 @@ sub find_plugin($$) return $lib_example_plugin; } +# +# Read plugin defintions file +# + +sub read_plugin_defs($) +{ + my ($defs_file)= @_; + + open(PLUGDEF, '<', $defs_file) + or mtr_error("Can't read plugin defintions file $defs_file"); + + while () { + next if /^#/; + my ($plug_file, $plug_loc, $plug_var)= split; + # Allow empty lines + next unless $plug_file; + mtr_error("Lines in $defs_file must have 3 items") unless $plug_var; + + my ($plugin)= find_plugin($plug_file, $plug_loc); + + # Set env. variables that tests may use, set to empty if plugin + # listed in def. file but not found. + + if ($plugin) { + $ENV{$plug_var}= basename($plugin); + $ENV{$plug_var.'_DIR'}= dirname($plugin); + $ENV{$plug_var.'_OPT'}= "--plugin-dir=".dirname($plugin); + } else { + $ENV{$plug_var}= ""; + $ENV{$plug_var.'_DIR'}= ""; + $ENV{$plug_var.'_OPT'}= ""; + } + } + close PLUGDEF; +} + sub environment_setup { umask(022); @@ -2010,121 +2031,15 @@ sub environment_setup { } # -------------------------------------------------------------------------- - # Add the path where mysqld will find udf_example.so - # -------------------------------------------------------------------------- - my $udf_example_filename; - if (IS_WINDOWS) - { - $udf_example_filename = "udf_example.dll"; - } - else - { - $udf_example_filename = "udf_example.so"; - } - my $lib_udf_example= - mtr_file_exists(vs_config_dirs('sql', $udf_example_filename), - "$basedir/sql/.libs/$udf_example_filename",); - - if ( $lib_udf_example ) - { - push(@ld_library_paths, dirname($lib_udf_example)); - } - - $ENV{'UDF_EXAMPLE_LIB'}= - ($lib_udf_example ? basename($lib_udf_example) : ""); - $ENV{'UDF_EXAMPLE_LIB_OPT'}= "--plugin-dir=". - ($lib_udf_example ? dirname($lib_udf_example) : ""); - - # -------------------------------------------------------------------------- - # Add the path where mysqld will find the auth test plugin (dialog.so/dll) + # Read definitions from include/plugin.defs # -------------------------------------------------------------------------- - if ($auth_plugin) - { - $ENV{'PLUGIN_AUTH'}= basename($auth_plugin); - $ENV{'PLUGIN_AUTH_OPT'}= "--plugin-dir=".dirname($auth_plugin); + read_plugin_defs("include/plugin.defs"); - $ENV{'PLUGIN_AUTH_LOAD'}="--plugin_load=test_plugin_server=".$auth_filename; - } - else + # Simplify reference to semisync plugins + if ($ENV{'SEMISYNC_MASTER_PLUGIN'}) { - $ENV{'PLUGIN_AUTH'}= ""; - $ENV{'PLUGIN_AUTH_OPT'}="--plugin-dir="; - $ENV{'PLUGIN_AUTH_LOAD'}=""; - } - - - # -------------------------------------------------------------------------- - # Add the path where mysqld will find ha_example.so - # -------------------------------------------------------------------------- - if ($mysql_version_id >= 50100) { - my ($lib_example_plugin) = find_plugin("ha_example", "storage/example"); - - if($lib_example_plugin) - { - $ENV{'EXAMPLE_PLUGIN'}= - ($lib_example_plugin ? basename($lib_example_plugin) : ""); - $ENV{'EXAMPLE_PLUGIN_OPT'}= "--plugin-dir=". - ($lib_example_plugin ? dirname($lib_example_plugin) : ""); - - $ENV{'HA_EXAMPLE_SO'}="'".basename($lib_example_plugin)."'"; - $ENV{'EXAMPLE_PLUGIN_LOAD'}="--plugin_load=EXAMPLE=".basename($lib_example_plugin); - } - else - { - # Some ".opt" files use some of these variables, so they must be defined - $ENV{'EXAMPLE_PLUGIN'}= ""; - $ENV{'EXAMPLE_PLUGIN_OPT'}= ""; - $ENV{'HA_EXAMPLE_SO'}= ""; - $ENV{'EXAMPLE_PLUGIN_LOAD'}= ""; - } + $ENV{'SEMISYNC_PLUGIN_OPT'}= $ENV{'SEMISYNC_MASTER_PLUGIN_OPT'}; } - - - # -------------------------------------------------------------------------- - # Add the path where mysqld will find semisync plugins - # -------------------------------------------------------------------------- - if (!$opt_embedded_server) { - - - my ($lib_semisync_master_plugin) = find_plugin("semisync_master", "plugin/semisync"); - my ($lib_semisync_slave_plugin) = find_plugin("semisync_slave", "plugin/semisync"); - - - if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin) - { - $ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin); - $ENV{'SEMISYNC_SLAVE_PLUGIN'}= basename($lib_semisync_slave_plugin); - $ENV{'SEMISYNC_PLUGIN_OPT'}= "--plugin-dir=".dirname($lib_semisync_master_plugin); - } - else - { - $ENV{'SEMISYNC_MASTER_PLUGIN'}= ""; - $ENV{'SEMISYNC_SLAVE_PLUGIN'}= ""; - $ENV{'SEMISYNC_PLUGIN_OPT'}="--plugin-dir="; - } - } - - # ---------------------------------------------------- - # Add the paths where mysqld will find archive/blackhole/federated plugins. - # ---------------------------------------------------- - $ENV{'ARCHIVE_PLUGIN_DIR'} = - dirname(find_plugin("ha_archive", "storage/archive")); - $ENV{'BLACKHOLE_PLUGIN_DIR'} = - dirname(find_plugin("ha_blackhole", "storage/blackhole")); - $ENV{'FEDERATED_PLUGIN_DIR'} = - dirname(find_plugin("ha_federated", "storage/federated")); - - # ---------------------------------------------------- - # Add the path where mysqld will find mypluglib.so - # ---------------------------------------------------- - - my ($lib_simple_parser) = find_plugin("mypluglib", "plugin/fulltext"); - - $ENV{'MYPLUGLIB_SO'}="'".basename($lib_simple_parser)."'"; - $ENV{'SIMPLE_PARSER'}= - ($lib_simple_parser ? basename($lib_simple_parser) : ""); - $ENV{'SIMPLE_PARSER_OPT'}= "--plugin-dir=". - ($lib_simple_parser ? dirname($lib_simple_parser) : ""); # -------------------------------------------------------------------------- # Valgrind need to be run with debug libraries otherwise it's almost === modified file 'mysql-test/t/bug46261.test' --- a/mysql-test/t/bug46261.test 2010-04-22 13:52:00 +0000 +++ b/mysql-test/t/bug46261.test 2010-12-16 12:42:52 +0000 @@ -7,7 +7,7 @@ --replace_regex /\.dll/.so/ --error ER_OPTION_PREVENTS_STATEMENT -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; --replace_regex /\.dll/.so/ --error ER_OPTION_PREVENTS_STATEMENT === modified file 'mysql-test/t/fulltext_plugin.test' --- a/mysql-test/t/fulltext_plugin.test 2009-11-09 11:32:48 +0000 +++ b/mysql-test/t/fulltext_plugin.test 2010-12-16 12:42:52 +0000 @@ -4,7 +4,7 @@ # BUG#39746 - Debug flag breaks struct definition (server crash) # --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN simple_parser SONAME $MYPLUGLIB_SO; +eval INSTALL PLUGIN simple_parser SONAME '$SIMPLE_PARSER'; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser); ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser; DROP TABLE t1; === modified file 'mysql-test/t/plugin.test' --- a/mysql-test/t/plugin.test 2009-11-02 20:05:42 +0000 +++ b/mysql-test/t/plugin.test 2010-12-16 12:42:52 +0000 @@ -5,15 +5,15 @@ CREATE TABLE t1(a int) ENGINE=EXAMPLE; DROP TABLE t1; --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; --replace_regex /\.dll/.so/ --error 1125 -eval INSTALL PLUGIN EXAMPLE SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN EXAMPLE SONAME '$EXAMPLE_PLUGIN'; UNINSTALL PLUGIN example; --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; CREATE TABLE t1(a int) ENGINE=EXAMPLE; @@ -41,7 +41,7 @@ UNINSTALL PLUGIN non_exist; --echo # to impossible int val --echo # --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; SET GLOBAL example_enum_var= e1; SET GLOBAL example_enum_var= e2; @@ -56,7 +56,7 @@ UNINSTALL PLUGIN example; # Bug #32757 hang with sql_mode set when setting some global variables # --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; select @@session.sql_mode into @old_sql_mode; === modified file 'mysql-test/t/plugin_auth-master.opt' --- a/mysql-test/t/plugin_auth-master.opt 2010-08-09 08:32:50 +0000 +++ b/mysql-test/t/plugin_auth-master.opt 2010-12-16 12:42:52 +0000 @@ -1,2 +1,2 @@ $PLUGIN_AUTH_OPT -$PLUGIN_AUTH_LOAD +--plugin_load=test_plugin_server=$PLUGIN_AUTH === modified file 'mysql-test/t/plugin_load-master.opt' --- a/mysql-test/t/plugin_load-master.opt 2009-06-10 08:59:49 +0000 +++ b/mysql-test/t/plugin_load-master.opt 2010-12-16 12:42:52 +0000 @@ -1,3 +1,3 @@ $EXAMPLE_PLUGIN_OPT -$EXAMPLE_PLUGIN_LOAD +--plugin_load=EXAMPLE=$EXAMPLE_PLUGIN --loose-plugin-example-enum-var=e2 === modified file 'mysql-test/t/plugin_load_option-master.opt' --- a/mysql-test/t/plugin_load_option-master.opt 2010-10-08 09:20:42 +0000 +++ b/mysql-test/t/plugin_load_option-master.opt 2010-12-16 12:42:52 +0000 @@ -1,3 +1,3 @@ $EXAMPLE_PLUGIN_OPT -$EXAMPLE_PLUGIN_LOAD +--plugin_load=EXAMPLE=$EXAMPLE_PLUGIN --loose-plugin-example=FORCE_PLUS_PERMANENT === modified file 'mysql-test/t/plugin_not_embedded.test' --- a/mysql-test/t/plugin_not_embedded.test 2010-03-14 11:16:59 +0000 +++ b/mysql-test/t/plugin_not_embedded.test 2010-12-16 12:42:52 +0000 @@ -8,7 +8,7 @@ GRANT INSERT ON mysql.plugin TO bug51770@localhost; connect(con1,localhost,bug51770,,); --replace_regex /\.dll/.so/ -eval INSTALL PLUGIN example SONAME $HA_EXAMPLE_SO; +eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; --error ER_TABLEACCESS_DENIED_ERROR UNINSTALL PLUGIN example; connection default; --===============1932442369== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/bjorn.munch@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bjorn.munch@stripped # target_branch: file:///home/bm136801/my/genplug-55/ # testament_sha1: 99676b9fb0861a86ed91be533823d9aa4570a3aa # timestamp: 2010-12-16 13:46:31 +0100 # base_revision_id: bjorn.munch@stripped\ # cu7a3r7zr75lqh9x # # Begin bundle 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 --===============1932442369==--