Markus Mäkelä 41670875fc
MXS-2146: Add csmon test case
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.
2018-11-19 20:19:21 +02:00

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;
}