60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
/**
|
|
* MXS-1503: Testing of master_reconnection and master_failure_mode=error_on_write
|
|
*
|
|
* https://jira.mariadb.org/browse/MXS-1503
|
|
*/
|
|
#include "testconnections.h"
|
|
#include <vector>
|
|
#include <iostream>
|
|
#include <functional>
|
|
|
|
using std::cout;
|
|
using std::endl;
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
TestConnections test(argc, argv);
|
|
|
|
auto query = [&test](std::string q) {
|
|
return execute_query_silent(test.maxscales->conn_rwsplit[0], q.c_str());
|
|
};
|
|
|
|
auto error_matches = [&test](std::string q) {
|
|
std::string err = mysql_error(test.maxscales->conn_rwsplit[0]);
|
|
return err.find(q) != std::string::npos;
|
|
};
|
|
|
|
auto block_master = [&test]() {
|
|
test.repl->block_node(0);
|
|
sleep(10);
|
|
};
|
|
|
|
auto unblock_master = [&test]() {
|
|
test.repl->unblock_node(0);
|
|
sleep(10);
|
|
};
|
|
|
|
test.maxscales->connect();
|
|
test.expect(query("DROP TABLE IF EXISTS test.t1") == 0,
|
|
"DROP TABLE should work.");
|
|
test.expect(query("CREATE TABLE test.t1 (id INT)") == 0,
|
|
"CREATE TABLE should work.");
|
|
test.expect(query("INSERT INTO test.t1 VALUES (1)") == 0,
|
|
"Write should work at the start of the test.");
|
|
|
|
block_master();
|
|
test.expect(query("INSERT INTO test.t1 VALUES (1)") != 0,
|
|
"Write should fail after master is blocked.");
|
|
|
|
test.expect(error_matches("read-only"),
|
|
"Error should mention read-only mode");
|
|
|
|
unblock_master();
|
|
test.expect(query("INSERT INTO test.t1 VALUES (1)") == 0,
|
|
"Write should work after unblocking master");
|
|
|
|
query("DROP TABLE test.t1");
|
|
|
|
return test.global_result;
|
|
}
|