## This is test file for connection authentication using mysqlx. ## --source include/restart_mysqld.inc --source include/xplugin_preamble.inc --source include/xplugin_create_user.inc call mtr.add_suppression("Plugin mysqlx reported: '3.1: Unhandled message of type 12'"); call mtr.add_suppression("Plugin mysqlx reported: '4.1: Unhandled message of type 12'"); call mtr.add_suppression("Plugin mysqlx reported: '5.1: Unhandled message of type 12'"); ## Test starts here --write_file $MYSQL_TMP_DIR/mysqlx-connection.xpl -->sql create user killsession@localhost identified by 'killsession'; select USER,COMMAND,STATE from information_schema.processlist order by ID desc; -->endsql EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_current_user.xpl -->sql select user(),current_user(),@@bind_address; -->endsql EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection.processlist.xpl -->fatalerrors -->sql set @current := connection_id(); select USER,COMMAND,STATE from information_schema.processlist order by ID desc; kill %MYSQLTEST_CONNECTION_ID%; -->endsql -->expecterror ER_QUERY_INTERRUPTED -->sql kill @current; -->endsql EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_killiunprivileged.xpl -->sql select USER,COMMAND,STATE from information_schema.processlist order by ID desc; -->endsql -->expecterror ER_KILL_DENIED_ERROR -->sql kill %MYSQLTEST_CONNECTION_ID%; select USER,COMMAND,STATE from information_schema.processlist order by ID desc; -->endsql EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_killmysqlxsession.xpl -->fatalerrors -->sql set @current := connection_id(); select USER,COMMAND,STATE from information_schema.processlist order by ID desc; -->endsql -->expecterror ER_QUERY_INTERRUPTED -->sql kill @current; -->endsql EOF --write_file $MYSQL_TMP_DIR/mysqlx-connection_killinvalid.xpl -->fatalerrors -->sql select USER,COMMAND,STATE from information_schema.processlist order by ID desc; -->endsql -->expecterror ER_NO_SUCH_THREAD -->sql kill 5126; -->endsql EOF --replace_regex /localhost:[0-9]*/localhost/ /Execute/Query/ --exec $MYSQLXTEST -u x_root --password='' --file=$MYSQL_TMP_DIR/mysqlx-connection.xpl 2>&1 ###try killing with unprivileged user both mysqlx and mysql session ids using mysqlx protocol ###processlist should show the current session info even privileges are minimal let $MYSQLTEST_CONNID_1=`select connection_id()`; --replace_regex /localhost:[0-9]*/localhost/ /kill [0-9]+/kill $CONNECTION_ID/ /thread [0-9]+/thread $CONNECTION_ID/ --exec $MYSQLXTEST -u killsession --password='killsession' --file=$MYSQL_TMP_DIR/mysqlx-connection_killiunprivileged.xpl -v%MYSQLTEST_CONNECTION_ID%=$MYSQLTEST_CONNID_1 2>&1 --connection default let $wait_for_status_variable = 'Mysqlx_sessions_closed', 'Mysqlx_sessions'; let $wait_for_status_value = 2, 0; source ../include/wait_for_status_variables.inc; ###try killing sessionid which doesn't exists when mysqlxplugin installed using mysqlx protocol ###show processlist returns 0 rows effected even more rows are returned Bug#21392187 --replace_regex /localhost:[0-9]*/localhost/ /Execute/Query/ --exec $MYSQLXTEST -u x_root --password='' --file=$MYSQL_TMP_DIR/mysqlx-connection_killinvalid.xpl 2>&1 --connection default let $wait_for_status_variable = 'Mysqlx_sessions_closed', 'Mysqlx_sessions'; let $wait_for_status_value = 3, 0; source ../include/wait_for_status_variables.inc; --connect(con1,localhost,x_root,,) let $MYSQLTEST_CONNID_2=`select connection_id()`; ###try killing both mysqlx and mysql session ids using mysqlx protocol (expect error from getting killed) --replace_regex /localhost:[0-9]*/localhost/ /kill [0-9]+/kill CONNECTION_ID/ /Execute/Query/ --exec $MYSQLXTEST --expect-error CR_SERVER_GONE_ERROR -u x_root --password='' --file=$MYSQL_TMP_DIR/mysqlx-connection.processlist.xpl -v%MYSQLTEST_CONNECTION_ID%=$MYSQLTEST_CONNID_2 2>&1 --connection default let $wait_for_status_variable = 'Mysqlx_sessions_fatal_error', 'Mysqlx_sessions'; let $wait_for_status_value = 1, 0; source ../include/wait_for_status_variables.inc; --replace_regex /Execute/Query/ select USER,COMMAND,STATE from information_schema.processlist order by ID desc; ###kill mysqlx protocol session using mysqlx protocol when mysqlxplugin installed (expect error again) --replace_regex /localhost:[0-9]*/localhost/ /Execute/Query/ --exec $MYSQLXTEST --expect-error CR_SERVER_GONE_ERROR -u x_root --password='' --file=$MYSQL_TMP_DIR/mysqlx-connection_killmysqlxsession.xpl 2>&1 --connection default let $wait_for_status_variable = 'Mysqlx_sessions_fatal_error', 'Mysqlx_sessions'; let $wait_for_status_value = 2, 0; source ../include/wait_for_status_variables.inc; --replace_regex /Execute/Query/ select USER,COMMAND,STATE from information_schema.processlist order by ID desc; ##expect Mysqlx_sessions_fatal_error incremented when killing its own session show status like 'Mysqlx_sessions%'; ## Cleanup drop user killsession@localhost; --source ../include/xplugin_cleanup.inc