From c23930b2eebe7ee59e0baac6f8ebdd79a96e8beb Mon Sep 17 00:00:00 2001 From: Lisandro Pin Date: Thu, 30 Oct 2025 11:54:15 +0100 Subject: [PATCH] Add TAP test for `mysql-ignore_min_gtid_annotations` Co-authored-by: Wazir Ahmed --- test/tap/groups/groups.json | 3 +- test/tap/tests/Makefile | 3 ++ test/tap/tests/test_ignore_min_gtid-t.cpp | 66 +++++++++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 test/tap/tests/test_ignore_min_gtid-t.cpp diff --git a/test/tap/groups/groups.json b/test/tap/groups/groups.json index c49515924..97b43321b 100644 --- a/test/tap/groups/groups.json +++ b/test/tap/groups/groups.json @@ -226,5 +226,6 @@ "test_ssl_fast_forward-2_libmariadb-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ], "test_ssl_fast_forward-2_libmysql-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ], "test_ssl_fast_forward-3_libmariadb-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ], - "test_ssl_fast_forward-3_libmysql-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ] + "test_ssl_fast_forward-3_libmysql-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ], + "test_ignore_min_gtid-t": [ "default-g4", "mysql-auto_increment_delay_multiplex=0-g4", "mysql-multiplexing=false-g4", "mysql-query_digests=0-g4", "mysql-query_digests_keep_comment=1-g4" ] } diff --git a/test/tap/tests/Makefile b/test/tap/tests/Makefile index 082923fed..ae8833715 100644 --- a/test/tap/tests/Makefile +++ b/test/tap/tests/Makefile @@ -193,6 +193,9 @@ sqlite3-t: sqlite3-t.cpp $(TAP_LDIR)/libtap.so test_gtid_forwarding-t: test_gtid_forwarding-t.cpp $(TAP_LDIR)/libtap.so $(CXX) $< $(IDIRS) $(LDIRS) $(OPT) $(MYLIBS) -o $@ +test_ignore_min_gtid-t: test_ignore_min_gtid-t.cpp $(TAP_LDIR)/libtap.so + $(CXX) $< $(IDIRS) $(LDIRS) $(OPT) $(MYLIBS) -o $@ + test_admin_prometheus_metrics_dump-t: test_admin_prometheus_metrics_dump-t.cpp $(TAP_LDIR)/libtap.so $(CXX) $< $(IDIRS) $(LDIRS) $(OPT) $(MYLIBS) -o $@ diff --git a/test/tap/tests/test_ignore_min_gtid-t.cpp b/test/tap/tests/test_ignore_min_gtid-t.cpp new file mode 100644 index 000000000..fdbb8a701 --- /dev/null +++ b/test/tap/tests/test_ignore_min_gtid-t.cpp @@ -0,0 +1,66 @@ +/** + * @file test_ignore_min_gtid-t.cpp + * @brief This test file verifies the functionality of the mysql-ignore_min_gtid_annotations variable. + * - Sets mysql-ignore_min_gtid_annotations=true, so queries annotated with min_gtid succeed. + * - Sets mysql-ignore_min_gtid_annotations=false, so queries annotated with min_gtid fail. + */ + +#include + +#include "command_line.h" +#include "mysql.h" +#include "tap.h" +#include "utils.h" + +int main(int, char**) { + CommandLine cl; + if (cl.getEnv()) { + diag("Failed to get the required environmental variables."); + return -1; + } + + plan(2); + + MYSQL* admin = init_mysql_conn(cl.host, cl.admin_port, cl.admin_username, cl.admin_password); + if (!admin) { + fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(admin)); + return exit_status(); + } + + MYSQL* proxy = init_mysql_conn(cl.host, cl.port, cl.username, cl.password); + if (!proxy) { + fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(proxy)); + return exit_status(); + } + + const char *query = "SELECT /*+ ;min_gtid=01010101-0101-0101-0101-010101010101:101010101010 */ 1"; + + diag(" ========== Test 1 =========="); + + MYSQL_QUERY_T(admin, "SET mysql-ignore_min_gtid_annotations = true"); + MYSQL_QUERY_T(admin, "LOAD MYSQL VARIABLES TO RUNTIME"); + + int rc = run_q(proxy, query); + if (rc == 0) { + MYSQL_RES* result = mysql_store_result(proxy); + mysql_free_result(result); + } + ok(rc == 0, "Query execution should be successful. mysql-ignore_min_gtid_annotations=%s, rc=%d", "true", rc); + + diag(" ========== Test 2 =========="); + + MYSQL_QUERY_T(admin, "SET mysql-ignore_min_gtid_annotations = false"); + MYSQL_QUERY_T(admin, "LOAD MYSQL VARIABLES TO RUNTIME"); + + rc = run_q(proxy, query); + if (rc == 0) { + MYSQL_RES* result = mysql_store_result(proxy); + mysql_free_result(result); + } + ok(rc != 0, "Query execution should fail. mysql-ignore_min_gtid_annotations=%s, rc=%d", "false", rc); + + mysql_close(admin); + mysql_close(proxy); + + return exit_status(); +}