##############################################################################
# WL#4677 Unique Server Ids for Replication Topology (UUIDs)                 #
# 
# Each server has a UUID generated by server itself. It is stored in auto.cnf
# in @@DATADIR directory. 
#
# @@SERVER_UUID is a readonly system variable, it is initialized as the
# server's UUID when starting. Users can get the server's UUID from
# @@SERVER_UUID.
#
# This test case tests whether the server's UUID can be generated, stored,
# initialized correctly.
##############################################################################
source include/not_embedded.inc;

CALL mtr.add_suppression("Master's UUID has changed, its old UUID is");

--let $uuid_file= auto.cnf
--let $original_server_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)

--let $datadir= query_get_value(SELECT @@DATADIR, @@DATADIR, 1)
--copy_file $datadir/$uuid_file $datadir/original_$uuid_file

--echo
--echo # Case 1:
--echo # @@SERVER_UUID is readonly.
--echo -----------------------------------------------------------------------------
--error 1238
SET GLOBAL SERVER_UUID= UUID();

--echo
--echo # Case 2:
--echo # If the file does not exists, mysqld generates it automatically.
--echo -----------------------------------------------------------------------------
--remove_file $datadir/$uuid_file
--source include/restart_mysqld.inc
--let $server_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
if (`SELECT '$server_uuid' = '' OR '$server_uuid' = 'NULL'`)
{
  --die server's UUID is null
}

--echo
--echo # Case 3:
--echo # If there is no UUID in the file, mysqld generates it automatically.
--echo -----------------------------------------------------------------------------

--remove_file $datadir/$uuid_file
# There is a blank line in the file
--write_file $datadir/$uuid_file
[auto]
EOF
--source include/restart_mysqld.inc

--let $server_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
if (`SELECT '$server_uuid' = '' OR '$server_uuid' = 'NULL'`)
{
  --die server's UUID is null
}

--echo
--echo # Case 4:
--echo # If there is a UUID in the file, it will be loaded into SERVER_UUID.
--echo -----------------------------------------------------------------------------

--remove_file $datadir/$uuid_file
--move_file $datadir/original_$uuid_file $datadir/$uuid_file
--source include/restart_mysqld.inc

--let $server_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)
if ($server_uuid != $original_server_uuid)
{
  --echo $server_uuid != $original_server_uuid
  --die wrong server_uuid
}
