polardbxengine/mysql-test/suite/network_namespace/t/network_namespace.test

88 lines
4.2 KiB
Plaintext

# WL#12720 Add support for network namespaces on setting up listening sockets
# Network namespaces is a feature of Linux.
# So, ignore this test on any platform except Linux.
--source include/linux.inc
# This test relies on the fact that environment was configured
# to support the network namespace. Namely, the network namespace named 'red'
# must be set up on every linux host involved into pushbuild infrastructure.
# The network interface in the namespace 'red' must be assigned IP address 10.0.2.1
# and routing between the IP address 10.0.2.1 from the network namespace 'red'
# and IP addresses from the root (default) network namespace must be configured.
# Until it be done on every linux host inside pushbuild infrastructure this
# test must be disabled.
--source ../include/have_network_namespaces.inc
--let $restart_parameters = restart: --skip-name-resolve --bind-address=127.0.0.1,10.0.2.1/red
--source include/restart_mysqld.inc
CREATE USER root@127.0.0.1;
CREATE USER root@10.0.2.1;
CREATE USER root@10.0.1.1;
--let $MYSQL_PORT= `SELECT @@port`
--echo # Check that client can establish connection to the address 127.0.0.1 from the default network namespace
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 127.0.0.1 -e "SELECT USER()"
--echo # Check that client can establish connection to the address 10.0.2.1 from the network namespace 'red'
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 10.0.2.1 --network-namespace=red -e "SELECT USER()"
--echo # Check that client can't establish connection to the address 10.0.2.1 from a non-existing network namespace 'green'
--error 1
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 10.0.2.1 --network-namespace=green -e "SELECT USER()" 2>&1
--echo # Simulate case where the mysql client doesn't have the cap_sys_admin_capability
--copy_file $EXE_MYSQL $MYSQLTEST_VARDIR/tmp/mysql
--error 1
--exec $MYSQLTEST_VARDIR/tmp/mysql --no-defaults -u root --port $MYSQL_PORT --host 10.0.2.1 --network-namespace=red -e "SELECT USER()" 2>&1
--remove_file $MYSQLTEST_VARDIR/tmp/mysql
--echo # Check that connections to the host from clients outside the network namespace error out since
--echo # they are visible only through the gateway through which the network namespace connects to the
--echo # outer root network namespace.
--error 1
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 10.0.2.1 -e "SELECT USER()"
--let $restart_parameters=restart: --skip-name-resolve --bind-address=127.0.0.1,10.0.2.1/red,10.0.1.1/blue
--source include/restart_mysqld.inc
--echo # Check that client can establish connection to the address 10.0.2.1 from the network namespace 'red'
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 10.0.2.1 --network-namespace=red -e "SELECT USER()"
--echo # Check that client can establish connection to the address 10.0.1.1 from the network namespace 'blue'
--exec $EXE_MYSQL --no-defaults -u root --port $MYSQL_PORT --host 10.0.1.1 --network-namespace=blue -e "SELECT USER()"
--exec # Use network namespaces with admin port
# Calculate value for admin port
--let $PORT_OFFSET = 1
--expr $ADMIN_PORT = $MASTER_MYPORT + $PORT_OFFSET
--let $restart_parameters=restart: --skip-name-resolve --bind-address=127.0.0.1 --admin-address=10.0.2.1/red --admin-port=$ADMIN_PORT
--replace_result $ADMIN_PORT ADMIN_PORT
--source include/restart_mysqld.inc
GRANT SERVICE_CONNECTION_ADMIN ON *.* TO root@10.0.2.1;
--exec $EXE_MYSQL --no-defaults -u root --host 10.0.2.1 --port $ADMIN_PORT --network-namespace=red -e "SELECT USER()"
# Restart with a dedicated listener thread for admin connections
--let $restart_parameters=restart: --skip-name-resolve --bind-address=127.0.0.1 --admin-address=10.0.2.1/red --admin-port=$ADMIN_PORT --create-admin-listener-thread=true
--replace_result $ADMIN_PORT ADMIN_PORT
--source include/restart_mysqld.inc
--exec $EXE_MYSQL --no-defaults -u root --host 10.0.2.1 --port $ADMIN_PORT --network-namespace=red -e "SELECT USER()"
REVOKE SERVICE_CONNECTION_ADMIN ON *.* FROM root@10.0.2.1;
--let $restart_parameters=restart:
--source include/restart_mysqld.inc
--connection default
DROP USER root@127.0.0.1;
DROP USER root@10.0.2.1;
DROP USER root@10.0.1.1;