###########################################################################
#
# 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;
#
###########################################################################

--source include/im_check_os.inc

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

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

--echo --------------------------------------------------------------------
--exec grep server_id $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

# Check that mysqld1 is reported as running.

--sleep 3
# should be longer than monitoring interval and enough to start instance.

SHOW INSTANCES;

# Check that the expected mysqld instance is actually run (check that we can
# connect and execute something).

--echo
--echo ---> connection: mysql1_con
--connect (mysql1_con,localhost,root,,mysql,$IM_MYSQLD1_PORT,$IM_MYSQLD1_SOCK)
--connection mysql1_con

SHOW VARIABLES LIKE 'server_id';

--disconnect mysql1_con

--echo
--echo ---> connection: default
--connection default

###########################################################################
#
# 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;

SHOW INSTANCES;
 
--echo --------------------------------------------------------------------
--exec grep server_id $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;

SHOW INSTANCES;

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

#   - with value;

--echo --------------------------------------------------------------------
--exec grep test-A $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-B $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld5 test-A = 000, test-B = test;

SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep test-A $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-B $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-C $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld6  test-C1  =  10  ,  test-C2  =  02  ;

SHOW INSTANCES;

--echo --------------------------------------------------------------------
--exec grep test-C1 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-C2 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

#   - check handling of grammar error;

--echo --------------------------------------------------------------------
--exec grep test-D $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-E $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 $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-E $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

#   - check parsing of string option values

--echo --------------------------------------------------------------------
--exec grep test-1 $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-2 $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-3 $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep test-4 $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

CREATE INSTANCE mysqld9 test-1=" hello world ", test-2='  ';
SHOW INSTANCES;

CREATE INSTANCE mysqld9a test-3='\b\babc\sdef';
# test-3='abc def'
SHOW INSTANCES;

CREATE INSTANCE mysqld9b test-4='abc\tdef', test-5='abc\ndef';
SHOW INSTANCES;

CREATE INSTANCE mysqld9c test-6="abc\rdef", test-7="abc\\def";
# test-6=abc
SHOW INSTANCES;

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

--echo --------------------------------------------------------------------
--exec grep test-1 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-2 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-3 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-4 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-5 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-6 $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------
--exec grep test-7 $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;

