diff options
Diffstat (limited to 'mysql-test/suite/perfschema/t/ortho_iter.test')
-rw-r--r-- | mysql-test/suite/perfschema/t/ortho_iter.test | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/t/ortho_iter.test b/mysql-test/suite/perfschema/t/ortho_iter.test new file mode 100644 index 00000000000..09ecfa8a788 --- /dev/null +++ b/mysql-test/suite/perfschema/t/ortho_iter.test @@ -0,0 +1,146 @@ +# Tests for PERFORMANCE_SCHEMA +# Verify the orthogonality of iterators (table*::rnd_next()), +# for every table and instruments. + +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--disable_warnings +drop procedure if exists check_instrument; +--enable_warnings + +delimiter $; +create procedure check_instrument(in instr_name varchar(128)) +begin + declare count_expected integer; + declare count_actual integer; + declare is_wait integer; + declare is_stage integer; + declare is_statement integer; + declare is_wait_table integer; + declare is_stage_table integer; + declare is_statement_table integer; + declare pfs_table_name varchar(64); + declare msg varchar(512); + declare msg_detail varchar(512); + declare cmd_1 varchar(512); + declare cmd_2 varchar(512); + declare done integer default 0; + declare debug integer default 0; + + declare pfs_cursor CURSOR FOR + select table_name from information_schema.tables + where table_schema= 'performance_schema' + and table_name like "events_%_by_event_name%"; + + declare continue handler for sqlstate '02000' + set done = 1; + + select (instr_name like "wait/%") or (instr_name like "idle/%") into is_wait; + select (instr_name like "stage/%") into is_stage; + select (instr_name like "statement/%") into is_statement; + + select instr_name, is_wait, is_stage, is_statement; + + select count(name) + from performance_schema.setup_instruments + where name like (concat(instr_name, "%")) + into count_expected; + + set cmd_1= "select count(*) from (select distinct event_name from performance_schema."; + set cmd_2= concat(" where event_name like \"", + instr_name, + "%\") t into @count_actual"); + + open pfs_cursor; + repeat + fetch pfs_cursor into pfs_table_name; + if not done then + select (pfs_table_name like "%waits%") into is_wait_table; + select (pfs_table_name like "%stages%") into is_stage_table; + select (pfs_table_name like "%statements%") into is_statement_table; + + select concat("Checking table ", pfs_table_name, " ...") as status; + select concat(cmd_1, pfs_table_name, cmd_2) into @cmd; + if debug = 1 + then + select @cmd; + end if; + prepare stmt from @cmd; + execute stmt; + drop prepare stmt; + set msg_detail= concat("table ", pfs_table_name, + ", instruments ", count_expected, + ", found ", @count_actual); + + if is_wait = 1 and is_wait_table = 1 and @count_actual <> count_expected + then + set msg= concat("Missing wait events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + if is_wait = 1 and is_wait_table = 0 and @count_actual <> 0 + then + set msg= concat("Unexpected wait events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + if is_stage = 1 and is_stage_table = 1 and @count_actual <> count_expected + then + set msg= concat("Missing stage events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + if is_stage = 1 and is_stage_table = 0 and @count_actual <> 0 + then + set msg= concat("Unexpected stage events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + if is_statement = 1 and is_statement_table = 1 and @count_actual <> count_expected + then + set msg= concat("Missing statement events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + if is_statement = 1 and is_statement_table = 0 and @count_actual <> 0 + then + set msg= concat("Unexpected statement events: ", msg_detail); + signal sqlstate '05000' set message_text= msg; + end if; + + end if; + until done + end repeat; + close pfs_cursor; + + -- Dont want to return a 02000 NOT FOUND, there should be a better way + signal sqlstate '01000' set message_text='Done', mysql_errno=12000; +end +$ +delimiter ;$ + +# Check the configuration is ok +show variables like "performance_schema%"; +show status like "performance_schema%"; + +call check_instrument("wait/synch/mutex/"); +call check_instrument("wait/synch/rwlock/"); +call check_instrument("wait/synch/cond/"); +call check_instrument("wait/synch/"); +call check_instrument("wait/io/file/"); +call check_instrument("wait/io/net/"); +call check_instrument("wait/io/table/"); +call check_instrument("wait/io/"); +call check_instrument("wait/lock/table/"); +call check_instrument("wait/lock/"); +call check_instrument("wait/"); +call check_instrument("stage/"); +call check_instrument("statement/com/"); +call check_instrument("statement/sql/"); +call check_instrument("statement/"); +call check_instrument("idle/io/socket"); +call check_instrument("idle/"); + +drop procedure check_instrument; + |