summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2003-09-24 23:25:58 +0400
committerunknown <dlenev@mysql.com>2003-09-24 23:25:58 +0400
commit5a7f68974d661bfeea13036d75f326d73a1948fd (patch)
tree57d78fcb2aa072aed41aaf4ca6d720ef7f0818f9
parent5b56478639006d78e445543f8cff88137d86d281 (diff)
downloadmariadb-git-5a7f68974d661bfeea13036d75f326d73a1948fd.tar.gz
Test for mysqlbinlog
Particularly for BUG#1340 mysqlbinlog coredumps when reading Exec event without seeing Create_file event before mysql-test/mysql-test-run.sh: Now mysqlbinlog will use proper temporary directory
-rw-r--r--mysql-test/mysql-test-run.sh6
-rw-r--r--mysql-test/r/mysqlbinlog.result84
-rw-r--r--mysql-test/t/mysqlbinlog-master.opt1
-rw-r--r--mysql-test/t/mysqlbinlog.test95
4 files changed, 183 insertions, 3 deletions
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index e63c8866d5a..498c7ccf5ed 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -434,9 +434,9 @@ if [ x$SOURCE_DIST = x1 ] ; then
MYSQL_DUMP="$BASEDIR/client/mysqldump --no-defaults -uroot --socket=$MASTER_MYSOCK"
fi
if [ -f "$BASEDIR/client/.libs/mysqlbinlog" ] ; then
- MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog"
+ MYSQL_BINLOG="$BASEDIR/client/.libs/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
else
- MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog"
+ MYSQL_BINLOG="$BASEDIR/client/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
fi
if [ -n "$STRACE_CLIENT" ]; then
MYSQL_TEST="strace -o $MYSQL_TEST_DIR/var/log/mysqltest.strace $MYSQL_TEST"
@@ -460,7 +460,7 @@ else
fi
MYSQL_TEST="$BASEDIR/bin/mysqltest"
MYSQL_DUMP="$BASEDIR/bin/mysqldump --no-defaults -uroot --socket=$MASTER_MYSOCK"
- MYSQL_BINLOG="$BASEDIR/bin/mysqlbinlog"
+ MYSQL_BINLOG="$BASEDIR/bin/mysqlbinlog --local-load=$MYSQL_TMP_DIR"
MYSQLADMIN="$BASEDIR/bin/mysqladmin"
WAIT_PID="$BASEDIR/bin/mysql_waitpid"
MYSQL_MANAGER="$BASEDIR/bin/mysqlmanager"
diff --git a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result
new file mode 100644
index 00000000000..63f026274af
--- /dev/null
+++ b/mysql-test/r/mysqlbinlog.result
@@ -0,0 +1,84 @@
+drop table if exists t1;
+drop table if exists t2;
+set timestamp=1000000000;
+create table t1 (word varchar(20));
+create table t2 (id int auto_increment not null primary key);
+insert into t1 values ("abirvalg");
+insert into t2 values ();
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+insert into t1 values ("Alas");
+flush logs;
+
+--- Local --
+use test;
+SET TIMESTAMP=1000000000;
+create table t1 (word varchar(20));
+SET TIMESTAMP=1000000000;
+create table t2 (id int auto_increment not null primary key);
+SET TIMESTAMP=1000000000;
+insert into t1 values ("abirvalg");
+SET INSERT_ID=1;
+SET TIMESTAMP=1000000000;
+insert into t2 values ();
+LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-1-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
+LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-2-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
+LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-3-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
+LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-4-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
+LOAD DATA LOCAL INFILE '/home/dlenev/src/mysql-4.0-binlog/mysql-test/var/tmp/words.dat-5-0 ' INTO TABLE t1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY '' (word);
+
+--- Broken LOAD DATA --
+use test;
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+
+--- --database --
+SET INSERT_ID=1;
+
+--- --position --
+use test;
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+
+--- Remote --
+use test;
+SET TIMESTAMP=1000000000;
+create table t1 (word varchar(20));
+SET TIMESTAMP=1000000000;
+create table t2 (id int auto_increment not null primary key);
+SET TIMESTAMP=1000000000;
+insert into t1 values ("abirvalg");
+SET INSERT_ID=1;
+SET TIMESTAMP=1000000000;
+insert into t2 values ();
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+
+--- Broken LOAD DATA --
+use test;
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+
+--- --database --
+use test;
+SET TIMESTAMP=1000000000;
+create table t1 (word varchar(20));
+SET TIMESTAMP=1000000000;
+create table t2 (id int auto_increment not null primary key);
+SET TIMESTAMP=1000000000;
+insert into t1 values ("abirvalg");
+SET INSERT_ID=1;
+SET TIMESTAMP=1000000000;
+insert into t2 values ();
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+
+--- --position --
+use test;
+SET TIMESTAMP=1000000000;
+insert into t1 values ("Alas");
+drop table t1;
diff --git a/mysql-test/t/mysqlbinlog-master.opt b/mysql-test/t/mysqlbinlog-master.opt
new file mode 100644
index 00000000000..ac1a87c73b3
--- /dev/null
+++ b/mysql-test/t/mysqlbinlog-master.opt
@@ -0,0 +1 @@
+--max-binlog-size=4096
diff --git a/mysql-test/t/mysqlbinlog.test b/mysql-test/t/mysqlbinlog.test
new file mode 100644
index 00000000000..78992cb1e11
--- /dev/null
+++ b/mysql-test/t/mysqlbinlog.test
@@ -0,0 +1,95 @@
+# We are using .opt file since we need small binlog size
+--disable_warnings
+drop table if exists t1;
+drop table if exists t2;
+--enable_warnings
+
+# we need this for getting fixed timestamps inside of this test
+set timestamp=1000000000;
+
+create table t1 (word varchar(20));
+create table t2 (id int auto_increment not null primary key);
+
+# simple test for simple statement and various events
+insert into t1 values ("abirvalg");
+insert into t2 values ();
+# Should be uncommented in 4.1
+# set @a:=1
+# insert into t2 values (@a);
+
+# test for load data and load data distributed among the several
+# files (we need to fill up first binlog)
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+load data infile '../../std_data/words.dat' into table t1;
+# simple query to show more in second binlog
+insert into t1 values ("Alas");
+flush logs;
+
+# delimiters are for easier debugging in future
+--disable_query_log
+select "--- Local --" as "";
+--enable_query_log
+
+#
+# We should use --short-form everywhere because in other case output will
+# be time dependend. Better than nothing.
+#
+
+--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.001
+# this should not fail but shouldn't produce any working statements
+--disable_query_log
+select "--- Broken LOAD DATA --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.002
+
+# this should show almost nothing
+--disable_query_log
+select "--- --database --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form --database=nottest $MYSQL_TEST_DIR/var/log/master-bin.001
+
+# this test for position option
+--disable_query_log
+select "--- --position --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form --position=27 $MYSQL_TEST_DIR/var/log/master-bin.002
+
+# These are tests for remote binlog.
+# They should return the same as previous test.
+# But now they are not. V. Vagin should fix this.
+# We test all the same options second time since code for remote case is
+# essentially different. If code for both cases will be unified we'll be
+# able to throw out most of this.
+
+--disable_query_log
+select "--- Remote --" as "";
+--enable_query_log
+
+# This is broken now
+# By the way it seems that remote version fetches all events with name >= master-bin.001
+--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.001
+
+# This is broken too
+--disable_query_log
+select "--- Broken LOAD DATA --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.002
+
+# And this too ! (altough it is documented)
+--disable_query_log
+select "--- --database --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form --user=root --host=127.0.0.1 --port=$MASTER_MYPORT --database=nottest master-bin.001
+
+# Strangely but this works
+--disable_query_log
+select "--- --position --" as "";
+--enable_query_log
+--exec $MYSQL_BINLOG --short-form --position=27 --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.002
+
+# clean up
+drop table t1;