1## Compression done on client side 2# 3# client->server: Mysqlx.Connection.Compression 4# 5# In which X Plugin compress by default following messages 6# 7# * NOTICE - 11, 0x0b 8# * RESULTSET_COLUMN_META_DATA - 12, 0x0c 9# * RESULTSET_ROW - 13, 0x0d 10# * RESULTSET_FETCH_DONE - 14, 0x0e 11# 12# followed with uncompressed: 13# 14# * SQL_STMT_EXECUTE_OK = 17 0x11 15# 16# The client is going to use following messages to transfer 17# compressed payload: 18# 19# * COMPRESSION = 46; 0x2E 20# 21# The goal of this test is to verify that after enabling compression, 22# and sending compression messages by the client, following system variables 23# are incremented: 24# 25# * mysqlx_bytes_received_compressed_payload 26# * mysqlx_bytes_received_uncompressed_frame 27# 28--source include/xplugin_preamble.inc 29--source include/xplugin_create_user.inc 30 31## Test starts here 32--write_file $MYSQL_TMP_DIR/check_compression_recv_stats.tmp 33 34use performance_schema; 35 36SELECT (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received') , 37 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_compressed_payload'), 38 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_uncompressed_frame') 39 INTO @received1,@received_comp1,@received_uncomp1; 40 41varlet %COMMENT1% abcd efghi jklm noprs tuwx yz; 42varlet %COMMENT2% 123 456 790 11 12 13 14 15 16; 43varlet %COMMENT% /*%COMMENT1%%COMMENT2%%COMMENT1%%COMMENT2%%COMMENT2%%COMMENT1%*/; 44 45-->begin_compress SINGLE 46Mysqlx.Sql.StmtExecute { 47 stmt: "SELECT 1 %COMMENT%" 48 namespace: "sql" 49} 50-->end_compress 51recvresult be-quiet; 52 53SELECT (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received') , 54 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_compressed_payload'), 55 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_uncompressed_frame') 56 INTO @received2,@received_comp2,@received_uncomp2; 57 58-->begin_compress SINGLE 59Mysqlx.Sql.StmtExecute { 60 stmt: "SELECT 2 %COMMENT%" 61 namespace: "sql" 62} 63-->end_compress 64recvresult be-quiet; 65 66SELECT (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received') , 67 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_compressed_payload'), 68 (select VARIABLE_VALUE from session_status WHERE VARIABLE_NAME like 'mysqlx_bytes_received_uncompressed_frame') 69 INTO @received3,@received_comp3,@received_uncomp3; 70 71import assert_select.macro; 72 73callmacro Assert_select0 1 SELECT @received3 > 0; 74callmacro Assert_select0 1 SELECT @received2 > 0; 75callmacro Assert_select0 1 SELECT @received1 > 0; 76 77callmacro Assert_select0 1 SELECT @received_uncomp3 > 0; 78callmacro Assert_select0 1 SELECT @received_uncomp2 > 0; 79callmacro Assert_select0 1 SELECT @received_uncomp3 > @received_uncomp2; 80 81callmacro Assert_select0 1 SELECT @received_comp3 > 0; 82callmacro Assert_select0 1 SELECT @received_comp2 > 0; 83 84# There is some bug here, doing "SELECT @received_comp3 > @received_comp2" is going to fail ! 85callmacro Assert_select0 1 SELECT @received_comp3 > 0+@received_comp2; 86 87callmacro Assert_select0 1 SELECT (@received_comp2 - @received_comp1) >= (@received_comp3 - @received_comp2); 88 89EOF 90 91 92echo ## 1. Verify compression at client side using ZLIB algorithm; 93exec $MYSQLXTEST 94 -ux_root --password='' 95 --compression-mode=required 96 --compression-algorithm=deflate_stream 97 --file=$MYSQL_TMP_DIR/check_compression_recv_stats.tmp 2>&1; 98 99echo ## 2. Verify compression at client side using LZ4Frame algorithm; 100exec $MYSQLXTEST 101 -ux_root --password='' 102 --compression-mode=required 103 --compression-algorithm=lz4_message 104 --file=$MYSQL_TMP_DIR/check_compression_recv_stats.tmp 2>&1; 105 106echo ## 3. Verify compression at client side using ZSTD algorithm; 107exec $MYSQLXTEST 108 -ux_root --password='' 109 --compression-mode=required 110 --compression-algorithm=zstd_stream 111 --file=$MYSQL_TMP_DIR/check_compression_recv_stats.tmp 2>&1; 112 113## Cleanup 114--remove_file $MYSQL_TMP_DIR/check_compression_recv_stats.tmp 115--source include/xplugin_drop_user.inc 116