summaryrefslogtreecommitdiffstats
path: root/mysql-test/include/rpl_assert.inc
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/include/rpl_assert.inc')
-rw-r--r--mysql-test/include/rpl_assert.inc118
1 files changed, 118 insertions, 0 deletions
diff --git a/mysql-test/include/rpl_assert.inc b/mysql-test/include/rpl_assert.inc
new file mode 100644
index 00000000..d9963e8e
--- /dev/null
+++ b/mysql-test/include/rpl_assert.inc
@@ -0,0 +1,118 @@
+# ==== Purpose ====
+#
+# Check if a condition holds, fail with debug info if not.
+#
+# The condition is parsed before executed. The following constructs
+# are supported:
+#
+# [SQL STATEMENT, COLUMN, ROW]
+# The square bracket is replaced by the result from SQL STATEMENT,
+# in the given COLUMN and ROW.
+#
+# <1>
+# This is a shorthand for the result of the first executed square
+# bracket. <2> is a shorthand for the second executed square
+# bracket, and so on.
+#
+# ==== Usage ====
+#
+# --let $assert_text= Relay_Log_Pos must be smaller than pos.
+# --let $assert_cond= [SHOW SLAVE STATUS, Relay_Log_Pos, 1] >= $min_pos AND <1> <= $max_pos
+# [--let $assert_quiet= 1]
+# [--let $rpl_debug= 1]
+# --source include/rpl_assert.inc
+#
+# Parameters:
+#
+# $assert_text
+# Text that describes what is being checked. By default, this text
+# is written to the query log.
+#
+# $assert_cond
+# Condition to check. See above for details about the format. The
+# condition will be executed as `SELECT $assert_cond`. Note: this
+# condition is parsed using SQL statements, quoted inside single
+# quotes, so it must not contain single quotes itself (use double
+# quotes for strings).
+#
+# $assert_quiet
+# Do not print $assert_text to the query log.
+#
+# $rpl_debug
+# Print extra debug info.
+
+
+if ($rpl_debug)
+{
+ --echo # debug: assert_text='$assert_text' assert_cond='$assert_cond'
+}
+
+# Sanity-check input
+if (`SELECT "$assert_text" = ""`)
+{
+ --die ERROR IN TEST: the mysqltest variable rpl_test must be set
+}
+
+# Evaluate square brackets in cond.
+--let $_rpl_assert_substmt_number= 1
+--let $_rpl_interpolated_cond= $assert_cond
+--let $_rpl_assert_lbracket= `SELECT LOCATE('[', '$_rpl_interpolated_cond')`
+while ($_rpl_assert_lbracket)
+{
+ # Get position of right bracket
+ --let $_rpl_assert_rbracket= `SELECT LOCATE(']', '$_rpl_interpolated_cond')`
+ if (!$_rpl_assert_rbracket)
+ {
+ --echo BUG IN TEST: Mismatching square brackets in assert_cond: '$assert_cond'
+ --die BUG IN TEST: Mismatching square brackets in $assert_cond
+ }
+ # Get sub-statement and result of it
+ --let $_rpl_assert_substmt= `SELECT SUBSTRING('$_rpl_interpolated_cond', $_rpl_assert_lbracket + 1, $_rpl_assert_rbracket - $_rpl_assert_lbracket - 1)`
+ --let $_rpl_assert_substmt_result= query_get_value($_rpl_assert_substmt)
+ if ($rpl_debug)
+ {
+ --echo # debug: sub-statement='$_rpl_assert_substmt' result='$rpl_assert_result'
+ }
+ # Replace sub-statement by its result
+ --let $_rpl_interpolated_cond= `SELECT REPLACE('$_rpl_interpolated_cond', '[$_rpl_assert_substmt]', '$_rpl_assert_substmt_result')`
+ # Replace result references by result
+ --let $_rpl_interpolated_cond= `SELECT REPLACE('$_rpl_interpolated_cond', '<$_rpl_assert_substmt_number>', '$_rpl_assert_substmt_result')`
+
+ --let $_rpl_assert_lbracket= `SELECT LOCATE('[', '$_rpl_interpolated_cond')`
+
+ --inc $_rpl_assert_substmt_number
+}
+
+if ($rpl_debug)
+{
+ --echo # debug: interpolated_cond='$_rpl_interpolated_cond'
+}
+
+# Execute.
+--let $_rpl_assert_result= `SELECT $_rpl_interpolated_cond`
+
+if ($rpl_debug)
+{
+ --echo # debug: result='$_rpl_assert_result'
+}
+
+# Check.
+if (!$_rpl_assert_result)
+{
+ --echo ######## Test assertion failed: $assert_text ########
+ --echo Dumping debug info:
+ --source include/show_rpl_debug_info.inc
+ --echo Assertion text: '$assert_text'
+ --echo Assertion condition: '$assert_cond'
+ --echo Assertion condition, interpolated: '$_rpl_interpolated_cond'
+ --echo Assertion result: '$_rpl_assert_result'
+ --die Test assertion failed in rpl_assertion.inc
+}
+
+if (!$assert_quiet)
+{
+ --echo # Asserted this: $assert_text
+}
+
+--let $assert_text=
+--let $assert_cond=