diff options
Diffstat (limited to 'mysql-test/suite/perfschema/t/socket_instances_func.test')
-rw-r--r-- | mysql-test/suite/perfschema/t/socket_instances_func.test | 447 |
1 files changed, 447 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/t/socket_instances_func.test b/mysql-test/suite/perfschema/t/socket_instances_func.test new file mode 100644 index 00000000000..5ed687a483b --- /dev/null +++ b/mysql-test/suite/perfschema/t/socket_instances_func.test @@ -0,0 +1,447 @@ +# +# Some functional checks for the content of performance_schema.socket_instances. +# + +--source include/not_embedded.inc +--source include/not_windows.inc +--source include/have_perfschema.inc + +# Set this to enable debugging output +let $my_socket_debug= 0; + +# +# Set IP address defaults with respect to IPV6 support +# + +# Determine if IPV6 supported +let $check_ipv6_just_check= 1; +--source include/check_ipv6.inc + +# Determine if IPV4 mapped to IPV6 supported +let $check_ipv4_mapped_just_check= 1; +--source include/have_ipv4_mapped.inc + +let $my_localhost= 127.0.0.1; + +if($check_ipv6_supported) +{ + let $my_localhost= ::1; +} + +if($check_ipv4_mapped_supported) +{ + let $my_localhost= ::ffff:127.0.0.1; +} + +if($my_socket_debug) +{ + --echo IPV6=$check_ipv6_supported, IPV4_MAPPED=$check_ipv4_mapped_supported, LOCALHOST=$my_localhost +} + +# +# Preserve the current state of SOCKET_INSTANCES +# + +--echo # Take a snapshot of SOCKET_INSTANCES +CREATE TEMPORARY TABLE my_socket_instances AS +SELECT * FROM performance_schema.socket_instances; + +--echo # Get thread id of the default connection +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.threads +WHERE PROCESSLIST_ID = CONNECTION_ID(); + +let $con0_thread_id= `SELECT @thread_id`; + +# +# ESTABLISH TCP/IP CONNECTION 1 +# +# Start connection with IP = localhost (127.0.0.1 or ::1) + +--echo # Establish local TCP/IP connection (con1,localhost,root,,test,,) +--disable_query_log ONCE +--connect (con1,$my_localhost,root,,test,,$MASTER_MYPORT) + +if($my_socket_debug) +{ +# --replace_result '::ffff:127.0.0.1' <LOCALHOST> '127.0.0.1' <LOCALHOST> '::1' <LOCALHOST> '::' <BINDADDR> '0.0.0.0' <BINDADDR> + SELECT * FROM performance_schema.socket_instances; +} + +--echo # Store the thread id of connection 1 (tcp/ip) +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.threads +WHERE PROCESSLIST_ID = CONNECTION_ID(); + +--echo # Store the port of connection 1 (tcp/ip) +eval SELECT PORT INTO @port +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +let $con1_thread_id= `SELECT @thread_id`; +let $con1_port= `SELECT @port`; + +--echo # Switch to connection default +--connection default + +# +# ESTABLISH TCP/IP CONNECTION 2 +# +# Start a second connection with IP = localhost (127.0.0.1 or ::1) + +--echo # Establish second local TCP/IP connection (con1,localhost,root,,test,,) +--disable_query_log ONCE +--connect (con2,$my_localhost,root,,test,,$MASTER_MYPORT) + +if($my_socket_debug) +{ +# --replace_result '::ffff:127.0.0.1' <LOCALHOST> '127.0.0.1' <LOCALHOST> '::1' <LOCALHOST> '::' <BINDADDR> '0.0.0.0' <BINDADDR> + SELECT * FROM performance_schema.socket_instances; +} + +--echo # Store the thread_id of connection 2 (tcp/ip) +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.threads +WHERE PROCESSLIST_ID = CONNECTION_ID(); + +--echo # Store the port of connection 2 (tcp/ip) +eval SELECT PORT INTO @port +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +let $con2_thread_id= `SELECT @thread_id`; +let $con2_port= `SELECT @port`; + +--echo # Switch to connection default +--connection default + +# +# ESTABLISH LOCAL UNIX DOMAIN CONNECTION +# +# Connect via mysql sock file + +--echo # Establish local unix domain connection (con3,localhost,root,,test,,) +--connect(con3,localhost,root,,test,,) + +if($my_socket_debug) +{ +# --replace_result '::ffff:127.0.0.1' <LOCALHOST> '127.0.0.1' <LOCALHOST> '::1' <LOCALHOST> '::' <BINDADDR> '0.0.0.0' <BINDADDR> + SELECT * FROM performance_schema.socket_instances; +} + +--echo # Store the thread id of connection 3 (unix domain) +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.threads +WHERE PROCESSLIST_ID = CONNECTION_ID(); + +--echo # Store the port of connection 3 (unix domain) +eval SELECT PORT INTO @port +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +let $con3_port= `SELECT @port`; +let $con3_thread_id= `SELECT @thread_id`; + +--echo # Switch to connection default +--connection default + +# +# VERIFY EVENT NAMES +# + +--echo # EVENT_NAME is the "wait/io/socket/*" instrument identifier. + +SELECT COUNT(*) = 0 AS "Expect 1" +FROM performance_schema.socket_instances +WHERE EVENT_NAME NOT LIKE 'wait/io/socket/%'; + +# +# VERIFY UNIQUE EVENT IDs +# + +--echo # OBJECT_INSTANCE_BEGIN is an arbitrary identifier, guaranteed to be unique. + +SELECT COUNT(*) = COUNT(DISTINCT OBJECT_INSTANCE_BEGIN) AS "Expect 1" +FROM performance_schema.socket_instances; + +# +# VERIFY UNIQUE SOCKET ID +# + +--echo # SOCKET_ID is the internal file handle assigned to the socket. + +SELECT COUNT(*) = COUNT(DISTINCT SOCKET_ID) AS "Expect 1" +FROM performance_schema.socket_instances; + +# +# VERIFY UNIQUE THREAD IDs +# + +--echo # Characteristics per our thread +--echo # There must be only one entry with our thread_id + +--disable_query_log ONCE +eval SET @thread_id= $con0_thread_id; + +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +# +# VERIFY UNIQUE PORT NUMBERS FOR TCP/IP CLIENTS +# + +--echo # TCP/IP connections should have a unique port number +--disable_query_log ONCE +eval SET @port= $con1_port; + +--echo # Connection 1 (tcp/ip) +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE PORT = @port; + +--disable_query_log ONCE +eval SET @port= $con2_port; + +--echo # Connection 2 (tcp/ip) +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE PORT = @port; + +# +# VERIFY CONNECTION DETAILS FOR THE DEFAULT CONNECTION +# + +--echo # Check the content for the default connection (unix domain) +# EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE +# wait/io/socket/sql/client_connection 139799531958280 16 37 0 ACTIVE + +--disable_query_log ONCE +eval SET @thread_id = $con0_thread_id; + +SELECT COUNT(*) = 1 as 'Expect 1' +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/client_connection' +AND PORT = 0 AND THREAD_ID = @thread_id; + +# +# VERIFY SERVER LISTENING SOCKET, TCP/IP +# + +--echo # Characteristics of 'server_tcpip_socket' entry +--echo # Server listening socket, TCP/IP +--echo # There is only one entry with 'wait/io/socket/sql/server_tcpip_socket'. +--echo # It shares the same thread id as 'wait/io/socket/sql/server_unix_socket'. + +SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_tcpip_socket'; + +# Store the thread id of server_tcpip_socket +--echo # Get the 'server_tcpip_socket' thread id + +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_tcpip_socket'; + +let $server_tcpip_thread_id= `SELECT @thread_id`; + +--echo # Check the content. +--disable_query_log ONCE +eval SET @port = $MASTER_MYPORT; + +eval SELECT THREAD_ID = @thread_id + AND (IP = '0.0.0.0' OR IP = '::') + AND PORT = @port + AND STATE = 'ACTIVE' AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_tcpip_socket'; + +# +# VERIFY SERVER LISTENING SOCKET, UNIX DOMAIN +# + +--echo # Characteristics of 'server_unix_socket' entry +--echo # Server listening socket, unix domain (socket file) +--echo # There is only one entry with 'wait/io/socket/sql/server_unix_socket'. +--echo # It shares the same thread id as 'wait/io/socket/sql/server_tcpip_socket'. + +SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_unix_socket'; + +# Store the thread id of 'server_unix_socket' +--echo # Get the 'server_unix_socket' thread id + +SELECT THREAD_ID INTO @thread_id +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_unix_socket'; + +let $server_unix_thread_id= `SELECT @thread_id`; + +--echo # Check the content. +eval SELECT THREAD_ID = @thread_id + AND IP = '' + AND PORT = 0 + AND STATE = 'ACTIVE' AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE EVENT_NAME = 'wait/io/socket/sql/server_unix_socket'; + +# +# VERIFY SERVER LISTENING SOCKET THREAD IDs +# + +--echo # Server listening sockets (TCP and Unix) are handled on the same thread + +--disable_query_log ONCE +eval SET @thread_id = $server_tcpip_thread_id; + +eval SELECT COUNT(*) = 2 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +--disable_query_log ONCE +eval SET @thread_id = $server_unix_thread_id; + +eval SELECT COUNT(*) = 2 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +--echo #Compare server listener socket thread ids +--disable_query_log ONCE +eval SELECT ($server_tcpip_thread_id = $server_unix_thread_id) into @match_thread_id; + +select @match_thread_id; + +# +# VERIFY TCP/IP CLIENT CONNECTION 1 +# + +# EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE +# wait/io/socket/sql/client_connection 140707865187120 18 59 127.0.0.1 59298 IDLE or ACTIVE + +--echo # Check content for client connection 1 (tcpip) + +--disable_query_log +eval SET @port = $con1_port; +eval SET @thread_id = $con1_thread_id; +eval SET @addr = '$my_localhost'; +--enable_query_log + +eval SELECT EVENT_NAME = 'wait/io/socket/sql/client_connection' + AND (IP LIKE '%127.0.0.1' OR IP = '::1') + AND PORT = @port +AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +--echo # Characteristics of entries with THREAD_ID of con1 +--echo # There is only one entry with this id. + +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +# +# VERIFY TCP/IP CLIENT CONNECTION 2 +# + +# EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE +# wait/io/socket/sql/client_connection 140707865187120 18 59 127.0.0.1 59298 IDLE or ACTIVE + +--echo # Check content for client connection 2 (tcpip) + +--disable_query_log +eval SET @port = $con2_port; +eval SET @thread_id = $con2_thread_id; +eval SET @addr = '$my_localhost'; +--enable_query_log + +eval SELECT EVENT_NAME = 'wait/io/socket/sql/client_connection' + AND (IP LIKE '%127.0.0.1' OR IP = '::1') + AND PORT = @port +AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +--echo # Characteristics of entries with THREAD_ID of con2 +--echo # There is only one entry with this id. + +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +# +# VERIFY LOCAL CONNECTION, UNIX DOMAIN +# + +# EVENT_NAME OBJECT_INSTANCE_BEGIN THREAD_ID SOCKET_ID IP PORT STATE +# wait/io/socket/sql/client_connection 139799531958280 16 37 0 IDLE or ACTIVE + +--echo # Check the content for client connection 3 (unix domain). + +--disable_query_log ONCE +eval SET @thread_id = $con3_thread_id; + +eval SELECT EVENT_NAME = 'wait/io/socket/sql/client_connection' + AND IP = '' + AND PORT = 0 +AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +--echo # Characteristics of entries with THREAD_ID of con3 +--echo # There is only one entry with this id. + +eval SELECT COUNT(*) = 1 AS 'Expect 1' +FROM performance_schema.socket_instances +WHERE THREAD_ID = @thread_id; + +# +# LIST CLIENT CONNECTIONS +# + +--echo # Show differences to socket_instances before con1, con2 and con3 connecting +let $part= +FROM performance_schema.socket_instances +WHERE (EVENT_NAME,OBJECT_INSTANCE_BEGIN,THREAD_ID,SOCKET_ID,IP,PORT,STATE) +NOT IN (SELECT EVENT_NAME,OBJECT_INSTANCE_BEGIN,THREAD_ID,SOCKET_ID,IP,PORT,STATE + FROM my_socket_instances) +ORDER BY THREAD_ID; +--replace_result '::ffff:127.0.0.1' <LOCALHOST> '127.0.0.1' <LOCALHOST> '::1' <LOCALHOST> '::' <BINDADDR> '0.0.0.0' <BINDADDR> +eval +SELECT EVENT_NAME, IP +$part; + +--connection default + +# +# DROP CLIENT CONNECTIONS +# + +--echo # Disconnect con1, con2 and con3 +--connection con1 +--disconnect con1 +--source include/wait_until_disconnected.inc +--connection con2 +--disconnect con2 +--source include/wait_until_disconnected.inc +--connection con3 +--disconnect con3 +--source include/wait_until_disconnected.inc +--connection default + +# +# VERIFY CONNECTIONS DROPPED +# + +--echo # After waiting a bit we should have no differences to socket_instances +--echo # before con1, con2, con3 connecting. +let $wait_timeout= 10; +let $wait_condition= SELECT COUNT(*) = 0 $part; +--source include/wait_condition.inc +# +eval +SELECT * +$part; + |