#
# This testcase is related to WL5980, to test the portability feature.
# Create a DB & tables with all kinds Non-Partition & partition on
# Windows platform. Zip the entire DB and tablespaces on Windows.
# Bring the zip file to Linux. 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 Windows DB on
# Linux platform.
# Prerequisite : portability_wl5980_linux.zip
# should exist in "suite/innodb/t"

--source include/have_innodb_16k.inc
--source include/not_embedded.inc

--echo # Skip this test other platfoms and run only on Linux.
if (`select convert(@@version_compile_os using latin1) IN ("Linux") = 0`)
{
  skip Need Linux;
}

--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 $MYSQLTEST_VARDIR/../mysql-test/suite/innodb/t/portability_wl5980_linux.zip $MYSQL_TMP_DIR/portability_wl5980_linux.zip

perl;
use File::Find;
use File::Copy;
sub find_zip () {
   if (/portability_wl5980_linux\.zip/) {
       my $dest_dir = $ENV{'MYSQL_TMP_DIR'};
       my $src_file = $File::Find::name;
       my $srcfile = File::Spec->catfile("$src_file") ;
       my $destfile = File::Spec->catfile("$dest_dir", "portability_wl5980_linux.zip");
       if (! -e $destfile) {   
          copy($srcfile,$destfile) or die "copy @args failed: $!";
       }
   }
}
my $search_dir = $ENV{'MYSQL_BASEDIR'};
find(\&find_zip,"$search_dir");
EOF

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

--echo # Unzip the zip file.
--exec unzip -qo $MYSQL_TMP_DIR/portability_wl5980_linux.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

--echo # Restart the DB server from unzip location Data Dir.
--echo # Note that lower case option is required because the
--echo # partition tables will be stored in mixed (Upper & Lower) format on Linux,
--echo # but on Windows the partition table names are stored in lower case only.

-- exec echo "restart:--lower_case_table_names=1 --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
