用于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.
 
 
 
 
 
 

515 lines
17 KiB

drop table if exists t1, t2;
create table t1 (a int) engine=innodb;
xa start 'test1';
insert t1 values (10);
xa end 'test1';
xa prepare 'test1';
xa rollback 'test1';
select * from t1;
a
xa start 'test2';
xa start 'test-bad';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
insert t1 values (20);
xa prepare 'test2';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
xa end 'test2';
xa prepare 'test2';
xa commit 'test2';
select * from t1;
a
20
xa start 'testa','testb';
insert t1 values (30);
commit;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
xa end 'testa','testb';
begin;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
create table t2 (a int);
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
xa start 'testa','testb';
ERROR XAE08: XAER_DUPID: The XID already exists
xa start 'testa','testb', 123;
ERROR XAE08: XAER_DUPID: The XID already exists
xa start 0x7465737462, 0x2030405060, 0xb;
insert t1 values (40);
xa end 'testb',' 0@P`',11;
xa prepare 'testb',0x2030405060,11;
start transaction;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
xa recover;
formatID gtrid_length bqual_length data
11 5 5 testb 0@P`
xa prepare 'testa','testb';
xa recover;
formatID gtrid_length bqual_length data
1 5 5 testatestb
11 5 5 testb 0@P`
xa commit 'testb',0x2030405060,11;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
xa rollback 'testb',0x2030405060,11;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
xa rollback 'testa','testb';
xa commit 'testb',0x2030405060,11;
ERROR XAE04: XAER_NOTA: Unknown XID
xa rollback 'testb',0x2030405060,11;
ERROR XAE04: XAER_NOTA: Unknown XID
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
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
select * from t1;
a
20
xa recover;
formatID gtrid_length bqual_length data
11 5 5 testb 0@P`
xa rollback 'testb',0x2030405060,11;
drop table t1;
drop table if exists t1;
create table t1(a int, b int, c varchar(20), primary key(a)) engine = innodb;
insert into t1 values(1, 1, 'a');
insert into t1 values(2, 2, 'b');
xa start 'a','b';
update t1 set c = 'aa' where a = 1;
xa start 'a','c';
update t1 set c = 'bb' where a = 2;
update t1 set c = 'bb' where a = 2;
update t1 set c = 'aa' where a = 1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
select count(*) from t1;
count(*)
2
xa end 'a','c';
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
xa rollback 'a','c';
xa start 'a','c';
drop table t1;
#
# BUG#51342 - more xid crashing
#
CREATE TABLE t1(a INT) ENGINE=InnoDB;
XA START 'x';
SET SESSION autocommit=0;
INSERT INTO t1 VALUES(1);
SET SESSION autocommit=1;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
SELECT @@autocommit;
@@autocommit
0
INSERT INTO t1 VALUES(1);
XA END 'x';
XA COMMIT 'x' ONE PHASE;
DROP TABLE t1;
SET SESSION autocommit=1;
End of 5.0 tests
xa start 'a';
xa end 'a';
xa rollback 'a';
xa start 'a';
xa end 'a';
xa rollback 'a';
xa start 'a';
xa end 'a';
xa prepare 'a';
xa commit 'a';
xa start 'a';
xa end 'a';
xa prepare 'a';
xa commit 'a';
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB;
INSERT INTO t1 VALUES(1),(2);
BEGIN;
UPDATE t1 SET a=3 WHERE a=1;
BEGIN;
UPDATE t1 SET a=4 WHERE a=2;
UPDATE t1 SET a=5 WHERE a=2;
UPDATE t1 SET a=5 WHERE a=1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
ROLLBACK;
ROLLBACK;
BEGIN;
UPDATE t1 SET a=3 WHERE a=1;
XA START 'xid1';
UPDATE t1 SET a=4 WHERE a=2;
UPDATE t1 SET a=5 WHERE a=2;
UPDATE t1 SET a=5 WHERE a=1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
XA END 'xid1';
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
XA ROLLBACK 'xid1';
XA START 'xid1';
XA END 'xid1';
XA ROLLBACK 'xid1';
DROP TABLE t1;
#
# Bug#56448 Assertion failed: ! is_set() with second xa end
#
XA START 'x';
XA END 'x';
XA END 'x';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
XA PREPARE 'x';
XA PREPARE 'x';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
XA ROLLBACK 'x';
#
# Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
INSERT INTO t1 VALUES (1, 1), (2, 2);
# Connection con1
XA START 'a';
UPDATE t1 SET b= 3 WHERE a=1;
# Connection default
XA START 'b';
UPDATE t1 SET b=4 WHERE a=2;
# Sending:
UPDATE t1 SET b=5 WHERE a=1;
# Connection con1
UPDATE t1 SET b=6 WHERE a=2;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
XA COMMIT 'a';
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
# Connection default
# Reaping: UPDATE t1 SET b=5 WHERE a=1
XA END 'b';
XA ROLLBACK 'b';
DROP TABLE t1;
#
# Bug#11766752 59936: multiple xa assertions - transactional
# statement fuzzer
#
CREATE TABLE t1 (a INT) engine=InnoDB;
XA START 'a';
INSERT INTO t1 VALUES (1);
SAVEPOINT savep;
XA END 'a';
SELECT * FROM t1;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
INSERT INTO t1 VALUES (2);
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
SAVEPOINT savep;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
SET @a=(SELECT * FROM t1);
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the IDLE state
XA PREPARE 'a';
SELECT * FROM t1;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
INSERT INTO t1 VALUES (2);
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
SAVEPOINT savep;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
SET @a=(SELECT * FROM t1);
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
UPDATE t1 SET a=1 WHERE a=2;
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
XA COMMIT 'a';
SELECT * FROM t1;
a
1
DROP TABLE t1;
#
# Bug#12352846 - TRANS_XA_START(THD*):
# ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL()
# FAILED
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1);
START TRANSACTION;
SELECT a FROM t1 WHERE a=1 FOR SHARE;
a
1
# Connection con2
XA START 'xid1';
# Sending:
SELECT a FROM t1 WHERE a=1 FOR UPDATE;
# Connection default
# Waiting for until a transaction with 'SELECT...FOR UPDATE'
# will be locked inside innodb subsystem.
SELECT a FROM t1 WHERE a=1 FOR UPDATE;
a
1
# Connection con2
# Reaping: SELECT a FROM t1 WHERE a=1 FOR UPDATE
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
XA COMMIT 'xid1';
ERROR XA102: XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected
# Connection default
COMMIT;
# Connection con2
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
XA ROLLBACK 'xid1';
# Connection default
DROP TABLE t1;
#
# Bug#14670465 PLEASE PRINT HUMAN READABLE, ESCAPED
# XID DATA IN XA RECOVER OUTPUT
#
#
# xa Recover command was not diplaying non printable ASCII
# characters in the XID previosuly. Now there is another column
# in the result set which is a Hex Encoded String of the XID.
#
# Check that XIDs which are not normally printable are displayed
# in readable format when CONVERT XID clause is used.
xa start 0xABCDEF1234567890, 0x01, 0x02 ;
xa end 0xABCDEF1234567890, 0x01, 0x02 ;
xa prepare 0xABCDEF1234567890, 0x01, 0x02 ;
xa recover convert xid;
formatID gtrid_length bqual_length data
2 8 1 0xABCDEF123456789001
xa rollback 0xABCDEF1234567890, 0x01, 0x02 ;
# Check that XID which has only printable characters are displayed
# correctly without using of CONVERT XID clause
xa start 0x4142434445, 0x46, 0x02 ;
xa end 0x4142434445, 0x46, 0x02 ;
xa prepare 0x4142434445, 0x46, 0x02 ;
xa recover;
formatID gtrid_length bqual_length data
2 5 1 ABCDEF
xa rollback 0x4142434445, 0x46, 0x02 ;
#
# WL#7155: Test 1: check that if a thread of control terminates then
# the Resource Manager dissociate and rollback any associated
# transaction branch (see ref. 3.6 on page 18 of XA spec)
#
CREATE TABLE t1 (a INT) ENGINE=INNODB;
XA START 'xid1';
INSERT INTO t1 VALUES (1);
XA END 'xid1';
SELECT * FROM t1;
a
DROP TABLE t1;
#
# WL#7155: Test 2: Check that if the Resource Manager is doing work outside
# any global transaction on behalf of the application,
# xa_start() returns XAER_OUTSIDE (see xa_start description on page 52 of XA spec)
#
SET SESSION autocommit=0;
START TRANSACTION;
XA START 'xid1';
ERROR XAE09: XAER_OUTSIDE: Some work is done outside global transaction
COMMIT;
#
# WL#7155: Test 3: Check that the Resource Manager returns error
# if the Transaction Manager tries to resume non-existent transaction.
#
XA START 'xid1' RESUME;
ERROR XAE05: XAER_INVAL: Invalid arguments (or unsupported command)
#
# WL#7155: Test 4: Check that the Resource Manager returns ok
# if the Transaction Manager tries to resume transaction
# that has been ended before.
#
XA START 'xid1';
XA END 'xid1';
XA START 'xid1' RESUME;
XA END 'xid1';
#
# WL#7155: Test 5: Check that the Resource Manager returns error
# if the Transaction Manager ends some XA transaction and
# starts another one with RESUME clause right after that.
#
XA START 'xid1';
XA END 'xid1';
XA START 'xid2' RESUME;
ERROR XAE04: XAER_NOTA: Unknown XID
#
# WL#7155: Test 6: Check that the SUSPEND clause isn't supported for XA END.
#
XA START 'xid1';
XA END 'xid1' SUSPEND;
ERROR XAE05: XAER_INVAL: Invalid arguments (or unsupported command)
XA END 'xid1';
#
# WL#7155: Test 7: Check that attempt to end non-existent XA transaction
# while another XA transaction is active leads to an error
#
XA START 'xid1';
XA END 'xid2';
ERROR XAE04: XAER_NOTA: Unknown XID
XA END 'xid1';
#
# WL#7155: Test 8: Check that XA ROLLBACK can't be called for active XA transaction
#
XA START 'xid1';
XA ROLLBACK 'xid1';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the ACTIVE state
XA END 'xid1';
#
# WL#7155: Test 9: Check that XA PREPARE returns error for unknown xid
#
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid2';
ERROR XAE04: XAER_NOTA: Unknown XID
#
# WL#7155: Test 10: Check that rollback of XA transaction with unknown xid
# leads to an error when there is other prepared XA transaction.
#
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
XA ROLLBACK 'xid2';
ERROR XAE07: XAER_RMFAIL: The command cannot be executed when global transaction is in the PREPARED state
XA ROLLBACK 'xid1';
#
# Bug#18107853 - XA LIST GETS CORRUPT, CRASH AND/OR HANG AND/OR ASSERTION
#
# Check that the server reports an error in case of too long input value of
# format ID overflows the type of unsigned long
XA START '1', 0x01, 18446744073709551615;
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 '18446744073709551615' at line 1
#
# Bug#25364178 - XA PREPARE INCONSISTENT WITH XTRABACKUP
#
# Check XA state when lock_wait_timeout happens
# More tests added to flush_read_lock.test
set session lock_wait_timeout=1;
create table asd (a int);
xa start 'test1';
insert into asd values(1);
xa end 'test1';
flush table with read lock;
# PREPARE error will do auto rollback.
xa prepare 'test1';
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
show errors;
Level Code Message
Error 1205 Lock wait timeout exceeded; try restarting transaction
Error 1402 XA_RBROLLBACK: Transaction branch was rolled back
unlock tables;
xa start 'test1';
insert into asd values(1);
xa end 'test1';
xa prepare 'test1';
flush tables with read lock;
# LOCK error during ROLLBACK will not alter transaction state.
xa rollback 'test1';
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
show errors;
Level Code Message
Error 1205 Lock wait timeout exceeded; try restarting transaction
Error 1401 XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
xa recover;
formatID gtrid_length bqual_length data
1 5 0 test1
# LOCK error during COMMIT will not alter transaction state.
xa commit 'test1';
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
show errors;
Level Code Message
Error 1205 Lock wait timeout exceeded; try restarting transaction
Error 3197 The resource manager is not able to commit the transaction branch at this time. Please retry later.
xa recover;
formatID gtrid_length bqual_length data
1 5 0 test1
unlock tables;
xa rollback 'test1';
xa recover;
formatID gtrid_length bqual_length data
drop table asd;
There should be practically no error, but in theory
XAER_NOTA: Unknown XID can be returned if con1 disconnection
took for too long.
todo: consider to make this test dependent on P_S if
todo: such case will be ever registered.
XA RECOVER;
formatID gtrid_length bqual_length data
#
# WL#7194 -- Define and implement authorization model to manage XA-transactions
#
CREATE USER u1;
GRANT XA_RECOVER_ADMIN ON *.* TO u1;
CREATE USER u2;
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
# Connect as user u1
# Since the privilege XA_RECOVER_ADMIN was granted to the user u1
# it is allowed to execute the statement XA RECOVER to get a list of
# xids for prepared XA transactions.
XA RECOVER;
formatID gtrid_length bqual_length data
1 4 0 xid1
# Connect as user u2
# The privilege XA_RECOVER_ADMIN wasn't granted to the user u2.
# It leads to issuing the error ER_XAER_RMERR on attempt to run
# the statement XA RECOVER.
XA RECOVER;
ERROR XAE03: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
SHOW WARNINGS;
Level Code Message
Error 1401 XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
Error 1227 Access denied; you need (at least one of) the XA_RECOVER_ADMIN privilege(s) for this operation
# The default connection was established on behalf the user root@localhost
# who has the XA_RECOVER_ADMIN privilege assigned by default.
# So for the user root@localhost the statement XA RECOVER
# can be executed successfully.
XA RECOVER;
formatID gtrid_length bqual_length data
1 4 0 xid1
XA COMMIT 'xid1';
# Connect as the user u2 who wasn't granted privilege XA_RECOVER_ADMIN.
# Initiates a new XA transaction on behalf the user u2 and shows that
# call XA RECOVER made by the user u2 is failed with error ER_XAER_RMERR.
XA START 'xid2';
XA END 'xid2';
XA PREPARE 'xid2';
XA RECOVER;
ERROR XAE03: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
SHOW WARNINGS;
Level Code Message
Error 1401 XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
Error 1227 Access denied; you need (at least one of) the XA_RECOVER_ADMIN privilege(s) for this operation
# Although the user u2 can't get a list of prepared XA transaction this user
# can finalize a prepared XA transaction knowing its XID value.
XA COMMIT 'xid2';
DROP USER u1, u2;
# Check that a user who has the privilege SUPER and hasn't the privilege
# XA_RECOVER_ADMIN isn't allowed to run the statement XA RECOVER
CREATE USER u1;
GRANT SUPER ON *.* TO u1;
Warnings:
Warning 1287 The SUPER privilege identifier is deprecated
SHOW GRANTS FOR u1;
Grants for u1@%
GRANT SUPER ON *.* TO `u1`@`%`
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
XA RECOVER;
ERROR XAE03: XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency
XA COMMIT 'xid1';
DROP USER u1;
# End of tests fro WL#7194
#
# Bug #26848877 -- XA COMMIT/ROLLBACK REJECTED BY NON-AUTOCOMMIT SESSION
# WITH NO ACTIVE TRANSACTION
#
# Check that XA COMMIT finalizes XA transaction branch in case
# XA transaction was prepared successfully and after session reconnect
# a user turned off autocommit before running XA COMMIT
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
SET autocommit = 0;
XA RECOVER;
formatID gtrid_length bqual_length data
1 4 0 xid1
XA COMMIT 'xid1';
# Check that XA ROLLBACK finalizes XA transaction branch in case
# XA transaction was prepared successfully and after reconnect
# a user turned off autocommit before running XA ROLLBACK
XA START 'xid1';
XA END 'xid1';
XA PREPARE 'xid1';
SET autocommit = 0;
XA RECOVER;
formatID gtrid_length bqual_length data
1 4 0 xid1
XA ROLLBACK 'xid1';