#
# This testcase is related to WL5980, to test the portability feature.
# Create a DB & tables with all kinds Non-Partition & partition on
# Linux platform. Zip the entire DB and tablespaces on Windows.
# Bring the zip file to Windows. Unzip the DB and modify the *.isl files
# with the proper path of the *.ibd files. Restart the DB & check the
# DB with a few DML operations. Test and validate the Linux DB on
# Windows platform.
# Prerequisite : portability_wl5980_windows.zip
# should exist in "suite/innodb/t"

# Windows-specific tests
--source include/windows.inc
--source include/have_innodb_16k.inc
--source include/not_embedded.inc

--echo #Check whether unzip is installed on the system
--echo #Store the command output into a temp file.
perl;
 my $dir = $ENV{'MYSQLTEST_VARDIR'};
 my $cmd = system('unzip --help > NUL 2>&1');
 open ( OUTPUT, ">$dir/tmp/tar.inc") ;
 print OUTPUT "let \$stat = $cmd;\n";
 close (OUTPUT);
EOF

--echo #Get the value of the $stat variable from perl, to MTR
--source  $MYSQLTEST_VARDIR/tmp/tar.inc

--echo #Check the status is non-zero
if ($stat != 0)
{
 --skip Test requires Unzip on Windows
}

--echo #Remove the temp file tar.inc
--remove_file $MYSQLTEST_VARDIR/tmp/tar.inc

--echo # Set the environmental variables
let $MYSQL_BASEDIR= `select @@basedir`;

--echo # Stop server
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- shutdown_server 30
-- source include/wait_until_disconnected.inc

--echo # Copy the remote tablespace & DB zip files from suite location to working location.
--copy_file $MYSQL_BASEDIR/mysql-test/suite/innodb/t/portability_wl5980_windows.zip $MYSQL_TMP_DIR/portability_wl5980_windows.zip

--echo # Check that the file exists in the working folder.
--file_exists $MYSQL_TMP_DIR/portability_wl5980_windows.zip

--echo # Unzip the zip file.
--exec unzip -q $MYSQL_TMP_DIR/portability_wl5980_windows.zip -d $MYSQL_TMP_DIR

--echo # Remove the DOS based *.isl files from the MySql Data directory.
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/emp2#p#p1.isl
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/emp2#p#p2.isl

--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/emp3.isl

--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/emp4#p#p1.isl
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/emp4#p#p2.isl

--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p0#sp#s0.isl
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p0#sp#s1.isl
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p1#sp#s2.isl
--remove_file $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p1#sp#s3.isl

--echo # Check that the *.ibd files are in the required location.
--file_exists $MYSQL_TMP_DIR/mysqld.5980/tab1/test/emp2#p#p1.ibd
--file_exists $MYSQL_TMP_DIR/mysqld.5980/tab2/test/emp2#p#p2.ibd

--file_exists $MYSQL_TMP_DIR/mysqld.5980/tab3/test/emp3.ibd

--file_exists $MYSQL_TMP_DIR/mysqld.5980/tab4/test/emp4#p#p1.ibd
--file_exists $MYSQL_TMP_DIR/mysqld.5980/tab5/test/emp4#p#p2.ibd

--file_exists $MYSQL_TMP_DIR/mysqld.5980/part0/test/purchase#p#p0#sp#s0.ibd
--file_exists $MYSQL_TMP_DIR/mysqld.5980/part1/test/purchase#p#p0#sp#s1.ibd
--file_exists $MYSQL_TMP_DIR/mysqld.5980/part2/test/purchase#p#p1#sp#s2.ibd
--file_exists $MYSQL_TMP_DIR/mysqld.5980/part3/test/purchase#p#p1#sp#s3.ibd


--echo # Create new *.isl files with the correct path to the *.ibd files,
--exec echo $MYSQL_TMP_DIR/mysqld.5980/tab1/test/emp2#p#p1.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/emp2#p#p1.isl
--exec echo $MYSQL_TMP_DIR/mysqld.5980/tab2/test/emp2#p#p2.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/emp2#p#p2.isl

--exec echo $MYSQL_TMP_DIR/mysqld.5980/tab3/test/emp3.ibd  > $MYSQL_TMP_DIR/mysqld.5980/data/test/emp3.isl

--exec echo $MYSQL_TMP_DIR/mysqld.5980/tab4/test/emp4#p#p1.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/emp4#p#p1.isl
--exec echo $MYSQL_TMP_DIR/mysqld.5980/tab5/test/emp4#p#p2.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/emp4#p#p2.isl

--exec echo $MYSQL_TMP_DIR/mysqld.5980/part0/test/purchase#p#p0#sp#s0.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p0#sp#s0.isl 
--exec echo $MYSQL_TMP_DIR/mysqld.5980/part1/test/purchase#p#p0#sp#s1.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p0#sp#s1.isl
--exec echo $MYSQL_TMP_DIR/mysqld.5980/part2/test/purchase#p#p1#sp#s2.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p1#sp#s2.isl
--exec echo $MYSQL_TMP_DIR/mysqld.5980/part3/test/purchase#p#p1#sp#s3.ibd > $MYSQL_TMP_DIR/mysqld.5980/data/test/purchase#p#p1#sp#s3.isl

