
Added a test case that does a set of sanity checks on the monitor. As the monitor is very simple, there are not a lot of things to test without access to the actual instances (e.g. ExeMgr failures need to be tested). Currently the test always passes as ColumnStore clusters aren't implemented for the test framework.
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
/**
|
|
* MXS-2146: Test case for csmon
|
|
*/
|
|
|
|
#include "testconnections.h"
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
TestConnections::require_columnstore(true);
|
|
TestConnections test(argc, argv);
|
|
|
|
// Simple check for correct routing behavior
|
|
test.maxscales->connect();
|
|
auto slave = get_row(test.maxscales->conn_rwsplit[0], "SELECT @@server_id");
|
|
test.try_query(test.maxscales->conn_rwsplit[0], "BEGIN");
|
|
auto master = get_row(test.maxscales->conn_rwsplit[0], "SELECT @@server_id");
|
|
test.try_query(test.maxscales->conn_rwsplit[0], "COMMIT");
|
|
test.expect(slave != master, "Master and slave server_id should be different");
|
|
test.maxscales->disconnect();
|
|
|
|
// Master failures are detected
|
|
test.maxscales->connect();
|
|
test.repl->block_node(0);
|
|
test.expect(execute_query_silent(test.maxscales->conn_rwsplit[0], "SELECT @@last_insert_id") != 0,
|
|
"Query should fail when the master is blocked");
|
|
test.repl->unblock_node(0);
|
|
test.maxscales->disconnect();
|
|
|
|
// Slave failures are detected
|
|
test.maxscales->connect();
|
|
test.repl->block_node(1);
|
|
test.maxscales->wait_for_monitor();
|
|
auto backup_slave = get_row(test.maxscales->conn_rwsplit[0], "SELECT @@server_id");
|
|
test.expect(backup_slave == master, "Query should go to the master when the slave is down");
|
|
test.repl->unblock_node(1);
|
|
test.maxscales->disconnect();
|
|
|
|
return test.global_result;
|
|
}
|