summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/extra/binlog_tests/binlog_insert_delayed.test32
-rw-r--r--mysql-test/include/wait_until_rows_count.inc52
-rw-r--r--mysql-test/r/binlog_row_binlog.result1
3 files changed, 74 insertions, 11 deletions
diff --git a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test
index 6f504fded96..29c2c477960 100644
--- a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test
+++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test
@@ -4,23 +4,33 @@ create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
# Verify that only one INSERT_ID event is binlogged.
# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed
+let $table=t1;
+let $rows_inserted=11; # total number of inserted rows in this test
insert delayed into t1 values (207);
+let $count=1;
-# We use sleeps between statements, that's the only way to get a
-# repeatable binlog in a normal test run and under Valgrind. The
-# reason is that without sleeps, rows of different INSERT DELAYEDs
-# sometimes group together and sometimes not, so the table may be
-# unlocked/relocked causing a different number of table map log
-# events.
-sleep 2;
+# use this macro instead of sleeps.
+
+--source include/wait_until_rows_count.inc
insert delayed into t1 values (null);
-sleep 2;
+inc $count;
+--source include/wait_until_rows_count.inc
+
insert delayed into t1 values (300);
-sleep 2; # time for the delayed queries to reach disk
+inc $count;
+--source include/wait_until_rows_count.inc
+
insert delayed into t1 values (null),(null),(null),(null);
-sleep 2;
+inc $count; inc $count; inc $count; inc $count;
+--source include/wait_until_rows_count.inc
+
insert delayed into t1 values (null),(null),(400),(null);
-sleep 2;
+inc $count; inc $count; inc $count; inc $count;
+--source include/wait_until_rows_count.inc
+
+#check this assertion about $count calculation
+--echo $count == $rows_inserted
+
select * from t1;
--replace_column 2 # 5 #
--replace_regex /table_id: [0-9]+/table_id: #/
diff --git a/mysql-test/include/wait_until_rows_count.inc b/mysql-test/include/wait_until_rows_count.inc
new file mode 100644
index 00000000000..cf2a21d335a
--- /dev/null
+++ b/mysql-test/include/wait_until_rows_count.inc
@@ -0,0 +1,52 @@
+# include/wait_until_rows_count.inc
+# inspired by wait_for_slave_status by Matthias Leich
+#
+# SUMMARY
+#
+# Waits until SELECT count(*)-$count from $table returns zero
+#
+# USAGE
+#
+# Set vars like
+# let $count=11;
+# let $table=t1;
+# # invoke the macro
+# --include wait_until_rows_count.inc
+#
+# EXAMPLE
+# extra/binlog/binlog_insert_delayed.test
+#
+#
+# TODO: generalize up to wait_[until|while] with arbitrary select or even query and
+# a condition to wait or get awakened
+# It's impossible to implement such a "most" general macro without
+# extending mysqltest. Just no way to pass a query as an argument and
+# evaluate it here, like eval "$quuery". One is bound
+# to specify it inside of the macro
+
+--disable_query_log
+
+let $wait_counter= 300; # max wait in 0.1 seconds
+while ($wait_counter)
+{
+ eval select count(*)-$count from $table into @rez;
+ let $rez=`select @rez`;
+ let $success=`SELECT @rez = 0`;
+ let $no_success=1;
+ if ($success)
+ {
+ let $wait_counter= 1; # droppping counter to leave loop
+ let $no_success=0;
+ }
+ if ($no_success)
+ {
+ --sleep 0.1
+ }
+ dec $wait_counter;
+}
+
+--enable_query_log
+if ($no_success)
+{
+ --die Timeout in wait_until_rows_count.inc, required table never had a prescribed number of rows.
+}
diff --git a/mysql-test/r/binlog_row_binlog.result b/mysql-test/r/binlog_row_binlog.result
index 8d5025f7602..5eef5d9cbf3 100644
--- a/mysql-test/r/binlog_row_binlog.result
+++ b/mysql-test/r/binlog_row_binlog.result
@@ -252,6 +252,7 @@ insert delayed into t1 values (null);
insert delayed into t1 values (300);
insert delayed into t1 values (null),(null),(null),(null);
insert delayed into t1 values (null),(null),(400),(null);
+11 == 11
select * from t1;
a
207