From a4af5d40edbdfc4a82155d45f8793dc4e16f374d Mon Sep 17 00:00:00 2001 From: val Date: Sun, 26 Apr 2020 20:24:03 +0000 Subject: [PATCH] transaction_isolation test --- test/tap/tests/Makefile | 6 +- ..._default_value_transaction_isolation-t.cpp | 91 +++++++++++++++++++ 2 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 test/tap/tests/test_default_value_transaction_isolation-t.cpp diff --git a/test/tap/tests/Makefile b/test/tap/tests/Makefile index d8489f756..74e14b2c4 100644 --- a/test/tap/tests/Makefile +++ b/test/tap/tests/Makefile @@ -75,13 +75,13 @@ all: tests .PHONY: clean clean: - rm -f basic-t set_character_set-t charset_unsigned_int-t select_config_file-t sqlite3-t galera_1_timeout_count galera_2_timeout_no_count aurora test_set_character_results-t test_ps_large_result-t set_testing-t test_firewall-t || true + rm -f basic-t set_character_set-t charset_unsigned_int-t select_config_file-t sqlite3-t galera_1_timeout_count galera_2_timeout_no_count aurora test_set_character_results-t test_ps_large_result-t set_testing-t test_firewall-t test_default_value_transaction_isolation-t || true OPT=-O2 -Wl,--no-as-needed -SRC=basic-t.cpp set_character_set-t.cpp charset_unsigned_int-t.cpp select_config_file-t.cpp sqlite3-t.cpp galera_1_timeout_count.cpp galera_2_timeout_no_count.cpp aurora.cpp test_set_character_results-t.cpp test_ps_large_result-t.cpp set_testing-t.cpp test_firewall-t.cpp +SRC=basic-t.cpp set_character_set-t.cpp charset_unsigned_int-t.cpp select_config_file-t.cpp sqlite3-t.cpp galera_1_timeout_count.cpp galera_2_timeout_no_count.cpp aurora.cpp test_set_character_results-t.cpp test_ps_large_result-t.cpp set_testing-t.cpp test_firewall-t.cpp test_default_value_transaction_isolation-t.cpp -tests: basic-t set_character_set-t charset_unsigned_int-t select_config_file-t sqlite3-t test_set_character_results-t test_ps_large_result-t set_testing-t test_firewall-t +tests: basic-t set_character_set-t charset_unsigned_int-t select_config_file-t sqlite3-t test_set_character_results-t test_ps_large_result-t set_testing-t test_firewall-t test_default_value_transaction_isolation-t testgalera: galera_1_timeout_count galera_2_timeout_no_count testaurora: aurora diff --git a/test/tap/tests/test_default_value_transaction_isolation-t.cpp b/test/tap/tests/test_default_value_transaction_isolation-t.cpp new file mode 100644 index 000000000..cca5d2080 --- /dev/null +++ b/test/tap/tests/test_default_value_transaction_isolation-t.cpp @@ -0,0 +1,91 @@ +#include +#include +#include +#include + +#include +#include +#include + +#include "tap.h" +#include "command_line.h" +#include "utils.h" + +int main(int argc, char** argv) { + CommandLine cl; + + if(cl.getEnv()) + return exit_status(); + + plan(3); + diag("Testing default value for session varable transaction isolation"); + + MYSQL* mysqladmin = mysql_init(NULL); + if (!mysqladmin) + return exit_status(); + + if (!mysql_real_connect(mysqladmin, cl.host, cl.admin_username, cl.admin_password, NULL, cl.admin_port, NULL, 0)) { + fprintf(stderr, "File %s, line %d, Error: %s\n", + __FILE__, __LINE__, mysql_error(mysqladmin)); + return exit_status(); + } + + // Set default non-existing value for transaction isolation level + MYSQL_QUERY(mysqladmin, "set mysql-default_isolation_level='non-existing-value-1'"); + MYSQL_QUERY(mysqladmin, "load mysql variables to runtime"); + + MYSQL* mysql_1 = mysql_init(NULL); + if (!mysql_1) + return exit_status(); + + if (!mysql_real_connect(mysql_1, cl.host, cl.username, cl.password, NULL, cl.port, NULL, 0)) { + fprintf(stderr, "Failed to connect to database: Error: %s\n", + mysql_error(mysql_1)); + return exit_status(); + } + MYSQL_QUERY(mysql_1, "select 1"); + MYSQL_RES* result = mysql_store_result(mysql_1); + ok(mysql_num_rows(result) == 1, "Select statement should be executed on connection 1"); + mysql_free_result(result); + + MYSQL* mysql_2 = mysql_init(NULL); + if (!mysql_2) + return exit_status(); + + if (!mysql_real_connect(mysql_2, cl.host, cl.username, cl.password, NULL, cl.port, NULL, 0)) { + fprintf(stderr, "Failed to connect to database: Error: %s\n", + mysql_error(mysql_2)); + return exit_status(); + } + MYSQL_QUERY(mysql_2, "select 1"); + result = mysql_store_result(mysql_2); + ok(mysql_num_rows(result) == 1, "Select statement should be executed on connection 1"); + mysql_free_result(result); + + // Change default non-existing value for transaction isolation level + MYSQL_QUERY(mysqladmin, "set mysql-default_isolation_level='non-existing-value-2'"); + MYSQL_QUERY(mysqladmin, "load mysql variables to runtime"); + + // Try third connection with different default value of the session variable + MYSQL* mysql_3 = mysql_init(NULL); + if (!mysql_3) + return exit_status(); + + if (!mysql_real_connect(mysql_3, cl.host, cl.username, cl.password, NULL, cl.port, NULL, 0)) { + fprintf(stderr, "Failed to connect to database: Error: %s\n", + mysql_error(mysql_3)); + return exit_status(); + } + MYSQL_QUERY(mysql_3, "select 1"); + result = mysql_store_result(mysql_3); + ok(mysql_num_rows(result) == 1, "Select statement should be executed on connection 1"); + mysql_free_result(result); + + mysql_close(mysql_3); + mysql_close(mysql_2); + mysql_close(mysql_1); + mysql_close(mysqladmin); + + return exit_status(); +} +