im_instance_conf.imtest 9.5 KB
###########################################################################
#
# This test suite checks the following statements:
#   - CREATE INSTANCE <instance_name> [option1[=option1_value], ...];
#   - DROP INSTANCE <instance_name>;
#
# For CREATE INSTANCE we check that:
#   - CREATE INSTANCE succeeds for non-existing instance;
#   - CREATE INSTANCE fails for existing instance;
#   - CREATE INSTANCE can get additional options with and w/o values;
#   - CREATE INSTANCE parses options and handles grammar errors correctly.
#     Check that strings with spaces are handled correctly, unknown (for
#     mysqld) options should also be handled;
#   - CREATE INSTANCE updates both config file and internal configuration cache;
#   - CREATE INSTANCE allows to create instances only with properly formed
#     names (mysqld*);
#
# For DROP INSTANCE we check that:
#   - DROP INSTANCE succeeds for existing instance;
#   - DROP INSTANCE fails for non-existing instance;
#   - DROP INSTANCE fails for active instance.
#   - DROP INSTANCE updates both config file and internal configuration cache;
#
# NOTE: each CREATE INSTANCE statement must specify socket-file-name, otherwise
# this results of the test can be affected by another running test suite.
#
###########################################################################

--source include/im_check_env.inc

###########################################################################
#
# Check starting conditions.
#
###########################################################################

# Check that the configuration file contains only instances that we expect.

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_\-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

###########################################################################
#
# CREATE INSTANCE tests.
#
###########################################################################

# Check that CREATE INSTANCE succeeds for non-existing instance and also check
# that both config file and internal configuration cache have been updated.

CREATE INSTANCE mysqld3
  server_id = 3,
  socket = "$MYSQL_TMP_DIR/mysqld_3.sock";

SHOW INSTANCES;
 
--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

# Check that CREATE INSTANCE fails for existing instance. Let's all three
# existing instances (running one, stopped one and just created one). Just in
# case...

--error 3012 # ER_CREATE_EXISTING_INSTANCE
CREATE INSTANCE mysqld1;

--error 3012 # ER_CREATE_EXISTING_INSTANCE
CREATE INSTANCE mysqld2;

--error 3012 # ER_CREATE_EXISTING_INSTANCE
CREATE INSTANCE mysqld3;

# Check that CREATE INSTANCE can get additional options with and w/o values.
# Ensure that config file is updated properly.

#   - without values;

--echo --------------------------------------------------------------------
--exec grep "^nonguarded\$" $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld4
  nonguarded,
  server_id = 4,
  socket = "$MYSQL_TMP_DIR/mysqld_4.sock";

SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep "^nonguarded\$" $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

#   - with value;

--echo --------------------------------------------------------------------
--exec grep '^test-A[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-B[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld5
  test-A = 000,
  test-B = test,
  server_id = 5,
  socket = "$MYSQL_TMP_DIR/mysqld_5.sock";

SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep '^test-A[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-B[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

# Check that CREATE INSTANCE parses options and handles grammar errors
# correctly. Check that strings with spaces are handled correctly,
# unknown (for mysqld) options should also be handled.

#   - check handling of extra spaces;

--echo --------------------------------------------------------------------
--exec grep '^test-C1[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-C2[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld6
  test-C1  =  10  ,
  test-C2  =  02  ,
  server_id = 6,
  socket = "$MYSQL_TMP_DIR/mysqld_6.sock";

SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep '^test-C1[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-C2[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

#   - check handling of grammar error;

--echo --------------------------------------------------------------------
--exec grep '^test-D[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-E[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

--error ER_SYNTAX_ERROR
CREATE INSTANCE mysqld7  test-D  =  test-D-value  ;
SHOW INSTANCES;

--error ER_SYNTAX_ERROR
CREATE INSTANCE mysqld8  test-E  0  ;
SHOW INSTANCES;

--error ER_SYNTAX_ERROR
CREATE INSTANCE mysqld8  test-F  =  ;
SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep '^test-D[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-E[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

#   - check parsing of string option values

--echo --------------------------------------------------------------------
--exec grep '^test-1[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-2[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-3[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-4[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-5[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-6[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^test-7[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld9
  test-1=" hello world ",
  test-2='  ',
  server_id = 9,
  socket = "$MYSQL_TMP_DIR/mysqld_9.sock";
SHOW INSTANCES;

CREATE INSTANCE mysqld10
  test-3='\b\babc\sdef',
  server_id = 10,
  socket = "$MYSQL_TMP_DIR/mysqld_10.sock";
# test-3='abc def'
SHOW INSTANCES;

CREATE INSTANCE mysqld11
  test-4='abc\tdef',
  test-5='abc\ndef',
  server_id = 11,
  socket = "$MYSQL_TMP_DIR/mysqld_11.sock";
SHOW INSTANCES;

CREATE INSTANCE mysqld12
  test-6="abc\rdef",
  test-7="abc\\def",
  server_id = 12,
  socket = "$MYSQL_TMP_DIR/mysqld_12.sock";
# test-6=abc
SHOW INSTANCES;

--error ER_SYNTAX_ERROR
CREATE INSTANCE mysqld13 test-bad=' \ ';
SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep '^test-1[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-2[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-3[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-4[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-5[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-6[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-7[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep '^test-bad' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------


# Check that CREATE INSTANCE allows to create instances only with properly
# formed names (mysqld*).

--error 3014 # ER_MALFORMED_INSTANCE_NAME
CREATE INSTANCE qqq1;