diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
commit | 3f619478f796eddbba6e39502fe941b285dd97b1 (patch) | |
tree | e2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/main/symlink.test | |
parent | Initial commit. (diff) | |
download | mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.tar.xz mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.zip |
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/main/symlink.test')
-rw-r--r-- | mysql-test/main/symlink.test | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/mysql-test/main/symlink.test b/mysql-test/main/symlink.test new file mode 100644 index 00000000..d5f52e9a --- /dev/null +++ b/mysql-test/main/symlink.test @@ -0,0 +1,348 @@ +--source include/have_symlink.inc +--source include/not_windows.inc + +--disable_warnings +drop table if exists t1,t2,t7,t8,t9; +drop database if exists mysqltest; +--enable_warnings + +# +# First create little data to play with +# + +create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)); +create table t2 (a int not null auto_increment, b char(16) not null, primary key (a)); +insert into t1 (b) values ("test"),("test1"),("test2"),("test3"); +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +insert into t2 (b) select b from t1; +insert into t1 (b) select b from t2; +drop table t2; + +# +# Start the test +# We use t9 here to not crash with tables generated by the backup test +# + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create table t9 (a int not null auto_increment, b char(16) not null, primary key (a)) +engine=myisam data directory="$MYSQLTEST_VARDIR/tmp" index directory="$MYSQLTEST_VARDIR/run"; + +insert into t9 select * from t1; +check table t9; +optimize table t9; +repair table t9; +alter table t9 add column c int not null; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t9; + +# Test renames +alter table t9 rename t8, add column d int not null; +alter table t8 rename t7; +rename table t7 to t9; +# Drop old t1 table, keep t9 +drop table t1; + +# +# Test error handling +# Note that we are using the above table t9 here! +# + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +SHOW CREATE TABLE t9; + + +# Check that we cannot link over a table from another database. + +create database mysqltest; + +--error 1,1 +create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) +engine=myisam index directory="/this-dir-does-not-exist"; + +# temporarily disabled as it returns different result in the embedded server +--error ER_WRONG_TABLE_NAME +create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) +engine=myisam index directory="not-hard-path"; + +# Should fail becasue the file t9.MYI already exist in 'run' +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error 1,156 +eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) +engine=myisam index directory="$MYSQLTEST_VARDIR/run"; + +# Should fail becasue the file t9.MYD already exist in 'tmp' +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +--error 1,1 +eval create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) +engine=myisam data directory="$MYSQLTEST_VARDIR/tmp"; + +# Check moving table t9 from default database to mysqltest; +# In this case the symlinks should be removed. + +alter table t9 rename mysqltest.t9; +select count(*) from mysqltest.t9; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table mysqltest.t9; +drop database mysqltest; + +# +# Test changing data dir (Bug #1662) +# + +create table t1 (a int not null) engine=myisam; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval alter table t1 data directory="$MYSQLTEST_VARDIR/tmp"; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +alter table t1 add b int; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval alter table t1 data directory="$MYSQLTEST_VARDIR/log"; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval alter table t1 index directory="$MYSQLTEST_VARDIR/log"; +show create table t1; +drop table t1; + +# +# BUG#32111 - Security Breach via DATA/INDEX DIRECORY and RENAME TABLE +# +--write_file $MYSQLTEST_VARDIR/tmp/t1.MYI +EOF + +--replace_result $MYSQLTEST_VARDIR TEST_DIR $MYSQLTEST_VARDIR TEST_DIR +--error 1,1 +eval CREATE TABLE t1(a INT) +DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' +INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; +--replace_result $MYSQLTEST_VARDIR TEST_DIR +eval CREATE TABLE t2(a INT) +DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' +INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; +--replace_result $MYSQLTEST_VARDIR TEST_DIR +--error 1 +RENAME TABLE t2 TO t1; +DROP TABLE t2; +--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYI + +# +# Bug#8706 - temporary table with data directory option fails +# +#view cannot has temporary table in definition +--disable_view_protocol + +connect (session1,localhost,root,,); +connect (session2,localhost,root,,); + +connection session1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create temporary table t1 (a int) engine=myisam data directory="$MYSQLTEST_VARDIR/log" select 9 a; +# If running test suite with a non standard tmp dir, the "show create table" +# will print "DATA_DIRECTORY=". Use replace_result to mask it out +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; + +connection session2; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create temporary table t1 (a int) engine=myisam data directory="$MYSQLTEST_VARDIR/log" select 99 a; +# If running test suite with a non standard tmp dir, the "show create table" +# will print "DATA_DIRECTORY=". Use replace_result to mask it out +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; + +connection default; +create table t1 (a int) engine=myisam select 42 a; + +connection session1; +select * from t1; +disconnect session1; +connection session2; +select * from t1; +disconnect session2; +connection default; +select * from t1; +drop table t1; + +--enable_view_protocol + +--echo End of 4.1 tests + +# +# Bug #29325: create table overwrites .MYD file of other table (datadir) +# +let $MYSQLD_DATADIR= `select @@datadir`; +SET SESSION keep_files_on_create = TRUE; +--write_file $MYSQLD_DATADIR/test/t1.MYD +EOF +--disable_abort_on_error +--error 1,1,ER_TABLE_EXISTS_ERROR +CREATE TABLE t1 (a INT) ENGINE MYISAM; +--error 0,1 +--remove_file $MYSQLD_DATADIR/test/t1.MYD; +--enable_abort_on_error +SET SESSION keep_files_on_create = FALSE; +CREATE TABLE t1 (a INT) ENGINE MYISAM; +DROP TABLE t1; + +--echo End of 5.0 tests + +# +# Bug#32167: another privilege bypass with DATA/INDEX DIRECTORY +# +# With Bug#41002 (symlink.test fails on symlinked datadir) it was +# decided that the below statements may also succeed if the data +# home directory is symlinked, e.g. mysql-test-run --mem. +# This will be fixed in 6.0 only. +# +let $MYSQLD_DATADIR= `select @@datadir`; +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--error 0,ER_WRONG_ARGUMENTS +eval CREATE TABLE t1(a INT) +INDEX DIRECTORY='$MYSQLD_DATADIR/mysql'; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +# +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--error 0,ER_WRONG_ARGUMENTS +eval CREATE TABLE t1(a INT) +DATA DIRECTORY='$MYSQLD_DATADIR/test'; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +# +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--error 0,ER_WRONG_ARGUMENTS +eval CREATE TABLE t1(a INT) +DATA DIRECTORY='$MYSQLD_DATADIR/'; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +# +--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR +--error 0,ER_WRONG_ARGUMENTS +eval CREATE TABLE t1(a INT) +INDEX DIRECTORY='$MYSQLD_DATADIR'; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +# +--replace_result $MYSQLTEST_VARDIR TEST_DIR +--error 1 +eval CREATE TABLE t1(a INT) +INDEX DIRECTORY='$MYSQLTEST_VARDIR/master-data_var'; + +# +# BUG#25677 - With --skip-symbolic-links option on, DATA DIRECTORY clause is +# silently ignored +# + +SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE='NO_DIR_IN_CREATE'; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE t1(a INT) DATA DIRECTORY='$MYSQLTEST_VARDIR/tmp' INDEX DIRECTORY='$MYSQLTEST_VARDIR/tmp'; +DROP TABLE t1; +SET @@SQL_MODE=@OLD_SQL_MODE; + +--echo # +--echo # BUG#40980 - Drop table can remove another MyISAM table's +--echo # data and index files +--echo # +--mkdir $MYSQL_TMP_DIR/mysql +--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR +eval CREATE TABLE user(a INT) DATA DIRECTORY='$MYSQL_TMP_DIR/mysql' + INDEX DIRECTORY='$MYSQL_TMP_DIR/mysql'; +FLUSH TABLE user; +--echo # Symlinking mysql database to tmpdir +--remove_file $MYSQL_TMP_DIR/mysql/user.MYD +--remove_file $MYSQL_TMP_DIR/mysql/user.MYI +--rmdir $MYSQL_TMP_DIR/mysql +--exec ln -s $MYSQLD_DATADIR/mysql $MYSQL_TMP_DIR/mysql +FLUSH TABLE mysql.user; +DROP TABLE user; +FLUSH TABLE mysql.user; +--disable_result_log +SELECT * FROM mysql.user; +--enable_result_log +--remove_file $MYSQL_TMP_DIR/mysql + +--echo End of 5.1 tests + + +--echo # +--echo # Test for bug #11759990 - "52354: 'CREATE TABLE .. LIKE ... ' +--echo # STATEMENTS FAIL". +--echo # +--disable_warnings +drop table if exists t1, t2; +--enable_warnings +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval create table t1 (a int primary key) engine=myisam + data directory="$MYSQLTEST_VARDIR/tmp" + index directory="$MYSQLTEST_VARDIR/run"; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +show create table t1; +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +select create_options from information_schema.tables where table_name='t1'; +--echo # CREATE TABLE LIKE statement on table with INDEX/DATA DIRECTORY +--echo # options should not fail. Per documentation newly created table +--echo # should not inherit value of these options from the original table. +create table t2 like t1; +show create table t2; +drop tables t1, t2; + +--echo # +--echo # Test for bug #25514146 DB_NAME IS IGNORED WHEN CREATING TABLE +--echo # WITH DATA DIRECTORY +--echo # + +--echo # Make sure we have no current database +CREATE DATABASE x; +USE x; +DROP DATABASE x; + +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR +eval CREATE TABLE test.t1(id INT(11)) ENGINE MYISAM +DATA DIRECTORY "$MYSQLTEST_VARDIR/tmp"; + +DROP TABLE test.t1; +use test; + +# +# End of 5.5 tests +# + +# +# End of 10.0 tests +# + +# +# MDEV-13636 ALTER TABLE ... DELAY_KEY_WRITE=1 creates table copy for MyISAM table with DATA DIRECTORY/INDEX DIRECTORY options +# +replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR; +eval +create table t1(c1 int, c2 int, c3 varchar(100)) engine=MyISAM data directory='$MYSQL_TMP_DIR' index directory = '$MYSQL_TMP_DIR'; +insert t1 values (1,2,3), (2,3,4), (3,4,5), (4,5,6), (5,6,7), (6,7,8), (7,8,9); +alter online table t1 delay_key_write=1; +replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR; +show create table t1; +drop table t1; + +# +# End of 10.1 tests +# |