Check warnings in servers error log as part of test case
BitKeeper/deleted/.del-rpl_bug33931-slave.opt: Delete: mysql-test/suite/rpl/t/rpl_bug33931-slave.opt mysql-test/include/default_mysqld.cnf: Set a default name for "log-bin" mysql-test/mysql-test-run.pl: Check for warnings in mysqld error log files after each testcase, using SQL mysql-test/lib/mtr_cases.pm: Make mtr_match into a perl module mysql-test/lib/mtr_match.pm: Make mtr_match into a perl module mysql-test/lib/mtr_report.pm: Make mtr_match into a perl module Print warnings if testcase failed from warnings mysql-test/r/information_schema.result: Be more selective which databases and tables are select in the queries mysql-test/r/mysql_upgrade.result: Update result, mysql_upgrade will check _all_ databases mysql-test/r/mysqlcheck.result: Update result, mysql_upgrade should check _all_ databases mysql-test/r/sp-destruct.result: Be more selective which databases and tables are select in the queries mysql-test/r/sp-error.result: Backup and restore mysql.proc table mysql-test/r/sp-security.result: Be more selective which databases and tables are select in the queries mysql-test/r/sp.result: Be more selective which databases and tables are select in the queries mysql-test/suite/rpl/r/rpl_bug33931.result: Move the setting of debug flag into the test file instead of in -slave.opt Add supression mysql-test/suite/rpl/r/rpl_idempotency.result: Add supression Add master-slave-end.inc mysql-test/suite/rpl/t/rpl_bug33931.test: Move the setting of debug flag into the test file instead of in -slave.opt Add supression mysql-test/suite/rpl/t/rpl_idempotency.test: Add supression Add master-slave-end.inc mysql-test/t/information_schema.test: Be more selective which databases and tables are select in the queries mysql-test/t/sp-destruct.test: Be more selective which databases and tables are select in the queries mysql-test/t/sp-error.test: Backup and restore mysql.proc table mysql-test/t/sp-security.test: Be more selective which databases and tables are select in the queries mysql-test/t/sp.test: Be more selective which databases and tables are select in the queries mysql-test/include/check-warnings.test: New BitKeeper file ``mysql-test/include/check-warnings.test'' mysql-test/include/mtr_warnings.sql: New BitKeeper file ``mysql-test/include/mtr_warnings.sql''
This commit is contained in:
parent
7674605d79
commit
2c4ca51050
8
mysql-test/include/check-warnings.test
Normal file
8
mysql-test/include/check-warnings.test
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
#
|
||||||
|
# This test is executed once after each test to check the servers
|
||||||
|
# for unexpected warnings found in the servers error log
|
||||||
|
#
|
||||||
|
--disable_query_log
|
||||||
|
call mtr.check_warnings();
|
||||||
|
--enable_query_log
|
@ -17,5 +17,5 @@ loose-innodb_data_file_path= ibdata1:10M:autoextend
|
|||||||
|
|
||||||
slave-net-timeout=120
|
slave-net-timeout=120
|
||||||
|
|
||||||
log-bin
|
log-bin=mysqld-bin
|
||||||
|
|
||||||
|
290
mysql-test/include/mtr_warnings.sql
Normal file
290
mysql-test/include/mtr_warnings.sql
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
delimiter ||;
|
||||||
|
|
||||||
|
use mtr||
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Load table with the patterns that are considered
|
||||||
|
-- as suspicious and should be examined further
|
||||||
|
--
|
||||||
|
CREATE TABLE suspicious_patterns (
|
||||||
|
pattern VARCHAR(255)
|
||||||
|
)||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Declare a trigger that makes sure
|
||||||
|
-- no invalid patterns can be inserted
|
||||||
|
-- into suspicious_patterns
|
||||||
|
--
|
||||||
|
/*!50002
|
||||||
|
CREATE DEFINER=root@localhost TRIGGER sp_insert
|
||||||
|
BEFORE INSERT ON suspicious_patterns
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DECLARE dummy INT;
|
||||||
|
SELECT "" REGEXP NEW.pattern INTO dummy;
|
||||||
|
END
|
||||||
|
*/||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Insert patterns for the lines we should check
|
||||||
|
--
|
||||||
|
INSERT INTO suspicious_patterns VALUES
|
||||||
|
("^Warning:|mysqld: Warning|\\[Warning\\]"),
|
||||||
|
("^Error:|\\[ERROR\\]"),
|
||||||
|
("^==.* at 0x"),
|
||||||
|
("InnoDB: Warning"),
|
||||||
|
("^safe_mutex:|allocated at line"),
|
||||||
|
("missing DBUG_RETURN"),
|
||||||
|
("Attempting backtrace"),
|
||||||
|
("Assertion .* failed")||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Create table where testcases can insert patterns to
|
||||||
|
-- be supressed
|
||||||
|
--
|
||||||
|
CREATE TABLE test_supressions (
|
||||||
|
pattern VARCHAR(255)
|
||||||
|
)||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Declare a trigger that makes sure
|
||||||
|
-- no invalid patterns can be inserted
|
||||||
|
-- into test_supressions
|
||||||
|
--
|
||||||
|
/*!50002
|
||||||
|
CREATE DEFINER=root@localhost TRIGGER ts_insert
|
||||||
|
BEFORE INSERT ON test_supressions
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DECLARE dummy INT;
|
||||||
|
SELECT "" REGEXP NEW.pattern INTO dummy;
|
||||||
|
END
|
||||||
|
*/||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Load table with patterns that will be supressed globally(always)
|
||||||
|
--
|
||||||
|
CREATE TABLE global_supressions (
|
||||||
|
pattern VARCHAR(255)
|
||||||
|
)||
|
||||||
|
|
||||||
|
|
||||||
|
-- Declare a trigger that makes sure
|
||||||
|
-- no invalid patterns can be inserted
|
||||||
|
-- into global_supressions
|
||||||
|
--
|
||||||
|
/*!50002
|
||||||
|
CREATE DEFINER=root@localhost TRIGGER gs_insert
|
||||||
|
BEFORE INSERT ON global_supressions
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
DECLARE dummy INT;
|
||||||
|
SELECT "" REGEXP NEW.pattern INTO dummy;
|
||||||
|
END
|
||||||
|
*/||
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Insert patterns that should always be supressed
|
||||||
|
--
|
||||||
|
INSERT INTO global_supressions VALUES
|
||||||
|
("'SELECT UNIX_TIMESTAMP\\(\\)' failed on master"),
|
||||||
|
("Aborted connection"),
|
||||||
|
("Client requested master to start replication from impossible position"),
|
||||||
|
("Could not find first log file name in binary log"),
|
||||||
|
("Enabling keys got errno"),
|
||||||
|
("Error reading master configuration"),
|
||||||
|
("Error reading packet"),
|
||||||
|
("Event Scheduler"),
|
||||||
|
("Failed to open log"),
|
||||||
|
("Failed to open the existing master info file"),
|
||||||
|
("Forcing shutdown of [0-9]* plugins"),
|
||||||
|
|
||||||
|
/*
|
||||||
|
Due to timing issues, it might be that this warning
|
||||||
|
is printed when the server shuts down and the
|
||||||
|
computer is loaded.
|
||||||
|
*/
|
||||||
|
|
||||||
|
("Got error [0-9]* when reading table"),
|
||||||
|
("Incorrect definition of table"),
|
||||||
|
("Incorrect information in file"),
|
||||||
|
("InnoDB: Warning: we did not need to do crash recovery"),
|
||||||
|
("Invalid \\(old\\?\\) table or database name"),
|
||||||
|
("Lock wait timeout exceeded"),
|
||||||
|
("Log entry on master is longer than max_allowed_packet"),
|
||||||
|
("unknown option '--loose-"),
|
||||||
|
("unknown variable 'loose-"),
|
||||||
|
("You have forced lower_case_table_names to 0 through a command-line option"),
|
||||||
|
("Setting lower_case_table_names=2"),
|
||||||
|
("NDB Binlog:"),
|
||||||
|
("NDB: failed to setup table"),
|
||||||
|
("NDB: only row based binary logging"),
|
||||||
|
("Neither --relay-log nor --relay-log-index were used"),
|
||||||
|
("Query partially completed"),
|
||||||
|
("Slave I.O thread aborted while waiting for relay log"),
|
||||||
|
("Slave SQL thread is stopped because UNTIL condition"),
|
||||||
|
("Slave SQL thread retried transaction"),
|
||||||
|
("Slave \\(additional info\\)"),
|
||||||
|
("Slave: .*Duplicate column name"),
|
||||||
|
("Slave: .*master may suffer from"),
|
||||||
|
("Slave: According to the master's version"),
|
||||||
|
("Slave: Column [0-9]* type mismatch"),
|
||||||
|
("Slave: Error .* doesn't exist"),
|
||||||
|
("Slave: Error .*Deadlock found"),
|
||||||
|
("Slave: Error .*Unknown table"),
|
||||||
|
("Slave: Error in Write_rows event: "),
|
||||||
|
("Slave: Field .* of table .* has no default value"),
|
||||||
|
("Slave: Field .* doesn't have a default value"),
|
||||||
|
("Slave: Query caused different errors on master and slave"),
|
||||||
|
("Slave: Table .* doesn't exist"),
|
||||||
|
("Slave: Table width mismatch"),
|
||||||
|
("Slave: The incident LOST_EVENTS occured on the master"),
|
||||||
|
("Slave: Unknown error.* 1105"),
|
||||||
|
("Slave: Can't drop database.* database doesn't exist"),
|
||||||
|
("Slave SQL:.*(Error_code: \[\[:digit:\]\]+|Query:.*)"),
|
||||||
|
("Sort aborted"),
|
||||||
|
("Time-out in NDB"),
|
||||||
|
("Warning:\s+One can only use the --user.*root"),
|
||||||
|
("Warning:\s+Setting lower_case_table_names=2"),
|
||||||
|
("Warning:\s+Table:.* on (delete|rename)"),
|
||||||
|
("You have an error in your SQL syntax"),
|
||||||
|
("deprecated"),
|
||||||
|
("description of time zone"),
|
||||||
|
("equal MySQL server ids"),
|
||||||
|
("error .*connecting to master"),
|
||||||
|
("error reading log entry"),
|
||||||
|
("lower_case_table_names is set"),
|
||||||
|
("skip-name-resolve mode"),
|
||||||
|
("slave SQL thread aborted"),
|
||||||
|
("Slave: .*Duplicate entry"),
|
||||||
|
|
||||||
|
/*
|
||||||
|
Special case, made as specific as possible, for:
|
||||||
|
Bug #28436: Incorrect position in SHOW BINLOG EVENTS causes
|
||||||
|
server coredump
|
||||||
|
*/
|
||||||
|
|
||||||
|
("Error in Log_event::read_log_event\\\(\\\): 'Sanity check failed', data_len: 258, event_type: 49"),
|
||||||
|
|
||||||
|
("Statement is not safe to log in statement format"),
|
||||||
|
|
||||||
|
/* test case for Bug#bug29807 copies a stray frm into database */
|
||||||
|
("InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal"),
|
||||||
|
("Cannot find or open table test\/bug29807 from"),
|
||||||
|
|
||||||
|
/* innodb foreign key tests that fail in ALTER or RENAME produce this */
|
||||||
|
("InnoDB: Error: in ALTER TABLE `test`.`t[12]`"),
|
||||||
|
("InnoDB: Error: in RENAME TABLE table `test`.`t1`"),
|
||||||
|
("InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal"),
|
||||||
|
|
||||||
|
/* Test case for Bug#14233 produces the following warnings: */
|
||||||
|
("Stored routine 'test'.'bug14233_1': invalid value in column mysql.proc"),
|
||||||
|
("Stored routine 'test'.'bug14233_2': invalid value in column mysql.proc"),
|
||||||
|
("Stored routine 'test'.'bug14233_3': invalid value in column mysql.proc"),
|
||||||
|
|
||||||
|
/*
|
||||||
|
BUG#32080 - Excessive warnings on Solaris: setrlimit could not
|
||||||
|
change the size of core files
|
||||||
|
*/
|
||||||
|
("setrlimit could not change the size of core files to 'infinity'"),
|
||||||
|
|
||||||
|
/*
|
||||||
|
rpl_extrColmaster_*.test, the slave thread produces warnings
|
||||||
|
when it get updates to a table that has more columns on the
|
||||||
|
master
|
||||||
|
*/
|
||||||
|
("Slave: Unknown column 'c7' in 't15' Error_code: 1054"),
|
||||||
|
("Slave: Can't DROP 'c7'.* 1091"),
|
||||||
|
("Slave: Key column 'c6'.* 1072"),
|
||||||
|
|
||||||
|
("THE_LAST_SUPPRESSION")||
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Procedure that uses the above created tables to check
|
||||||
|
-- the servers error log for warnings
|
||||||
|
--
|
||||||
|
CREATE DEFINER=root@localhost PROCEDURE check_warnings()
|
||||||
|
BEGIN
|
||||||
|
--
|
||||||
|
-- Load the server .err file into "error_log" table
|
||||||
|
--
|
||||||
|
CREATE TEMPORARY TABLE error_log (
|
||||||
|
row INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
line mediumtext NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
SELECT variable_value INTO @log_error
|
||||||
|
FROM information_schema.global_variables
|
||||||
|
WHERE variable_name='LOG_ERROR';
|
||||||
|
|
||||||
|
SET @text= load_file(@log_error);
|
||||||
|
-- select @text;
|
||||||
|
|
||||||
|
WHILE LOCATE('\n', @text) DO
|
||||||
|
INSERT error_log (line)
|
||||||
|
VALUES (
|
||||||
|
SUBSTR(@text, 1, LOCATE('\n', @text)-1)
|
||||||
|
);
|
||||||
|
SET @text= SUBSTR(@text FROM LOCATE('\n', @text)+1);
|
||||||
|
END WHILE;
|
||||||
|
|
||||||
|
-- select * from error_log;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Remove all lines belonging to previous tests
|
||||||
|
--
|
||||||
|
SELECT COALESCE(MAX(row),0) INTO @max_row
|
||||||
|
FROM error_log
|
||||||
|
WHERE line REGEXP "^CURRENT_TEST:";
|
||||||
|
DELETE FROM error_log WHERE row < @max_row;
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE suspect_lines AS
|
||||||
|
SELECT DISTINCT el.line, 0 as "supressed"
|
||||||
|
FROM error_log el, suspicious_patterns ep
|
||||||
|
WHERE el.line REGEXP ep.pattern;
|
||||||
|
|
||||||
|
-- Mark lines that are supressed by global supressions
|
||||||
|
UPDATE suspect_lines sl, global_supressions gs
|
||||||
|
SET supressed=1
|
||||||
|
WHERE sl.line REGEXP gs.pattern;
|
||||||
|
|
||||||
|
-- Mark lines that are supressed by test specific supressions
|
||||||
|
UPDATE suspect_lines sl, test_supressions ts
|
||||||
|
SET supressed=2
|
||||||
|
WHERE sl.line REGEXP ts.pattern;
|
||||||
|
|
||||||
|
SELECT COUNT(*) INTO @num_warnings FROM suspect_lines
|
||||||
|
WHERE supressed=0;
|
||||||
|
|
||||||
|
IF @num_warnings > 0 THEN
|
||||||
|
SELECT @log_error;
|
||||||
|
SELECT line as log_error
|
||||||
|
FROM suspect_lines WHERE supressed=0;
|
||||||
|
SELECT * FROM test_supressions;
|
||||||
|
ELSE
|
||||||
|
SELECT "OK";
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Cleanup for next test
|
||||||
|
TRUNCATE test_supressions;
|
||||||
|
|
||||||
|
END||
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Declare a procedure testcases can use to insert test
|
||||||
|
-- specific supressions
|
||||||
|
--
|
||||||
|
/*!50001
|
||||||
|
CREATE DEFINER=root@localhost
|
||||||
|
PROCEDURE add_supression(pattern VARCHAR(255))
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO test_supressions (pattern) VALUES (pattern);
|
||||||
|
END
|
||||||
|
*/||
|
||||||
|
|
||||||
|
|
@ -25,6 +25,7 @@ use base qw(Exporter);
|
|||||||
our @EXPORT= qw(collect_option collect_test_cases);
|
our @EXPORT= qw(collect_option collect_test_cases);
|
||||||
|
|
||||||
use mtr_report;
|
use mtr_report;
|
||||||
|
use mtr_match;
|
||||||
|
|
||||||
# Options used for the collect phase
|
# Options used for the collect phase
|
||||||
our $start_from;
|
our $start_from;
|
||||||
@ -55,7 +56,6 @@ use IO::File();
|
|||||||
use My::Config;
|
use My::Config;
|
||||||
use My::Platform;
|
use My::Platform;
|
||||||
|
|
||||||
require "mtr_match.pl";
|
|
||||||
require "mtr_misc.pl";
|
require "mtr_misc.pl";
|
||||||
|
|
||||||
# Precompiled regex's for tests to do or skip
|
# Precompiled regex's for tests to do or skip
|
||||||
@ -425,7 +425,7 @@ sub collect_one_suite($)
|
|||||||
|
|
||||||
if (@combinations)
|
if (@combinations)
|
||||||
{
|
{
|
||||||
print " - adding combinations\n";
|
print " - adding combinations for $suite\n";
|
||||||
#print_testcases(@cases);
|
#print_testcases(@cases);
|
||||||
|
|
||||||
my @new_cases;
|
my @new_cases;
|
||||||
|
@ -18,20 +18,17 @@
|
|||||||
# and is part of the translation of the Bourne shell script with the
|
# and is part of the translation of the Bourne shell script with the
|
||||||
# same name.
|
# same name.
|
||||||
|
|
||||||
|
package mtr_match;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
sub mtr_match_prefix ($$);
|
use base qw(Exporter);
|
||||||
sub mtr_match_extension ($$);
|
our @EXPORT= qw(mtr_match_prefix
|
||||||
sub mtr_match_any_exact ($$);
|
mtr_match_extension
|
||||||
|
mtr_match_substring);
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
#
|
||||||
#
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Match a prefix and return what is after the prefix
|
# Match a prefix and return what is after the prefix
|
||||||
|
#
|
||||||
sub mtr_match_prefix ($$) {
|
sub mtr_match_prefix ($$) {
|
||||||
my $string= shift;
|
my $string= shift;
|
||||||
my $prefix= shift;
|
my $prefix= shift;
|
||||||
@ -47,8 +44,9 @@ sub mtr_match_prefix ($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
# Match extension and return the name without extension
|
# Match extension and return the name without extension
|
||||||
|
#
|
||||||
sub mtr_match_extension ($$) {
|
sub mtr_match_extension ($$) {
|
||||||
my $file= shift;
|
my $file= shift;
|
||||||
my $ext= shift;
|
my $ext= shift;
|
||||||
@ -64,8 +62,9 @@ sub mtr_match_extension ($$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
# Match a substring anywere in a string
|
# Match a substring anywere in a string
|
||||||
|
#
|
||||||
sub mtr_match_substring ($$) {
|
sub mtr_match_substring ($$) {
|
||||||
my $string= shift;
|
my $string= shift;
|
||||||
my $substring= shift;
|
my $substring= shift;
|
@ -29,6 +29,7 @@ our @EXPORT= qw(report_option mtr_print_line mtr_print_thick_line
|
|||||||
mtr_report_test_failed mtr_report_test_skipped
|
mtr_report_test_failed mtr_report_test_skipped
|
||||||
mtr_report_stats);
|
mtr_report_stats);
|
||||||
|
|
||||||
|
use mtr_match;
|
||||||
require "mtr_io.pl";
|
require "mtr_io.pl";
|
||||||
|
|
||||||
my $tot_real_time= 0;
|
my $tot_real_time= 0;
|
||||||
@ -115,7 +116,13 @@ sub mtr_report_test_failed ($$) {
|
|||||||
$tinfo->{'result'}= 'MTR_RES_FAILED';
|
$tinfo->{'result'}= 'MTR_RES_FAILED';
|
||||||
my $test_failures= $tinfo->{'failures'} || 0;
|
my $test_failures= $tinfo->{'failures'} || 0;
|
||||||
$tinfo->{'failures'}= $test_failures + 1;
|
$tinfo->{'failures'}= $test_failures + 1;
|
||||||
if ( defined $tinfo->{'timeout'} )
|
if ( defined $tinfo->{'warnings'} )
|
||||||
|
{
|
||||||
|
mtr_report("[ fail ] Found warnings in server log file!");
|
||||||
|
mtr_report($tinfo->{'warnings'});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
elsif ( defined $tinfo->{'timeout'} )
|
||||||
{
|
{
|
||||||
mtr_report("[ fail ] timeout");
|
mtr_report("[ fail ] timeout");
|
||||||
return;
|
return;
|
||||||
@ -161,7 +168,7 @@ sub mtr_report_stats ($) {
|
|||||||
my $tot_failed= 0;
|
my $tot_failed= 0;
|
||||||
my $tot_tests= 0;
|
my $tot_tests= 0;
|
||||||
my $tot_restarts= 0;
|
my $tot_restarts= 0;
|
||||||
my $found_problems= 0; # Some warnings in the logfiles are errors...
|
my $found_problems= 0;
|
||||||
|
|
||||||
foreach my $tinfo (@$tests)
|
foreach my $tinfo (@$tests)
|
||||||
{
|
{
|
||||||
@ -183,6 +190,16 @@ sub mtr_report_stats ($) {
|
|||||||
{
|
{
|
||||||
$tot_restarts++;
|
$tot_restarts++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Look for warnings produced by mysqltest
|
||||||
|
my $base_file= mtr_match_extension($tinfo->{'result_file'},
|
||||||
|
"result"); # Trim extension
|
||||||
|
my $warning_file= "$base_file.warnings";
|
||||||
|
if ( -f $warning_file )
|
||||||
|
{
|
||||||
|
$found_problems= 1;
|
||||||
|
mtr_warning("Check myqltest warnings in '$warning_file'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
# ----------------------------------------------------------------------
|
||||||
@ -198,231 +215,12 @@ sub mtr_report_stats ($) {
|
|||||||
time - $BASETIME, "seconds executing testcases");
|
time - $BASETIME, "seconds executing testcases");
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# If a debug run, there might be interesting information inside
|
|
||||||
# the "var/log/*.err" files. We save this info in "var/log/warnings"
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
if ( $::opt_warnings )
|
my $warnlog= "$::opt_vardir/log/warnings";
|
||||||
|
if ( -f $warnlog )
|
||||||
{
|
{
|
||||||
# Save and report if there was any fatal warnings/errors in err logs
|
mtr_warning("Got errors/warnings while running tests, please examine",
|
||||||
|
"'$warnlog' for details.");
|
||||||
my $warnlog= "$::opt_vardir/log/warnings";
|
|
||||||
|
|
||||||
unless ( open(WARN, ">$warnlog") )
|
|
||||||
{
|
|
||||||
mtr_warning("can't write to the file \"$warnlog\": $!");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
# We report different types of problems in order
|
|
||||||
foreach my $pattern ( "^Warning:",
|
|
||||||
"\\[Warning\\]",
|
|
||||||
"\\[ERROR\\]",
|
|
||||||
"^Error:", "^==.* at 0x",
|
|
||||||
"InnoDB: Warning",
|
|
||||||
"InnoDB: Error",
|
|
||||||
"^safe_mutex:",
|
|
||||||
"missing DBUG_RETURN",
|
|
||||||
"mysqld: Warning",
|
|
||||||
"allocated at line",
|
|
||||||
"Attempting backtrace", "Assertion .* failed" )
|
|
||||||
{
|
|
||||||
foreach my $errlog ( sort glob("$::opt_vardir/log/*.err") )
|
|
||||||
{
|
|
||||||
my $testname= "";
|
|
||||||
unless ( open(ERR, $errlog) )
|
|
||||||
{
|
|
||||||
mtr_warning("can't read $errlog");
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
my $leak_reports_expected= undef;
|
|
||||||
while ( <ERR> )
|
|
||||||
{
|
|
||||||
# There is a test case that purposely provokes a
|
|
||||||
# SAFEMALLOC leak report, even though there is no actual
|
|
||||||
# leak. We need to detect this, and ignore the warning in
|
|
||||||
# that case.
|
|
||||||
if (/Begin safemalloc memory dump:/) {
|
|
||||||
$leak_reports_expected= 1;
|
|
||||||
} elsif (/End safemalloc memory dump./) {
|
|
||||||
$leak_reports_expected= undef;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Skip some non fatal warnings from the log files
|
|
||||||
if (
|
|
||||||
/\"SELECT UNIX_TIMESTAMP\(\)\" failed on master/ or
|
|
||||||
/Aborted connection/ or
|
|
||||||
/Client requested master to start replication from impossible position/ or
|
|
||||||
/Could not find first log file name in binary log/ or
|
|
||||||
/Enabling keys got errno/ or
|
|
||||||
/Error reading master configuration/ or
|
|
||||||
/Error reading packet/ or
|
|
||||||
/Event Scheduler/ or
|
|
||||||
/Failed to open log/ or
|
|
||||||
/Failed to open the existing master info file/ or
|
|
||||||
/Forcing shutdown of [0-9]* plugins/ or
|
|
||||||
/Can't open shared library .*\bha_example\b/ or
|
|
||||||
/Couldn't load plugin .*\bha_example\b/ or
|
|
||||||
|
|
||||||
# Due to timing issues, it might be that this warning
|
|
||||||
# is printed when the server shuts down and the
|
|
||||||
# computer is loaded.
|
|
||||||
/Forcing close of thread \d+ user: '.*?'/ or
|
|
||||||
|
|
||||||
/Got error [0-9]* when reading table/ or
|
|
||||||
/Incorrect definition of table/ or
|
|
||||||
/Incorrect information in file/ or
|
|
||||||
/InnoDB: Warning: we did not need to do crash recovery/ or
|
|
||||||
/Invalid \(old\?\) table or database name/ or
|
|
||||||
/Lock wait timeout exceeded/ or
|
|
||||||
/Log entry on master is longer than max_allowed_packet/ or
|
|
||||||
/unknown option '--loose-/ or
|
|
||||||
/unknown variable 'loose-/ or
|
|
||||||
/You have forced lower_case_table_names to 0 through a command-line option/ or
|
|
||||||
/Setting lower_case_table_names=2/ or
|
|
||||||
/NDB Binlog:/ or
|
|
||||||
/NDB: failed to setup table/ or
|
|
||||||
/NDB: only row based binary logging/ or
|
|
||||||
/Neither --relay-log nor --relay-log-index were used/ or
|
|
||||||
/Query partially completed/ or
|
|
||||||
/Slave I.O thread aborted while waiting for relay log/ or
|
|
||||||
/Slave SQL thread is stopped because UNTIL condition/ or
|
|
||||||
/Slave SQL thread retried transaction/ or
|
|
||||||
/Slave \(additional info\)/ or
|
|
||||||
/Slave: .*Duplicate column name/ or
|
|
||||||
/Slave: .*master may suffer from/ or
|
|
||||||
/Slave: According to the master's version/ or
|
|
||||||
/Slave: Column [0-9]* type mismatch/ or
|
|
||||||
/Slave: Error .* doesn't exist/ or
|
|
||||||
/Slave: Error .*Deadlock found/ or
|
|
||||||
/Slave: Error .*Unknown table/ or
|
|
||||||
/Slave: Error in Write_rows event: / or
|
|
||||||
/Slave: Field .* of table .* has no default value/ or
|
|
||||||
/Slave: Field .* doesn't have a default value/ or
|
|
||||||
/Slave: Query caused different errors on master and slave/ or
|
|
||||||
/Slave: Table .* doesn't exist/ or
|
|
||||||
/Slave: Table width mismatch/ or
|
|
||||||
/Slave: The incident LOST_EVENTS occured on the master/ or
|
|
||||||
/Slave: Unknown error.* 1105/ or
|
|
||||||
/Slave: Can't drop database.* database doesn't exist/ or
|
|
||||||
/Slave SQL:.*(?:Error_code: \d+|Query:.*)/ or
|
|
||||||
/Sort aborted/ or
|
|
||||||
/Time-out in NDB/ or
|
|
||||||
/One can only use the --user.*root/ or
|
|
||||||
/Setting lower_case_table_names=2/ or
|
|
||||||
/Table:.* on (delete|rename)/ or
|
|
||||||
/You have an error in your SQL syntax/ or
|
|
||||||
/deprecated/ or
|
|
||||||
/description of time zone/ or
|
|
||||||
/equal MySQL server ids/ or
|
|
||||||
/error .*connecting to master/ or
|
|
||||||
/error reading log entry/ or
|
|
||||||
/lower_case_table_names is set/ or
|
|
||||||
/skip-name-resolve mode/ or
|
|
||||||
/slave SQL thread aborted/ or
|
|
||||||
/Slave: .*Duplicate entry/ or
|
|
||||||
# Special case for Bug #26402 in show_check.test
|
|
||||||
# Question marks are not valid file name parts
|
|
||||||
# on Windows platforms. Ignore this error message.
|
|
||||||
/\QCan't find file: '.\test\????????.frm'\E/ or
|
|
||||||
# Special case, made as specific as possible, for:
|
|
||||||
# Bug #28436: Incorrect position in SHOW BINLOG EVENTS causes
|
|
||||||
# server coredump
|
|
||||||
/\QError in Log_event::read_log_event(): 'Sanity check failed', data_len: 258, event_type: 49\E/ or
|
|
||||||
/Statement is not safe to log in statement format/ or
|
|
||||||
|
|
||||||
# test case for Bug#bug29807 copies a stray frm into database
|
|
||||||
/InnoDB: Error: table `test`.`bug29807` does not exist in the InnoDB internal/ or
|
|
||||||
/Cannot find or open table test\/bug29807 from/ or
|
|
||||||
|
|
||||||
# innodb foreign key tests that fail in ALTER or RENAME produce this
|
|
||||||
/InnoDB: Error: in ALTER TABLE `test`.`t[12]`/ or
|
|
||||||
/InnoDB: Error: in RENAME TABLE table `test`.`t1`/ or
|
|
||||||
/InnoDB: Error: table `test`.`t[12]` does not exist in the InnoDB internal/ or
|
|
||||||
|
|
||||||
# Test case for Bug#14233 produces the following warnings:
|
|
||||||
/Stored routine 'test'.'bug14233_1': invalid value in column mysql.proc/ or
|
|
||||||
/Stored routine 'test'.'bug14233_2': invalid value in column mysql.proc/ or
|
|
||||||
/Stored routine 'test'.'bug14233_3': invalid value in column mysql.proc/ or
|
|
||||||
|
|
||||||
# BUG#29839 - lowercase_table3.test: Cannot find table test/T1
|
|
||||||
# from the internal data dictiona
|
|
||||||
/Cannot find table test\/BUG29839 from the internal data dictionary/ or
|
|
||||||
# BUG#32080 - Excessive warnings on Solaris: setrlimit could not
|
|
||||||
# change the size of core files
|
|
||||||
/setrlimit could not change the size of core files to 'infinity'/ or
|
|
||||||
|
|
||||||
# rpl_extrColmaster_*.test, the slave thread produces warnings
|
|
||||||
# when it get updates to a table that has more columns on the
|
|
||||||
# master
|
|
||||||
/Slave: Unknown column 'c7' in 't15' Error_code: 1054/ or
|
|
||||||
/Slave: Can't DROP 'c7'.* 1091/ or
|
|
||||||
/Slave: Key column 'c6'.* 1072/ or
|
|
||||||
|
|
||||||
# rpl_idempotency.test produces warnings for the slave.
|
|
||||||
($testname eq 'rpl.rpl_idempotency' and
|
|
||||||
(/Slave: Can\'t find record in \'t1\' Error_code: 1032/ or
|
|
||||||
/Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452/
|
|
||||||
)) or
|
|
||||||
|
|
||||||
# These tests does "kill" on queries, causing sporadic errors when writing to logs
|
|
||||||
(($testname eq 'rpl.rpl_skip_error' or
|
|
||||||
$testname eq 'rpl.rpl_err_ignoredtable' or
|
|
||||||
$testname eq 'binlog.binlog_killed_simulate' or
|
|
||||||
$testname eq 'binlog.binlog_killed') and
|
|
||||||
(/Failed to write to mysql\.\w+_log/
|
|
||||||
)) or
|
|
||||||
|
|
||||||
# rpl_bug33931 has deliberate failures
|
|
||||||
($testname eq 'rpl.rpl_bug33931' and
|
|
||||||
(/Failed during slave.*thread initialization/
|
|
||||||
)) or
|
|
||||||
|
|
||||||
# rpl_temporary has an error on slave that can be ignored
|
|
||||||
($testname eq 'rpl.rpl_temporary' and
|
|
||||||
(/Slave: Can\'t find record in \'user\' Error_code: 1032/
|
|
||||||
)) or
|
|
||||||
|
|
||||||
# Test case for Bug#31590 produces the following error:
|
|
||||||
/Out of sort memory; increase server sort buffer size/
|
|
||||||
)
|
|
||||||
{
|
|
||||||
next; # Skip these lines
|
|
||||||
}
|
|
||||||
if ( /CURRENT_TEST: (.*)/ )
|
|
||||||
{
|
|
||||||
$testname= $1;
|
|
||||||
}
|
|
||||||
if ( /$pattern/ )
|
|
||||||
{
|
|
||||||
if ($leak_reports_expected) {
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
$found_problems= 1;
|
|
||||||
print WARN basename($errlog) . ": $testname: $_";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $::opt_check_testcases )
|
|
||||||
{
|
|
||||||
# Look for warnings produced by mysqltest in testname.warnings
|
|
||||||
foreach my $test_warning_file
|
|
||||||
( glob("$::glob_mysql_test_dir/r/*.warnings") )
|
|
||||||
{
|
|
||||||
$found_problems= 1;
|
|
||||||
print WARN "Check myqltest warnings in $test_warning_file\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $found_problems )
|
|
||||||
{
|
|
||||||
mtr_warning("Got errors/warnings while running tests, please examine",
|
|
||||||
"\"$warnlog\" for details.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print "\n";
|
print "\n";
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
# See the "MySQL Test framework manual" for more information
|
# See the "MySQL Test framework manual" for more information
|
||||||
# http://dev.mysql.com/doc/mysqltest/en/index.html
|
# http://dev.mysql.com/doc/mysqltest/en/index.html
|
||||||
#
|
#
|
||||||
# Please keep the test framework tools identical in all versions!
|
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
@ -51,11 +50,11 @@ use My::Options;
|
|||||||
use My::Find;
|
use My::Find;
|
||||||
use mtr_cases;
|
use mtr_cases;
|
||||||
use mtr_report;
|
use mtr_report;
|
||||||
|
use mtr_match;
|
||||||
|
|
||||||
require "lib/mtr_process.pl";
|
require "lib/mtr_process.pl";
|
||||||
require "lib/mtr_io.pl";
|
require "lib/mtr_io.pl";
|
||||||
require "lib/mtr_gcov.pl";
|
require "lib/mtr_gcov.pl";
|
||||||
require "lib/mtr_match.pl";
|
|
||||||
require "lib/mtr_misc.pl";
|
require "lib/mtr_misc.pl";
|
||||||
require "lib/mtr_unique.pl";
|
require "lib/mtr_unique.pl";
|
||||||
|
|
||||||
@ -330,7 +329,7 @@ sub command_line_setup {
|
|||||||
|
|
||||||
# Test case authoring
|
# Test case authoring
|
||||||
'record' => \$opt_record,
|
'record' => \$opt_record,
|
||||||
'check-testcases' => \$opt_check_testcases,
|
'check-testcases!' => \$opt_check_testcases,
|
||||||
'mark-progress' => \$opt_mark_progress,
|
'mark-progress' => \$opt_mark_progress,
|
||||||
|
|
||||||
# Extra options used when starting mysqld
|
# Extra options used when starting mysqld
|
||||||
@ -1984,17 +1983,48 @@ sub initialize_servers {
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copy the reference database into selected datadir
|
# Remove all newline characters expect after semicolon
|
||||||
#
|
#
|
||||||
sub copy_install_db ($) {
|
sub sql_to_bootstrap {
|
||||||
my $path_data_dir= shift;
|
my ($sql) = @_;
|
||||||
|
my @lines= split(/\n/, $sql);
|
||||||
|
my $result= "\n";
|
||||||
|
my $delimiter= ';';
|
||||||
|
|
||||||
# Don't install over another db
|
foreach my $line (@lines) {
|
||||||
mtr_error("There is already an installed db in '$path_data_dir'")
|
|
||||||
if -d $path_data_dir;
|
|
||||||
|
|
||||||
# copy the installed db into place
|
# Change current delimiter if line starts with "delimiter"
|
||||||
copytree("$opt_vardir/install.db", $path_data_dir);
|
if ( $line =~ /^delimiter (.*)/ ) {
|
||||||
|
my $new= $1;
|
||||||
|
# Remove old delimiter from end of new
|
||||||
|
$new=~ s/\Q$delimiter\E$//;
|
||||||
|
$delimiter = $new;
|
||||||
|
mtr_debug("changed delimiter to $delimiter");
|
||||||
|
# No need to add the delimiter to result
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add newline if line ends with $delimiter
|
||||||
|
# and convert the current delimiter to semicolon
|
||||||
|
if ( $line =~ /\Q$delimiter\E$/ ){
|
||||||
|
$line =~ s/\Q$delimiter\E$/;/;
|
||||||
|
$result.= "$line\n";
|
||||||
|
mtr_debug("Added default delimiter");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove comments starting with --
|
||||||
|
if ( $line =~ /^\s*--/ ) {
|
||||||
|
mtr_debug("Discarded $line");
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default, just add the line without newline
|
||||||
|
# but with a space as separator
|
||||||
|
$result.= "$line ";
|
||||||
|
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2073,6 +2103,10 @@ sub mysql_install_db {
|
|||||||
mtr_tofile($bootstrap_sql_file,
|
mtr_tofile($bootstrap_sql_file,
|
||||||
"CREATE DATABASE mtr;\n");
|
"CREATE DATABASE mtr;\n");
|
||||||
|
|
||||||
|
# Add help tables and data for warning detection and supression
|
||||||
|
mtr_tofile($bootstrap_sql_file,
|
||||||
|
sql_to_bootstrap(mtr_grab_file("include/mtr_warnings.sql")));
|
||||||
|
|
||||||
# Log bootstrap command
|
# Log bootstrap command
|
||||||
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
|
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
|
||||||
mtr_tofile($path_bootstrap_log,
|
mtr_tofile($path_bootstrap_log,
|
||||||
@ -2169,11 +2203,12 @@ sub do_before_run_mysqltest($)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub run_check_testcase_all($$)
|
sub check_testcase($$)
|
||||||
{
|
{
|
||||||
my ($tinfo, $mode)= @_;
|
my ($tinfo, $mode)= @_;
|
||||||
my $result;
|
my $result;
|
||||||
|
|
||||||
|
# Parallell( mysqlds(), run_check_testcase, check_testcase_failed );
|
||||||
foreach my $mysqld ( mysqlds() )
|
foreach my $mysqld ( mysqlds() )
|
||||||
{
|
{
|
||||||
if ( defined $mysqld->{'proc'} )
|
if ( defined $mysqld->{'proc'} )
|
||||||
@ -2352,7 +2387,7 @@ sub run_testcase ($) {
|
|||||||
|
|
||||||
if ( $opt_check_testcases )
|
if ( $opt_check_testcases )
|
||||||
{
|
{
|
||||||
run_check_testcase_all($tinfo, "before")
|
check_testcase($tinfo, "before")
|
||||||
}
|
}
|
||||||
|
|
||||||
my $test= start_mysqltest($tinfo);
|
my $test= start_mysqltest($tinfo);
|
||||||
@ -2380,11 +2415,20 @@ sub run_testcase ($) {
|
|||||||
|
|
||||||
if ( $res == 0 )
|
if ( $res == 0 )
|
||||||
{
|
{
|
||||||
mtr_report_test_passed($tinfo, $opt_timer);
|
if ( $opt_warnings and check_warnings($tinfo) )
|
||||||
|
{
|
||||||
|
# Found unexpected warnings
|
||||||
|
report_failure_and_restart($tinfo);
|
||||||
|
$res= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mtr_report_test_passed($tinfo, $opt_timer);
|
||||||
|
}
|
||||||
|
|
||||||
if ( $opt_check_testcases )
|
if ( $opt_check_testcases )
|
||||||
{
|
{
|
||||||
if (run_check_testcase_all($tinfo, "after"))
|
if (check_testcase($tinfo, "after"))
|
||||||
{
|
{
|
||||||
# Stop all servers that are known to be running
|
# Stop all servers that are known to be running
|
||||||
stop_all_servers();
|
stop_all_servers();
|
||||||
@ -2484,6 +2528,93 @@ sub run_testcase ($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Run include/check-warnings.test
|
||||||
|
#
|
||||||
|
# RETURN VALUE
|
||||||
|
# 0 OK
|
||||||
|
# 1 Check failed
|
||||||
|
#
|
||||||
|
sub run_check_warnings ($$) {
|
||||||
|
my $tinfo= shift;
|
||||||
|
my $mysqld= shift;
|
||||||
|
|
||||||
|
my $name= "warnings-".$mysqld->name();
|
||||||
|
my $tname= $tinfo->{name};
|
||||||
|
|
||||||
|
my $args;
|
||||||
|
mtr_init_args(\$args);
|
||||||
|
|
||||||
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||||
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
||||||
|
|
||||||
|
mtr_add_arg($args, "--silent");
|
||||||
|
mtr_add_arg($args, "--skip-safemalloc");
|
||||||
|
mtr_add_arg($args, "--test-file=%s", "include/check-warnings.test");
|
||||||
|
|
||||||
|
my $errfile= "$opt_vardir/tmp/$name.err";
|
||||||
|
my $res= My::SafeProcess->run
|
||||||
|
(
|
||||||
|
name => $name,
|
||||||
|
path => $exe_mysqltest,
|
||||||
|
error => $errfile,
|
||||||
|
output => $errfile,
|
||||||
|
args => \$args,
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( $res == 0 )
|
||||||
|
{
|
||||||
|
my $report= mtr_grab_file($errfile);
|
||||||
|
if ($report ne "OK\nOK\n")
|
||||||
|
{
|
||||||
|
# Log to var/log/warnings file
|
||||||
|
mtr_tofile("$opt_vardir/log/warnings",
|
||||||
|
$tname."\n",
|
||||||
|
$report);
|
||||||
|
|
||||||
|
$res= 1;
|
||||||
|
$tinfo->{'warnings'}.= $report;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif ( $res == 62 )
|
||||||
|
{
|
||||||
|
# One of the features needed to run check_warnings.test was not
|
||||||
|
# available, check skipped
|
||||||
|
$res= 0;
|
||||||
|
}
|
||||||
|
elsif ( $res )
|
||||||
|
{
|
||||||
|
mtr_report("\nCould not execute 'check-warnings' for testcase '$tname':");
|
||||||
|
mtr_printfile($errfile);
|
||||||
|
$res= 0; # Ignore error
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Loop through our list of processes and check the error log
|
||||||
|
# for unexepcted errors and warnings
|
||||||
|
#
|
||||||
|
sub check_warnings ($) {
|
||||||
|
my ($tinfo)= @_;
|
||||||
|
my $res= 0;
|
||||||
|
|
||||||
|
# Clear previous warnings
|
||||||
|
$tinfo->{warnings}= undef;
|
||||||
|
|
||||||
|
# Parallell( mysqlds(), run_check_warning, check_warning_failed);
|
||||||
|
foreach my $mysqld ( mysqlds() )
|
||||||
|
{
|
||||||
|
if (run_check_warnings($tinfo, $mysqld)){
|
||||||
|
$res= 1;
|
||||||
|
mtr_report();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Loop through our list of processes and look for and entry
|
# Loop through our list of processes and look for and entry
|
||||||
# with the provided pid, if found check for the file indicating
|
# with the provided pid, if found check for the file indicating
|
||||||
@ -2568,6 +2699,11 @@ sub after_test_failure ($) {
|
|||||||
mtr_debug("Removing '$backup_dir'");
|
mtr_debug("Removing '$backup_dir'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Remove all files in var/tmp
|
||||||
|
rmtree($opt_tmpdir);
|
||||||
|
mkpath($opt_tmpdir);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3064,7 +3200,8 @@ sub start_servers($) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Copy datadir from installed system db
|
# Copy datadir from installed system db
|
||||||
copy_install_db($datadir) unless -d $datadir;
|
copytree("$opt_vardir/install.db", $datadir)
|
||||||
|
unless -d $datadir;
|
||||||
|
|
||||||
# Write start of testcase to log file
|
# Write start of testcase to log file
|
||||||
mark_log($mysqld->value('log-error'), $tinfo);
|
mark_log($mysqld->value('log-error'), $tinfo);
|
||||||
@ -3144,17 +3281,11 @@ sub run_check_testcase ($$$) {
|
|||||||
my $args;
|
my $args;
|
||||||
mtr_init_args(\$args);
|
mtr_init_args(\$args);
|
||||||
|
|
||||||
mtr_add_arg($args, "--no-defaults");
|
mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
|
||||||
|
mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld'));
|
||||||
|
|
||||||
mtr_add_arg($args, "--silent");
|
mtr_add_arg($args, "--silent");
|
||||||
mtr_add_arg($args, "--skip-safemalloc");
|
mtr_add_arg($args, "--skip-safemalloc");
|
||||||
mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir);
|
|
||||||
mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir);
|
|
||||||
|
|
||||||
mtr_add_arg($args, "--socket=%s", $mysqld->value('socket'));
|
|
||||||
mtr_add_arg($args, "--port=%d", $mysqld->value('port'));
|
|
||||||
mtr_add_arg($args, "--database=test");
|
|
||||||
mtr_add_arg($args, "--user=%s", $opt_user);
|
|
||||||
mtr_add_arg($args, "--password=");
|
|
||||||
|
|
||||||
mtr_add_arg($args, "--result-file=%s", "$opt_vardir/tmp/$name.result");
|
mtr_add_arg($args, "--result-file=%s", "$opt_vardir/tmp/$name.result");
|
||||||
mtr_add_arg($args, "--test-file=%s", "include/check-testcase.test");
|
mtr_add_arg($args, "--test-file=%s", "include/check-testcase.test");
|
||||||
@ -3177,12 +3308,12 @@ sub run_check_testcase ($$$) {
|
|||||||
mtr_report("\nThe check of testcase '$tname' failed, this is the\n",
|
mtr_report("\nThe check of testcase '$tname' failed, this is the\n",
|
||||||
"diff between before and after:\n");
|
"diff between before and after:\n");
|
||||||
# Test failed, display the report mysqltest has created
|
# Test failed, display the report mysqltest has created
|
||||||
mtr_printfile("$opt_vardir/tmp/$name.err");
|
mtr_printfile($errfile);
|
||||||
}
|
}
|
||||||
elsif ( $res )
|
elsif ( $res )
|
||||||
{
|
{
|
||||||
mtr_report("\nCould not execute 'check-testcase' $mode testcase '$tname':");
|
mtr_report("\nCould not execute 'check-testcase' $mode testcase '$tname':");
|
||||||
mtr_printfile("$opt_vardir/tmp/$name.err");
|
mtr_printfile($errfile);
|
||||||
mtr_report();
|
mtr_report();
|
||||||
}
|
}
|
||||||
return $res;
|
return $res;
|
||||||
|
@ -36,7 +36,11 @@ create table t3(a int, KEY a_data (a));
|
|||||||
create table mysqltest.t4(a int);
|
create table mysqltest.t4(a int);
|
||||||
create table t5 (id int auto_increment primary key);
|
create table t5 (id int auto_increment primary key);
|
||||||
insert into t5 values (10);
|
insert into t5 values (10);
|
||||||
create view v1 (c) as select table_name from information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status';
|
create view v1 (c) as
|
||||||
|
SELECT table_name FROM information_schema.TABLES
|
||||||
|
WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND
|
||||||
|
table_name<>'ndb_binlog_index' AND
|
||||||
|
table_name<>'ndb_apply_status';
|
||||||
select * from v1;
|
select * from v1;
|
||||||
c
|
c
|
||||||
CHARACTER_SETS
|
CHARACTER_SETS
|
||||||
@ -272,19 +276,19 @@ select * from t1;
|
|||||||
select * from t2;
|
select * from t2;
|
||||||
end|
|
end|
|
||||||
select parameter_style, sql_data_access, dtd_identifier
|
select parameter_style, sql_data_access, dtd_identifier
|
||||||
from information_schema.routines;
|
from information_schema.routines where routine_schema='test';
|
||||||
parameter_style sql_data_access dtd_identifier
|
parameter_style sql_data_access dtd_identifier
|
||||||
SQL CONTAINS SQL NULL
|
SQL CONTAINS SQL NULL
|
||||||
SQL CONTAINS SQL int(11)
|
SQL CONTAINS SQL int(11)
|
||||||
show procedure status;
|
show procedure status where db='test';
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
test sel2 PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
test sel2 PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
show function status;
|
show function status where db='test';
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
test sub1 FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
test sub1 FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||||
information_schema.SCHEMATA b where
|
information_schema.SCHEMATA b where
|
||||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test';
|
||||||
ROUTINE_NAME
|
ROUTINE_NAME
|
||||||
sel2
|
sel2
|
||||||
sub1
|
sub1
|
||||||
@ -295,14 +299,14 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE # ALL NULL NULL NULL NULL NULL
|
1 SIMPLE # ALL NULL NULL NULL NULL NULL
|
||||||
1 SIMPLE # ALL NULL NULL NULL NULL NULL Using where; Using join buffer
|
1 SIMPLE # ALL NULL NULL NULL NULL NULL Using where; Using join buffer
|
||||||
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
||||||
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) order by 1;
|
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) AND a.ROUTINE_SCHEMA='test' order by 1;
|
||||||
ROUTINE_NAME name
|
ROUTINE_NAME name
|
||||||
sel2 sel2
|
sel2 sel2
|
||||||
sub1 sub1
|
sub1 sub1
|
||||||
select count(*) from information_schema.ROUTINES;
|
select count(*) from information_schema.ROUTINES where routine_schema='test';
|
||||||
count(*)
|
count(*)
|
||||||
2
|
2
|
||||||
create view v1 as select routine_schema, routine_name from information_schema.routines
|
create view v1 as select routine_schema, routine_name from information_schema.routines where routine_schema='test'
|
||||||
order by routine_schema, routine_name;
|
order by routine_schema, routine_name;
|
||||||
select * from v1;
|
select * from v1;
|
||||||
routine_schema routine_name
|
routine_schema routine_name
|
||||||
@ -850,7 +854,7 @@ VIEWS TABLE_NAME select
|
|||||||
delete from mysql.user where user='mysqltest_4';
|
delete from mysql.user where user='mysqltest_4';
|
||||||
delete from mysql.db where user='mysqltest_4';
|
delete from mysql.db where user='mysqltest_4';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
SELECT table_schema, count(*) FROM information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
|
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
|
||||||
table_schema count(*)
|
table_schema count(*)
|
||||||
information_schema 28
|
information_schema 28
|
||||||
mysql 22
|
mysql 22
|
||||||
@ -890,7 +894,7 @@ if new.j = -1 then
|
|||||||
set @fired:= "Yes";
|
set @fired:= "Yes";
|
||||||
end if;
|
end if;
|
||||||
end AFTER NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
end AFTER NULL root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
select * from information_schema.triggers;
|
select * from information_schema.triggers where trigger_schema in ('mysql', 'information_schema', 'test', 'mysqltest');
|
||||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
||||||
NULL test trg1 INSERT NULL test t1 0 NULL begin
|
NULL test trg1 INSERT NULL test t1 0 NULL begin
|
||||||
if new.j > 10 then
|
if new.j > 10 then
|
||||||
@ -1079,7 +1083,7 @@ BEGIN
|
|||||||
SELECT 'foo' FROM DUAL;
|
SELECT 'foo' FROM DUAL;
|
||||||
END |
|
END |
|
||||||
ERROR 42000: Unknown database 'information_schema'
|
ERROR 42000: Unknown database 'information_schema'
|
||||||
select ROUTINE_NAME from routines;
|
select ROUTINE_NAME from routines where ROUTINE_SCHEMA='information_schema';
|
||||||
ROUTINE_NAME
|
ROUTINE_NAME
|
||||||
grant all on information_schema.* to 'user1'@'localhost';
|
grant all on information_schema.* to 'user1'@'localhost';
|
||||||
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
||||||
@ -1161,7 +1165,7 @@ use mysql;
|
|||||||
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
|
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
|
||||||
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
|
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
|
||||||
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
|
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
|
||||||
select routine_name from information_schema.routines;
|
select routine_name from information_schema.routines where ROUTINE_SCHEMA='test';
|
||||||
routine_name
|
routine_name
|
||||||
|
|
||||||
delete from proc where name='';
|
delete from proc where name='';
|
||||||
@ -1195,7 +1199,7 @@ CREATE FUNCTION f1() RETURNS INT RETURN @a + 1;
|
|||||||
CREATE USER mysql_bug20230@localhost;
|
CREATE USER mysql_bug20230@localhost;
|
||||||
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
|
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
|
||||||
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
|
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
|
||||||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
|
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||||||
ROUTINE_NAME ROUTINE_DEFINITION
|
ROUTINE_NAME ROUTINE_DEFINITION
|
||||||
f1 RETURN @a + 1
|
f1 RETURN @a + 1
|
||||||
p1 SET @a= 1
|
p1 SET @a= 1
|
||||||
@ -1207,7 +1211,7 @@ SHOW CREATE FUNCTION f1;
|
|||||||
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||||||
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
|
||||||
RETURN @a + 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
RETURN @a + 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
|
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||||||
ROUTINE_NAME ROUTINE_DEFINITION
|
ROUTINE_NAME ROUTINE_DEFINITION
|
||||||
f1 NULL
|
f1 NULL
|
||||||
p1 NULL
|
p1 NULL
|
||||||
@ -1310,12 +1314,12 @@ TABLE_PRIVILEGES TABLE_SCHEMA
|
|||||||
TRIGGERS TRIGGER_SCHEMA
|
TRIGGERS TRIGGER_SCHEMA
|
||||||
USER_PRIVILEGES GRANTEE
|
USER_PRIVILEGES GRANTEE
|
||||||
VIEWS TABLE_SCHEMA
|
VIEWS TABLE_SCHEMA
|
||||||
SELECT MAX(table_name) FROM information_schema.tables;
|
SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
|
||||||
MAX(table_name)
|
MAX(table_name)
|
||||||
VIEWS
|
VIEWS
|
||||||
SELECT table_name from information_schema.tables
|
SELECT table_name from information_schema.tables
|
||||||
WHERE table_name=(SELECT MAX(table_name)
|
WHERE table_name=(SELECT MAX(table_name)
|
||||||
FROM information_schema.tables);
|
FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
|
||||||
table_name
|
table_name
|
||||||
VIEWS
|
VIEWS
|
||||||
DROP TABLE IF EXISTS bug23037;
|
DROP TABLE IF EXISTS bug23037;
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
Run mysql_upgrade once
|
Run mysql_upgrade once
|
||||||
|
mtr.global_supressions OK
|
||||||
|
mtr.suspicious_patterns OK
|
||||||
|
mtr.test_supressions OK
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
@ -29,6 +32,9 @@ mysql.user OK
|
|||||||
Run it again - should say already completed
|
Run it again - should say already completed
|
||||||
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
|
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
|
||||||
Force should run it regardless of wether it's been run before
|
Force should run it regardless of wether it's been run before
|
||||||
|
mtr.global_supressions OK
|
||||||
|
mtr.suspicious_patterns OK
|
||||||
|
mtr.test_supressions OK
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
@ -59,6 +65,9 @@ mysql.user OK
|
|||||||
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
|
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
|
||||||
GRANT ALL ON *.* TO mysqltest1@'%';
|
GRANT ALL ON *.* TO mysqltest1@'%';
|
||||||
Run mysql_upgrade with password protected account
|
Run mysql_upgrade with password protected account
|
||||||
|
mtr.global_supressions OK
|
||||||
|
mtr.suspicious_patterns OK
|
||||||
|
mtr.test_supressions OK
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
@ -91,6 +100,9 @@ Run mysql_upgrade with a non existing server socket
|
|||||||
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
|
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
|
||||||
FATAL ERROR: Upgrade failed
|
FATAL ERROR: Upgrade failed
|
||||||
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
|
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
|
||||||
|
mtr.global_supressions OK
|
||||||
|
mtr.suspicious_patterns OK
|
||||||
|
mtr.test_supressions OK
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
DROP TABLE IF EXISTS t1, `t``1`, `t 1`;
|
DROP TABLE IF EXISTS t1, `t``1`, `t 1`;
|
||||||
drop view if exists v1;
|
drop view if exists v1;
|
||||||
drop database if exists client_test_db;
|
drop database if exists client_test_db;
|
||||||
|
mtr.global_supressions OK
|
||||||
|
mtr.suspicious_patterns OK
|
||||||
|
mtr.test_supressions OK
|
||||||
mysql.columns_priv OK
|
mysql.columns_priv OK
|
||||||
mysql.db OK
|
mysql.db OK
|
||||||
mysql.event OK
|
mysql.event OK
|
||||||
|
@ -84,7 +84,7 @@ drop table t1;
|
|||||||
drop function bug14233_1;
|
drop function bug14233_1;
|
||||||
drop function bug14233_2;
|
drop function bug14233_2;
|
||||||
drop procedure bug14233_3;
|
drop procedure bug14233_3;
|
||||||
show procedure status;
|
show procedure status where db=DATABASE();
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
show function status;
|
show function status where db=DATABASE();
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
|
SELECT * FROM mysql.proc INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/proc.txt';
|
||||||
delete from mysql.proc;
|
delete from mysql.proc;
|
||||||
create procedure syntaxerror(t int)|
|
create procedure syntaxerror(t int)|
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
|
||||||
@ -1650,3 +1651,4 @@ begin
|
|||||||
declare continue handler for sqlstate '00000' set @x=0;
|
declare continue handler for sqlstate '00000' set @x=0;
|
||||||
end$$
|
end$$
|
||||||
ERROR 42000: Bad SQLSTATE: '00000'
|
ERROR 42000: Bad SQLSTATE: '00000'
|
||||||
|
LOAD DATA INFILE '../../tmp/proc.txt' INTO TABLE mysql.proc;
|
||||||
|
@ -142,13 +142,13 @@ use db2;
|
|||||||
alter procedure q modifies sql data;
|
alter procedure q modifies sql data;
|
||||||
drop procedure q;
|
drop procedure q;
|
||||||
use test;
|
use test;
|
||||||
select type,db,name from mysql.proc;
|
select type,db,name from mysql.proc where db like 'db%';
|
||||||
type db name
|
type db name
|
||||||
FUNCTION db1_secret db
|
FUNCTION db1_secret db
|
||||||
PROCEDURE db1_secret stamp
|
PROCEDURE db1_secret stamp
|
||||||
drop database db1_secret;
|
drop database db1_secret;
|
||||||
drop database db2;
|
drop database db2;
|
||||||
select type,db,name from mysql.proc;
|
select type,db,name from mysql.proc where db like 'db%';
|
||||||
type db name
|
type db name
|
||||||
delete from mysql.user where user='user1' or user='user2';
|
delete from mysql.user where user='user1' or user='user2';
|
||||||
delete from mysql.user where user='' and host='%';
|
delete from mysql.user where user='' and host='%';
|
||||||
|
@ -1322,7 +1322,7 @@ end;
|
|||||||
end if;
|
end if;
|
||||||
end loop;
|
end loop;
|
||||||
end latin1 latin1_swedish_ci latin1_swedish_ci
|
end latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
show procedure status like '%p%'|
|
show procedure status where name like '%p%' and db='test'|
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
test ip PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
test ip PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
test opp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
test opp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
@ -1335,7 +1335,7 @@ i p
|
|||||||
drop table t3|
|
drop table t3|
|
||||||
drop procedure opp|
|
drop procedure opp|
|
||||||
drop procedure ip|
|
drop procedure ip|
|
||||||
show procedure status like '%p%'|
|
show procedure status where name like '%p%' and db='test'|
|
||||||
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
|
||||||
drop table if exists t3|
|
drop table if exists t3|
|
||||||
create table t3 ( f bigint unsigned not null )|
|
create table t3 ( f bigint unsigned not null )|
|
||||||
@ -1945,12 +1945,12 @@ drop procedure bug2260|
|
|||||||
drop procedure if exists bug2267_1|
|
drop procedure if exists bug2267_1|
|
||||||
create procedure bug2267_1()
|
create procedure bug2267_1()
|
||||||
begin
|
begin
|
||||||
show procedure status;
|
show procedure status where db='test';
|
||||||
end|
|
end|
|
||||||
drop procedure if exists bug2267_2|
|
drop procedure if exists bug2267_2|
|
||||||
create procedure bug2267_2()
|
create procedure bug2267_2()
|
||||||
begin
|
begin
|
||||||
show function status;
|
show function status where db='test';
|
||||||
end|
|
end|
|
||||||
drop procedure if exists bug2267_3|
|
drop procedure if exists bug2267_3|
|
||||||
create procedure bug2267_3()
|
create procedure bug2267_3()
|
||||||
@ -1977,7 +1977,7 @@ call bug2267_3()|
|
|||||||
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
|
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
|
||||||
bug2267_1 CREATE DEFINER=`root`@`localhost` PROCEDURE `bug2267_1`()
|
bug2267_1 CREATE DEFINER=`root`@`localhost` PROCEDURE `bug2267_1`()
|
||||||
begin
|
begin
|
||||||
show procedure status;
|
show procedure status where db='test';
|
||||||
end latin1 latin1_swedish_ci latin1_swedish_ci
|
end latin1 latin1_swedish_ci latin1_swedish_ci
|
||||||
call bug2267_4()|
|
call bug2267_4()|
|
||||||
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
reset master;
|
reset master;
|
||||||
|
call mtr.add_supression("Failed during slave.*thread initialization");
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
|
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Slave_IO_State #
|
Slave_IO_State #
|
||||||
|
@ -4,6 +4,8 @@ reset master;
|
|||||||
reset slave;
|
reset slave;
|
||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
|
call mtr.add_supression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
|
||||||
|
call mtr.add_supression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
CREATE TABLE t2 (a INT);
|
CREATE TABLE t2 (a INT);
|
||||||
INSERT INTO t1 VALUES (-1),(-2),(-3);
|
INSERT INTO t1 VALUES (-1),(-2),(-3);
|
||||||
|
@ -1 +0,0 @@
|
|||||||
--loose-debug=d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init
|
|
@ -13,10 +13,18 @@ connection master;
|
|||||||
reset master;
|
reset master;
|
||||||
|
|
||||||
connection slave;
|
connection slave;
|
||||||
|
|
||||||
|
# Add supression for expected warnings in slaves error log
|
||||||
|
call mtr.add_supression("Failed during slave.*thread initialization");
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
stop slave;
|
stop slave;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
reset slave;
|
reset slave;
|
||||||
|
|
||||||
|
# Set debug flags on slave to force errors to occur
|
||||||
|
SET GLOBAL debug="d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
||||||
|
|
||||||
start slave;
|
start slave;
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
|
@ -7,6 +7,10 @@ source include/have_innodb.inc;
|
|||||||
connection slave;
|
connection slave;
|
||||||
source include/have_innodb.inc;
|
source include/have_innodb.inc;
|
||||||
|
|
||||||
|
# Add supression for expected warning(s) in slaves error log
|
||||||
|
call mtr.add_supression("Slave: Can\'t find record in \'t1\' Error_code: 1032");
|
||||||
|
call mtr.add_supression("Slave: Cannot add or update a child row: a foreign key constraint fails .* Error_code: 1452");
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||||
CREATE TABLE t2 (a INT);
|
CREATE TABLE t2 (a INT);
|
||||||
@ -393,15 +397,13 @@ sync_slave_with_master;
|
|||||||
#connection slave;
|
#connection slave;
|
||||||
set global slave_exec_mode='STRICT';
|
set global slave_exec_mode='STRICT';
|
||||||
|
|
||||||
|
|
||||||
# cleanup for bug#31609 tests
|
# cleanup for bug#31609 tests
|
||||||
|
|
||||||
connection master;
|
connection master;
|
||||||
set @@session.binlog_format= @save_binlog_format;
|
set @@session.binlog_format= @save_binlog_format;
|
||||||
drop table t1,t2,ti2,ti1;
|
drop table t1,t2,ti2,ti1;
|
||||||
|
|
||||||
sync_slave_with_master;
|
--source include/master-slave-end.inc
|
||||||
|
|
||||||
|
|
||||||
--echo *** end of tests
|
--echo *** end of tests
|
||||||
|
|
||||||
|
@ -37,7 +37,11 @@ create table t3(a int, KEY a_data (a));
|
|||||||
create table mysqltest.t4(a int);
|
create table mysqltest.t4(a int);
|
||||||
create table t5 (id int auto_increment primary key);
|
create table t5 (id int auto_increment primary key);
|
||||||
insert into t5 values (10);
|
insert into t5 values (10);
|
||||||
create view v1 (c) as select table_name from information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status';
|
create view v1 (c) as
|
||||||
|
SELECT table_name FROM information_schema.TABLES
|
||||||
|
WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND
|
||||||
|
table_name<>'ndb_binlog_index' AND
|
||||||
|
table_name<>'ndb_apply_status';
|
||||||
select * from v1;
|
select * from v1;
|
||||||
|
|
||||||
select c,table_name from v1
|
select c,table_name from v1
|
||||||
@ -133,25 +137,25 @@ delimiter ;|
|
|||||||
# Bug#7222 information_schema: errors in "routines"
|
# Bug#7222 information_schema: errors in "routines"
|
||||||
#
|
#
|
||||||
select parameter_style, sql_data_access, dtd_identifier
|
select parameter_style, sql_data_access, dtd_identifier
|
||||||
from information_schema.routines;
|
from information_schema.routines where routine_schema='test';
|
||||||
|
|
||||||
--replace_column 5 # 6 #
|
--replace_column 5 # 6 #
|
||||||
show procedure status;
|
show procedure status where db='test';
|
||||||
--replace_column 5 # 6 #
|
--replace_column 5 # 6 #
|
||||||
show function status;
|
show function status where db='test';
|
||||||
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||||
information_schema.SCHEMATA b where
|
information_schema.SCHEMATA b where
|
||||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
a.ROUTINE_SCHEMA = b.SCHEMA_NAME AND b.SCHEMA_NAME='test';
|
||||||
--replace_column 3 #
|
--replace_column 3 #
|
||||||
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||||
information_schema.SCHEMATA b where
|
information_schema.SCHEMATA b where
|
||||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||||||
|
|
||||||
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
||||||
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) order by 1;
|
mysql.proc b where a.ROUTINE_NAME = convert(b.name using utf8) AND a.ROUTINE_SCHEMA='test' order by 1;
|
||||||
select count(*) from information_schema.ROUTINES;
|
select count(*) from information_schema.ROUTINES where routine_schema='test';
|
||||||
|
|
||||||
create view v1 as select routine_schema, routine_name from information_schema.routines
|
create view v1 as select routine_schema, routine_name from information_schema.routines where routine_schema='test'
|
||||||
order by routine_schema, routine_name;
|
order by routine_schema, routine_name;
|
||||||
select * from v1;
|
select * from v1;
|
||||||
drop view v1;
|
drop view v1;
|
||||||
@ -528,7 +532,7 @@ flush privileges;
|
|||||||
# Bug #9404 information_schema: Weird error messages
|
# Bug #9404 information_schema: Weird error messages
|
||||||
# with SELECT SUM() ... GROUP BY queries
|
# with SELECT SUM() ... GROUP BY queries
|
||||||
#
|
#
|
||||||
SELECT table_schema, count(*) FROM information_schema.TABLES where table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
|
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -557,7 +561,7 @@ begin
|
|||||||
end|
|
end|
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
show triggers;
|
show triggers;
|
||||||
select * from information_schema.triggers;
|
select * from information_schema.triggers where trigger_schema in ('mysql', 'information_schema', 'test', 'mysqltest');
|
||||||
|
|
||||||
drop trigger trg1;
|
drop trigger trg1;
|
||||||
drop trigger trg2;
|
drop trigger trg2;
|
||||||
@ -727,7 +731,7 @@ BEGIN
|
|||||||
SELECT 'foo' FROM DUAL;
|
SELECT 'foo' FROM DUAL;
|
||||||
END |
|
END |
|
||||||
delimiter ;|
|
delimiter ;|
|
||||||
select ROUTINE_NAME from routines;
|
select ROUTINE_NAME from routines where ROUTINE_SCHEMA='information_schema';
|
||||||
#
|
#
|
||||||
# Bug #10734 Grant of privileges other than 'select' and 'create view' should fail on schema
|
# Bug #10734 Grant of privileges other than 'select' and 'create view' should fail on schema
|
||||||
#
|
#
|
||||||
@ -827,7 +831,7 @@ use mysql;
|
|||||||
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
|
INSERT INTO `proc` VALUES ('test','','PROCEDURE','','SQL','CONTAINS_SQL',
|
||||||
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
|
'NO','DEFINER','','','BEGIN\r\n \r\nEND','root@%','2006-03-02 18:40:03',
|
||||||
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
|
'2006-03-02 18:40:03','','','utf8','utf8_general_ci','utf8_general_ci','n/a');
|
||||||
select routine_name from information_schema.routines;
|
select routine_name from information_schema.routines where ROUTINE_SCHEMA='test';
|
||||||
delete from proc where name='';
|
delete from proc where name='';
|
||||||
use test;
|
use test;
|
||||||
|
|
||||||
@ -874,13 +878,13 @@ CREATE USER mysql_bug20230@localhost;
|
|||||||
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
|
GRANT EXECUTE ON PROCEDURE p1 TO mysql_bug20230@localhost;
|
||||||
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
|
GRANT EXECUTE ON FUNCTION f1 TO mysql_bug20230@localhost;
|
||||||
|
|
||||||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
|
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||||||
SHOW CREATE PROCEDURE p1;
|
SHOW CREATE PROCEDURE p1;
|
||||||
SHOW CREATE FUNCTION f1;
|
SHOW CREATE FUNCTION f1;
|
||||||
|
|
||||||
connect (conn1, localhost, mysql_bug20230,,);
|
connect (conn1, localhost, mysql_bug20230,,);
|
||||||
|
|
||||||
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES;
|
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='test';
|
||||||
SHOW CREATE PROCEDURE p1;
|
SHOW CREATE PROCEDURE p1;
|
||||||
SHOW CREATE FUNCTION f1;
|
SHOW CREATE FUNCTION f1;
|
||||||
CALL p1();
|
CALL p1();
|
||||||
@ -931,10 +935,10 @@ SELECT t.table_name, c1.column_name
|
|||||||
# INFORMARTION_SCHEMA.TABLES
|
# INFORMARTION_SCHEMA.TABLES
|
||||||
#
|
#
|
||||||
|
|
||||||
SELECT MAX(table_name) FROM information_schema.tables;
|
SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test');
|
||||||
SELECT table_name from information_schema.tables
|
SELECT table_name from information_schema.tables
|
||||||
WHERE table_name=(SELECT MAX(table_name)
|
WHERE table_name=(SELECT MAX(table_name)
|
||||||
FROM information_schema.tables);
|
FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'));
|
||||||
#
|
#
|
||||||
# Bug #23037: Bug in field "Default" of query "SHOW COLUMNS FROM table"
|
# Bug #23037: Bug in field "Default" of query "SHOW COLUMNS FROM table"
|
||||||
#
|
#
|
||||||
|
@ -153,5 +153,5 @@ drop function bug14233_1;
|
|||||||
drop function bug14233_2;
|
drop function bug14233_2;
|
||||||
drop procedure bug14233_3;
|
drop procedure bug14233_3;
|
||||||
# Assert: These should show nothing.
|
# Assert: These should show nothing.
|
||||||
show procedure status;
|
show procedure status where db=DATABASE();
|
||||||
show function status;
|
show function status where db=DATABASE();
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
drop table if exists t1, t2;
|
drop table if exists t1, t2;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
|
|
||||||
|
# Backup the mysql.proc table
|
||||||
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||||
|
eval SELECT * FROM mysql.proc INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/proc.txt';
|
||||||
|
|
||||||
# Make sure we don't have any procedures left.
|
# Make sure we don't have any procedures left.
|
||||||
delete from mysql.proc;
|
delete from mysql.proc;
|
||||||
|
|
||||||
@ -2421,3 +2425,9 @@ delimiter ;$$
|
|||||||
#--enable_warnings
|
#--enable_warnings
|
||||||
#create procedure bugNNNN...
|
#create procedure bugNNNN...
|
||||||
#create function bugNNNN...
|
#create function bugNNNN...
|
||||||
|
|
||||||
|
#
|
||||||
|
# CLEANUP and RESTORE
|
||||||
|
#
|
||||||
|
LOAD DATA INFILE '../../tmp/proc.txt' INTO TABLE mysql.proc;
|
||||||
|
remove_file $MYSQLTEST_VARDIR/tmp/proc.txt;
|
||||||
|
@ -243,11 +243,11 @@ disconnect con2user1;
|
|||||||
disconnect con3anon;
|
disconnect con3anon;
|
||||||
disconnect con4user2;
|
disconnect con4user2;
|
||||||
use test;
|
use test;
|
||||||
select type,db,name from mysql.proc;
|
select type,db,name from mysql.proc where db like 'db%';
|
||||||
drop database db1_secret;
|
drop database db1_secret;
|
||||||
drop database db2;
|
drop database db2;
|
||||||
# Make sure the routines are gone
|
# Make sure the routines are gone
|
||||||
select type,db,name from mysql.proc;
|
select type,db,name from mysql.proc where db like 'db%';
|
||||||
# Get rid of the users
|
# Get rid of the users
|
||||||
delete from mysql.user where user='user1' or user='user2';
|
delete from mysql.user where user='user1' or user='user2';
|
||||||
delete from mysql.user where user='' and host='%';
|
delete from mysql.user where user='' and host='%';
|
||||||
|
@ -1540,7 +1540,7 @@ begin
|
|||||||
end|
|
end|
|
||||||
show create procedure opp|
|
show create procedure opp|
|
||||||
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
|
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
|
||||||
show procedure status like '%p%'|
|
show procedure status where name like '%p%' and db='test'|
|
||||||
|
|
||||||
# This isn't the fastest way in the world to compute prime numbers, so
|
# This isn't the fastest way in the world to compute prime numbers, so
|
||||||
# don't be too ambitious. ;-)
|
# don't be too ambitious. ;-)
|
||||||
@ -1558,7 +1558,7 @@ drop table t3|
|
|||||||
drop procedure opp|
|
drop procedure opp|
|
||||||
drop procedure ip|
|
drop procedure ip|
|
||||||
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
|
--replace_column 4 'root@localhost' 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
|
||||||
show procedure status like '%p%'|
|
show procedure status where name like '%p%' and db='test'|
|
||||||
|
|
||||||
|
|
||||||
# Fibonacci, for recursion test. (Yet Another Numerical series :)
|
# Fibonacci, for recursion test. (Yet Another Numerical series :)
|
||||||
@ -2280,7 +2280,7 @@ drop procedure if exists bug2267_1|
|
|||||||
--enable_warnings
|
--enable_warnings
|
||||||
create procedure bug2267_1()
|
create procedure bug2267_1()
|
||||||
begin
|
begin
|
||||||
show procedure status;
|
show procedure status where db='test';
|
||||||
end|
|
end|
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
@ -2288,7 +2288,7 @@ drop procedure if exists bug2267_2|
|
|||||||
--enable_warnings
|
--enable_warnings
|
||||||
create procedure bug2267_2()
|
create procedure bug2267_2()
|
||||||
begin
|
begin
|
||||||
show function status;
|
show function status where db='test';
|
||||||
end|
|
end|
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
|
Loading…
x
Reference in New Issue
Block a user