--source include/check_ipv6.inc --echo # --echo # WL#12138 -- Add Admin Port --echo # --echo # Create the user u1 CREATE USER u1; --echo # Grant the user u1 the privilege SERVICE_CONNECTION_ADMIN GRANT SERVICE_CONNECTION_ADMIN ON *.* TO u1; --echo # Create the user u2 CREATE USER u2; --let $MYSQLD_LOG= $MYSQL_TMP_DIR/server.log --let $MYSQLD_DATADIR= `SELECT @@datadir` --echo # Create the user u3 CREATE USER u3; --echo # Grant the user u3 the privilege SERVICE_CONNECTION_ADMIN GRANT SUPER ON *.* TO u3; --echo # Stop DB server which was created by MTR default --source include/shutdown_mysqld.inc --echo # Test case 1 --echo # Check that specially treated value :: is not allowed as part of --echo # option admin-address. --error 1 --exec $MYSQLD_CMD --log-error=$MYSQLD_LOG --datadir=$MYSQLD_DATADIR --secure-file-priv="" --admin-address=:: --let SEARCH_FILE=$MYSQLD_LOG --let SEARCH_PATTERN=Invalid value for command line option admin-address: '::' --source include/search_pattern.inc --remove_file $MYSQLD_LOG --echo # Test case 2 --echo # Check that specially treated value * is not allowed as part of --echo # option admin-address. --error 1 --exec $MYSQLD_CMD --log-error=$MYSQLD_LOG --datadir=$MYSQLD_DATADIR --secure-file-priv="" --admin-address=* --let SEARCH_FILE=$MYSQLD_LOG --let SEARCH_PATTERN=Invalid value for command line option admin-address: '*' --source include/search_pattern.inc --remove_file $MYSQLD_LOG --echo # Test case 3 --echo # Check that specially treated value 0.0.0.0 is not allowed as part of --echo # option admin-address. --error 1 --exec $MYSQLD_CMD --log-error=$MYSQLD_LOG --datadir=$MYSQLD_DATADIR --secure-file-priv="" --admin-address=0.0.0.0 --let SEARCH_FILE=$MYSQLD_LOG --let SEARCH_PATTERN=Invalid value for command line option admin-address: '0.0.0.0' --source include/search_pattern.inc --remove_file $MYSQLD_LOG --echo # Test case 4 --echo # Check that non-existent host name specified as a value of the option admin-address results in error on server starting up. --echo # option admin-address. --error 1 --exec $MYSQLD_CMD --log-error=$MYSQLD_LOG --datadir=$MYSQLD_DATADIR --secure-file-priv="" --admin-address=non_existent_host --let SEARCH_FILE=$MYSQLD_LOG --let SEARCH_PATTERN=Can't start server: cannot resolve hostname --source include/search_pattern.inc --remove_file $MYSQLD_LOG # Calculate value for admin port --let $PORT_OFFSET = 1 --expr $ADMIN_PORT = $MASTER_MYPORT + $PORT_OFFSET --echo # Starting up server with --admin-address=127.0.0.1 --max-connections=2 --force-cpdir $MYSQLD_DATADIR $MYSQL_TMP_DIR/newdd --replace_result $ADMIN_PORT ADMIN_PORT --let $restart_parameters=restart: --admin-address=127.0.0.1 --admin-port=$ADMIN_PORT --max-connections=2 --source include/start_mysqld.inc --enable_connect_log --echo # Test case 5 --echo # Check that ordinary connection using tcp protocol can be established --connect(ordinary_tcp_con,localhost,root,,,,,TCP) SELECT CURRENT_USER(); --disconnect ordinary_tcp_con --source include/wait_until_disconnected.inc --echo # Check error when starting a server having admin port which is busy --error 1 --exec $MYSQLD_CMD --log-error=$MYSQLD_LOG --datadir=$MYSQL_TMP_DIR/newdd --secure-file-priv="" --admin-address=127.0.0.1 --admin-port=$ADMIN_PORT --let SEARCH_FILE=$MYSQLD_LOG --let SEARCH_PATTERN=Can't start server: Bind on TCP/IP port: (Address .*in use|Only one usage of each socket address .* normally permitted) --source include/search_pattern.inc --remove_file $MYSQLD_LOG --force-rmdir $MYSQL_TMP_DIR/newdd --echo # Test case 6 --echo # Check that ordinary connection using default connection method can be established --connect(ordinary_con,localhost,root,,,,,) SELECT CURRENT_USER(); --disconnect ordinary_con --source include/wait_until_disconnected.inc --echo # Test case 7 --echo # Check that admin connection using tcp protocol can be established --connect(admin_tcp_con,127.0.0.1,root,,,$ADMIN_PORT,,TCP) SELECT CURRENT_USER(); --echo # Check that a system message about the admin interface is written --echo # to the error log let $log_error_file= `SELECT @@GLOBAL.log_error`; if($log_error_file == "stderr") { let $log_error_file = $MYSQLTEST_VARDIR/log/mysqld.1.err; } --let SEARCH_FILE=$log_error_file --let SEARCH_PATTERN=\[System\] \[MY\-[0-9]+\] \[Server\] Admin interface ready for connections, address: \'127.0.0.1\' port: $ADMIN_PORT --replace_result $ADMIN_PORT ADMIN_PORT --source include/search_pattern.inc --disconnect admin_tcp_con --source include/wait_until_disconnected.inc --echo # Test case 8 --echo # Check that the user u1 can establish connection to admin interface since --echo # this user has the privilege SERVICE_CONNECTION_ADMIN --connect(admin_tcp_con_u1,127.0.0.1,u1,,,$ADMIN_PORT,,TCP) SELECT CURRENT_USER(); --disconnect admin_tcp_con_u1 --source include/wait_until_disconnected.inc --echo # Test case 9 --echo # Check that the user u2 can't establish connection to admin interface since --echo # this user doesn't have the privilege SERVICE_CONNECTION_ADMIN --replace_result $MASTER_MYSOCK MASTER_SOCKET $ADMIN_PORT ADMIN_PORT --error ER_SPECIFIC_ACCESS_DENIED_ERROR --connect(admin_tcp_con_u2,127.0.0.1,u2,,,$ADMIN_PORT,,TCP) --echo # Check that the user u3 can't establish connection to admin interface since --echo # this user doesn't have the privilege SERVICE_CONNECTION_ADMIN --replace_result $MASTER_MYSOCK MASTER_SOCKET $ADMIN_PORT ADMIN_PORT --error ER_SPECIFIC_ACCESS_DENIED_ERROR --connect(admin_tcp_con_u3,127.0.0.1,u3,,,$ADMIN_PORT,,TCP) --connection default --echo # Show how many active connections currently exist SHOW STATUS LIKE 'Threads_connected'; --echo # Test case 10 --echo # Check that the parameter max_connections does affect to an ordinary --echo # connection and doesn't affect to a connection made to admin interface --connect(ordinary_con_1,localhost,u1,,,,,) --echo # Show how many active connections exist after the connection --echo # ordinary_con_1 established SHOW STATUS LIKE 'Threads_connected'; --echo # Since server was started with the option --max-connections=2 and --echo # there are already two active connections (the first one is for --echo # the default connection and the second one is for the connection --echo # ordinary_con_1) an attempt to connect to the server results in --echo # error ER_CON_COUNT_ERROR --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --error ER_CON_COUNT_ERROR --connect(ordinary_con_2,localhost,u2,,,,,) --echo # Check that attempt to establish the third connection to admin interface --echo # doesn't result in error --connect(admin_con_3,localhost,u1,,,$ADMIN_PORT,,TCP) --echo # Check that total number of concurrent connection made to admin interface --echo # is not limited by the value max-connections + 1 --connect(admin_con_4,localhost,u1,,,$ADMIN_PORT,,TCP) --connection ordinary_con_1 --disconnect ordinary_con_1 --source include/wait_until_disconnected.inc --connection admin_con_3 --disconnect admin_con_3 --source include/wait_until_disconnected.inc --connection admin_con_4 --disconnect admin_con_4 --source include/wait_until_disconnected.inc --connection default --echo # Test case 11 --echo # Check that a dedicated thread for handling connection requests --echo # on admin interface is not running in case a server started without --echo # the option --create-admin-listener-thread=true SELECT name, type FROM performance_schema.threads WHERE name = 'thread/sql/admin_interface'; --echo # Stop DB server --source include/shutdown_mysqld.inc --echo # Starting up server with --admin-address=127.0.0.1, --echo # handle connections on admin interface by a dedicated thread --let $restart_parameters=restart: --admin-address=127.0.0.1 --admin-port=$ADMIN_PORT --create-admin-listener-thread=true --replace_result $ADMIN_PORT ADMIN_PORT --source include/start_mysqld.inc --echo # Test case 12 --echo # Check that a dedicated thread for handling connection requests on --echo # admin interface is running in case a server started with the option --echo # --create-admin-listener-thread=true SELECT name, type FROM performance_schema.threads WHERE name = 'thread/sql/admin_interface'; --echo # Test case 13 --echo # Check that admin connection using tcp protocol can be established --echo # when a server is started with option --create-admin-listener-thread=true --connect(admin_tcp_con,127.0.0.1,root,,,$ADMIN_PORT,,TCP) SELECT CURRENT_USER(); --disconnect admin_tcp_con --source include/wait_until_disconnected.inc --echo # Test case 14 --echo # Check that admin interface is turned off --echo # in case a server started with the --skip-networking option --connection default --echo # Stop DB server --source include/shutdown_mysqld.inc --echo # Starting up server with --admin-address=127.0.0.1 --skip-networking --let $restart_parameters=restart: --admin-address=127.0.0.1 --admin-port=$ADMIN_PORT --skip-networking --let $wait_for_tcpsocket_status = no_wait --replace_result $ADMIN_PORT ADMIN_PORT --source include/start_mysqld.inc --replace_result $MASTER_MYSOCK MASTER_SOCKET $ADMIN_PORT ADMIN_PORT # Disable result_log to suppress output from subsequent connect() command # since it outputs error code reasoning why connection wasn't established # and its value could be distinct on different platforms. --disable_result_log --error CR_CONN_HOST_ERROR --connect(admin_tcp_con,127.0.0.1,root,,,$ADMIN_PORT,,TCP) --echo # Test case 15 --echo # Check that admin interface is turned off in case a server started --echo # with the --skip-grant-tables option. If the server is started with --echo # the --skip-grant-tables option to disable authentication checks, --echo # the server enables --skip-networking automatically to prevent remote --echo # connections. Therefore, listening on admin interface must be disabled too. --connection default --echo # Stop DB server --source include/shutdown_mysqld.inc --echo # Starting up server with --admin-address=127.0.0.1 --skip-grant-tables --let $restart_parameters=restart: --admin-address=127.0.0.1 --admin-port=$ADMIN_PORT --skip-grant-tables --let $wait_for_tcpsocket_status = no_wait --replace_result $ADMIN_PORT ADMIN_PORT --source include/start_mysqld.inc --replace_result $MASTER_MYSOCK MASTER_SOCKET $ADMIN_PORT ADMIN_PORT # Disable result_log to suppress output from subsequent connect() command # since it outputs error code reasoning why connection wasn't established # and its value could be distinct on different platforms. --disable_result_log --error CR_CONN_HOST_ERROR --connect(admin_tcp_con,127.0.0.1,root,,,$ADMIN_PORT,,TCP) --connection default --echo # Stop DB server --source include/shutdown_mysqld.inc --echo # Test case 16 --echo # Check that admin interface is not setup when the option --echo # --admin-port is specified without --admin-address --let $restart_parameters=restart: --admin-port=$ADMIN_PORT --replace_result $ADMIN_PORT ADMIN_PORT --source include/start_mysqld.inc # Make ordinary connection --connect(ordinary_tcp_con,localhost,root,,,,,TCP) SELECT CURRENT_USER(); --replace_result $ADMIN_PORT ADMIN_PORT SELECT @@admin_address, @@admin_port; --disconnect ordinary_tcp_con --source include/wait_until_disconnected.inc # Connection through admin port shouldn't be possible # as --admin-address is not specified --disable_result_log --replace_result $MASTER_MYSOCK MASTER_SOCKET $ADMIN_PORT ADMIN_PORT --error CR_CONN_HOST_ERROR --connect(admin_tcp_con,127.0.0.1,root,,,$ADMIN_PORT,,TCP) --enable_result_log --echo # Test case 17 --echo # Check that we can connect to the server if admin --echo # interface is set up on loopback IPV6 address --connection default --let $restart_parameters=restart: --skip-name-resolve --admin-address="::1" --admin-port=$ADMIN_PORT --replace_result $ADMIN_PORT ADMIN_PORT --source include/restart_mysqld.inc --connect(admin_tcp_con_ipv6,::1,u1,,,$ADMIN_PORT,,TCP) --replace_result $ADMIN_PORT ADMIN_PORT SELECT @@admin_address, @@admin_port; --disconnect admin_tcp_con_ipv6 --source include/wait_until_disconnected.inc --connection default --echo # Stop DB server --source include/shutdown_mysqld.inc --enable_result_log --echo # --echo # Starting mysqld in the regular mode... --echo # --let $restart_parameters= --connection default --source include/start_mysqld.inc --echo # Cleaning up DROP USER u1; DROP USER u2; DROP USER u3; --disable_connect_log