summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/include/check-testcase.test49
-rw-r--r--mysql-test/lib/mtr_report.pl26
-rwxr-xr-xmysql-test/mysql-test-run.pl11
3 files changed, 84 insertions, 2 deletions
diff --git a/mysql-test/include/check-testcase.test b/mysql-test/include/check-testcase.test
new file mode 100644
index 00000000000..d67e73470b0
--- /dev/null
+++ b/mysql-test/include/check-testcase.test
@@ -0,0 +1,49 @@
+#
+# This test is executed twice for each test case if mysql-test-run is passed
+# the flag --check-testcase.
+# Before every testcase it's run with mysqltest in record mode and will
+# thus produce an output file
+# that can be compared to output from after the tescase.
+# In that way it's possible to check that a testcase does not have
+# any unwanted side affects.
+#
+
+#
+# Dump all global variables
+#
+show global variables;
+
+#
+# Dump all databases
+#
+show databases;
+
+#
+# Dump the "test" database, all it's tables and their data
+#
+--exec $MYSQL_DUMP --skip-comments test
+
+#
+# Dump the "mysql" database and it's tables
+# Select data separately to add "order by"
+#
+--exec $MYSQL_DUMP --skip-comments --no-data mysql
+use mysql;
+select * from columns_priv;
+select * from db order by host, db, user;
+select * from func;
+select * from help_category;
+select * from help_keyword;
+select * from help_relation;
+select * from help_relation;
+select * from host;
+select * from tables_priv;
+select * from time_zone;
+select * from time_zone_leap_second;
+select * from time_zone_name;
+select * from time_zone_transition;
+select * from time_zone_transition_type;
+select * from user;
+
+
+
diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl
index 4708de92e07..ec1bed9671b 100644
--- a/mysql-test/lib/mtr_report.pl
+++ b/mysql-test/lib/mtr_report.pl
@@ -172,7 +172,7 @@ sub mtr_report_stats ($) {
my $tot_failed= 0;
my $tot_tests= 0;
my $tot_restarts= 0;
- my $found_problems= 0; # Some warnings are errors...
+ my $found_problems= 0; # Some warnings in the logfiles are errors...
foreach my $tinfo (@$tests)
{
@@ -283,6 +283,7 @@ sub mtr_report_stats ($) {
print "\n";
+ # Print a list of testcases that failed
if ( $tot_failed != 0 )
{
my $test_mode= join(" ", @::glob_test_mode) || "default";
@@ -296,7 +297,30 @@ sub mtr_report_stats ($) {
}
}
print "\n";
+
+ }
+
+ # Print a list of check_testcases that failed(if any)
+ if ( $::opt_check_testcases )
+ {
+ my @check_testcases= ();
+
+ foreach my $tinfo (@$tests)
+ {
+ if ( defined $tinfo->{'check_testcase_failed'} )
+ {
+ push(@check_testcases, $tinfo->{'name'});
+ }
+ }
+
+ if ( @check_testcases )
+ {
+ print "Check of testcase failed for: ";
+ print join(" ", @check_testcases);
+ print "\n\n";
+ }
}
+
if ( $tot_failed != 0 || $found_problems)
{
mtr_error("there where failing test cases");
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 40b0efd4971..c53ca49a7e9 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -3932,6 +3932,10 @@ sub run_testcase_start_servers($) {
# Before a testcase, run in record mode, save result file to var
# After testcase, run and compare with the recorded file, they should be equal!
#
+# RETURN VALUE
+# 0 OK
+# 1 Check failed
+#
sub run_check_testcase ($$) {
my $mode= shift;
@@ -3976,6 +3980,7 @@ sub run_check_testcase ($$) {
{
mtr_error("Could not execute 'check-testcase' $mode testcase");
}
+ return $res;
}
@@ -4165,7 +4170,11 @@ sub run_mysqltest ($) {
{
if ($mysqld->{'pid'})
{
- run_check_testcase("after", $mysqld);
+ if (run_check_testcase("after", $mysqld))
+ {
+ # Check failed, mark the test case with that info
+ $tinfo->{'check_testcase_failed'}= 1;
+ }
}
}
}