用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

262 lines
6.2 KiB

# Skipping the test when logbin is enabled due to Bug#22292900
--source include/not_log_bin.inc
# This file contains XA-related test cases that requires mysql server
# built with debug.
--source include/not_valgrind.inc
--source include/have_debug.inc
--disable_query_log
call mtr.add_suppression("Found 1 prepared XA transactions");
--enable_query_log
--echo #
--echo # WL#7155: Test 1: check that prepared transaction branch
--echo # is recovered after abnormal server termination.
--echo #
CREATE TABLE t1 (a INT) ENGINE=INNODB;
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
XA PREPARE 'xid1';
--disable_query_log
set session debug="+d,crash_after_xa_recover";
--enable_query_log
# Write file to make mysql-test-run.pl wait for the server to stop
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--error 2013
XA RECOVER;
# Call script that will poll the server waiting for it to disappear
--source include/wait_until_disconnected.inc
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--source include/start_mysqld.inc
--disable_query_log
set session debug="-d,crash_after_xa_recover";
--enable_query_log
XA RECOVER;
SELECT * FROM t1;
XA COMMIT 'xid1';
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # WL#7155: Test 2: check that in case of abnormal server termination
--echo # the changes done by unprepared transaction branch will be rolled back
--echo # after the server restart.
--echo #
CREATE TABLE t1 (a INT) ENGINE=INNODB;
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
--disable_query_log
set session debug="+d,crash_after_xa_recover";
--enable_query_log
# Write file to make mysql-test-run.pl wait for the server to stop
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--error 2013
XA RECOVER;
# Call script that will poll the server waiting for it to disappear
--source include/wait_until_disconnected.inc
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--source include/start_mysqld.inc
--disable_query_log
set session debug="-d,crash_after_xa_recover";
--enable_query_log
XA RECOVER;
SELECT * FROM t1;
DROP TABLE t1;
--echo #
--echo # WL#7155: Test 3: Check that escaped "'" symbol for xid value
--echo # is handled correctly during recovering XA transaction.
--echo #
CREATE TABLE t1 (a INT) ENGINE=INNODB;
XA START 'xid1', 'br\'_1';
INSERT INTO t1 VALUES (1);
XA END 'xid1', 'br\'_1';
XA PREPARE 'xid1', 'br\'_1';
--disable_query_log
set session debug="+d,crash_after_xa_recover";
--enable_query_log
# Write file to make mysql-test-run.pl wait for the server to stop
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--error 2013
XA RECOVER;
# Call script that will poll the server waiting for it to disappear
--source include/wait_until_disconnected.inc
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--source include/start_mysqld.inc
--disable_query_log
set session debug="-d,crash_after_xa_recover";
--enable_query_log
XA RECOVER;
XA ROLLBACK 'xid1', 'br\'_1';
DROP TABLE t1;
--echo #
--echo # Bug#18068253 - XA START WITH THE EXIST XID, AND THEN XA COMMIT WITH THE XID WILL FAILED
--echo #
CREATE TABLE t1 (a INT) ENGINE=INNODB;
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
XA PREPARE 'xid1';
set session debug="+d,crash_after_xa_recover";
# Write file to make mysql-test-run.pl wait for the server to stop
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--error 2013
XA RECOVER;
# Call script that will poll the server waiting for it to disappear
--source include/wait_until_disconnected.inc
--let $_expect_file_name= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--source include/start_mysqld.inc
set session debug="-d,crash_after_xa_recover";
XA RECOVER;
--error ER_XAER_DUPID
XA START 'xid1';
XA COMMIT 'xid1';
DROP TABLE t1;
--echo #
--echo # Bug#20538956 - XA PREPARE ERROR BRANCH LEAVES THE TRANSACTION IN SCREWED STATE
--echo #
--connect (con1, 127.0.0.1,root,,test,$MASTER_MYPORT,)
CREATE TABLE t1 (a INT);
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
SET @@session.debug = '+d,simulate_xa_failure_prepare';
--error ER_XA_RBROLLBACK
XA PREPARE 'xid1';
SET @@session.debug = '-d,simulate_xa_failure_prepare';
--error ER_XAER_NOTA
XA ROLLBACK 'xid1';
#
# The following query failed before patch applied.
#
XA START 'trx_another_one';
--disconnect con1
--connection default
--echo #
--echo # Bug#20488921 - ERROR PROPAGATION DOES NOT FULLY WORK IN XA
--echo #
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
XA PREPARE 'xid1';
SET @@session.debug= '+d,simulate_xa_commit_log_failure';
--error ER_XAER_RMERR
XA COMMIT 'xid1';
# Without a patch for the bug#20488921 execution of the following SET statement
# led to an assert firing.
SET @@session.debug= '-d,simulate_xa_commit_log_failure';
# The following statement is just to check that there isn't any XA transaction
# independently from its state.
INSERT INTO t1 VALUES (2);
DROP TABLE t1;
--echo #
--echo # Bug#23264552 - XA: ASSERT `m_status == da_error' IN mysql_errno:sql_error.h:385
--echo #
--connect (con1, 127.0.0.1,root,,test,$MASTER_MYPORT,)
CREATE TABLE t1 (a INT);
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
SET @@session.debug = '+d,simulate_xa_failure_prepare_in_engine';
--error ER_XA_RBROLLBACK
XA PREPARE 'xid1';
SET @@session.debug = '-d,simulate_xa_failure_prepare_in_engine';
--error ER_XAER_NOTA
XA ROLLBACK 'xid1';
#
# Check that subsequent XA transaction can be initiated.
#
XA START 'trx_another_one';
--disconnect con1
--source include/wait_until_disconnected.inc
--connection default
DROP TABLE t1;
--echo #
--echo # BUG#29293279 -- XA COMMIT MAY LEAD REPLICATION BROKEN
--echo #
--echo Establish session con1
connect (con1,localhost,root,,);
CREATE TABLE t1(a INT);
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
XA PREPARE 'xid1';
--echo Disconnect con1 to save the XA transaction with xid1 into the cache
--disconnect con1
--source include/wait_until_disconnected.inc
--enable_connect_log
connect (con2,localhost,root,,);
set debug_sync='external_xa_commit_after_acquire_commit_lock SIGNAL parked WAIT_FOR go';
--send XA COMMIT 'xid1'
--connection default
set debug_sync='now WAIT_FOR parked';
set debug_sync='external_xa_commit_before_acquire_xa_lock SIGNAL go';
--error ER_XAER_NOTA
XA COMMIT 'xid1';
DROP TABLE t1;
--disable_connect_log