40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * MXS-2146: Test case for csmon
 | 
						|
 */
 | 
						|
 | 
						|
#include <maxtest/testconnections.hh>
 | 
						|
 | 
						|
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;
 | 
						|
}
 |