--exec echo #change path separator Linux "/" format to windows "\" format by Perl script, 
--exec echo #in the *.ISL files , in the Mysql data directory
--perl  EOF
use File::Copy;
#use strict;
#use warnings;
my $dir= $ENV{'MYSQL_TMP_DIR'}."/mysqld.5980/data/test";
opendir(DIR, $dir) or die $!;
 while (my $file = readdir(DIR)) {
 # Read files only in the Directory
 next unless (-f "$dir/$file");
 # Use a regular expression to find files ending in .isl
    next unless ($file =~ m/\.isl$/);
	# open file in write mode
	open IN_FILE,"<", "$dir/$file" or die $!;
	open OUT_FILE, ">", "$dir/tmp" or die $!;
	while(<IN_FILE>) {
        #change the path separator "/" to "\" in the file
	 $_=~ s/"$//g;
         $_=~ s/\//\\/g;
	 print OUT_FILE $_;
	}

	close(IN_FILE);
	close(OUT_FILE);
	#move the new content from tmp file to the orginal file.
	move("$dir/tmp", "$dir/$file");
	print "$file\n";
   }
closedir(DIR);

exit 0;
EOF

--echo # Restarting the server with skip-grant-tables option and updating
--echo # mysql.user table. This is to deal with the restriction imposed on
--echo # plugin field for users in WL6982.

--echo # Restart the DB server from unzip location of MySQL Data Dir 
-- exec echo "restart: --datadir=$MYSQL_TMP_DIR/mysqld.5980/data/ --skip-grant-tables" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- enable_reconnect
-- source include/wait_until_connected_again.inc

-- exec $MYSQL -e "UPDATE mysql.user SET plugin = 'mysql_native_password'"

-- echo # Stop server
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- shutdown_server 30
-- source include/wait_until_disconnected.inc

--echo # Restart the DB server from unzip location of MySQL Data Dir 
-- exec echo "restart: --datadir=$MYSQL_TMP_DIR/mysqld.5980/data/ " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- enable_reconnect
-- source include/wait_until_connected_again.inc

--echo # Check the DB & tables with DML statements.
use test;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SHOW CREATE TABLE emp1;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SHOW CREATE TABLE emp2;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SHOW CREATE TABLE emp3;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SHOW CREATE TABLE emp4;
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SHOW CREATE TABLE purchase;

SELECT COUNT(*) FROM emp1;
SELECT COUNT(*) FROM emp2;
SELECT COUNT(*) FROM emp3;
SELECT COUNT(*) FROM emp4;
SELECT COUNT(*) FROM purchase;

DELETE  FROM emp1;
DELETE  FROM emp2;
DELETE  FROM emp3;
DELETE  FROM emp4;
DELETE FROM purchase;

SELECT COUNT(*) FROM emp1;
SELECT COUNT(*) FROM emp2;
SELECT COUNT(*) FROM emp3;
SELECT COUNT(*) FROM emp4;
SELECT COUNT(*) FROM purchase;

--echo # Check the system tables have the proper entry of the tables.
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
SELECT path FROM information_schema.innodb_sys_datafiles
       WHERE path LIKE '%test%' ORDER BY space;
SELECT name,file_format,row_format 
       FROM information_schema.innodb_sys_tablespaces
       ORDER BY name;
SELECT name,n_cols,file_format,row_format 
       FROM information_schema.innodb_sys_tables 
       WHERE name LIKE '%emp%' ORDER BY name;
SELECT name,n_cols,file_format,row_format 
       FROM information_schema.innodb_sys_tables 
       WHERE name LIKE '%purchase%' ORDER BY name;

--echo #
--echo # Cleanup
--echo #

DROP TABLE emp1;
DROP TABLE emp2;
DROP TABLE emp3;
DROP TABLE emp4;
DROP TABLE purchase;

# The following lines of code just to dupe the MTR frame work nothing to do with WL,
# As MTR thinks that it was a failure, When the server logs contains error/warnings
# even though there are no result mismatch.It is an expected behavior of the server.

CREATE DATABASE mtr;
DELIMITER |;
CREATE PROCEDURE mtr.check_warnings(OUT result INT)
BEGIN
SELECT 0 INTO RESULT;
END|

--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab1/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab2/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab3/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab4/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab5/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part0/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part1/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part2/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part3/test
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab1
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab2
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab3
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab4
--rmdir $MYSQL_TMP_DIR/mysqld.5980/tab5
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part0
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part1
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part2
--rmdir $MYSQL_TMP_DIR/mysqld.5980/part3
