83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * @file mxs922_monitor.cpp MXS-922: Monitor creation test
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include <maxtest/config_operations.hh>
 | 
						|
 | 
						|
int main(int argc, char* argv[])
 | 
						|
{
 | 
						|
    TestConnections* test = new TestConnections(argc, argv);
 | 
						|
    Config config(test);
 | 
						|
 | 
						|
    test->tprintf("Creating monitor");
 | 
						|
 | 
						|
    config.create_all_listeners();
 | 
						|
    config.create_monitor("mysql-monitor", "mysqlmon", 500);
 | 
						|
    config.reset();
 | 
						|
 | 
						|
    test->maxscales->wait_for_monitor();
 | 
						|
 | 
						|
    test->check_maxscale_alive(0);
 | 
						|
 | 
						|
    test->maxscales->ssh_node(0, "maxctrl unlink monitor mysql-monitor server{0,1,2,3}", true);
 | 
						|
    config.destroy_monitor("mysql-monitor");
 | 
						|
 | 
						|
    test->check_maxscale_alive(0);
 | 
						|
 | 
						|
    test->maxscales->ssh_node(0, "for i in 0 1 2 3; do maxadmin clear server server$i running; done", true);
 | 
						|
 | 
						|
    test->add_result(test->maxscales->connect_maxscale(0) == 0, "Should not be able to connect");
 | 
						|
 | 
						|
    config.create_monitor("mysql-monitor2", "mysqlmon", 500);
 | 
						|
    config.add_created_servers("mysql-monitor2");
 | 
						|
 | 
						|
    test->maxscales->wait_for_monitor();
 | 
						|
    test->check_maxscale_alive(0);
 | 
						|
 | 
						|
    /** Try to alter the monitor user */
 | 
						|
    test->maxscales->connect_maxscale(0);
 | 
						|
    execute_query(test->maxscales->conn_rwsplit[0], "DROP USER 'test'@'%%'");
 | 
						|
    execute_query(test->maxscales->conn_rwsplit[0], "CREATE USER 'test'@'%%' IDENTIFIED BY 'test'");
 | 
						|
    execute_query(test->maxscales->conn_rwsplit[0], "GRANT ALL ON *.* TO 'test'@'%%'");
 | 
						|
    test->maxscales->close_maxscale_connections(0);
 | 
						|
 | 
						|
    config.alter_monitor("mysql-monitor2", "user", "test");
 | 
						|
    config.alter_monitor("mysql-monitor2", "password", "test");
 | 
						|
 | 
						|
    test->maxscales->wait_for_monitor();
 | 
						|
    test->check_maxscale_alive(0);
 | 
						|
 | 
						|
    /** Remove the user */
 | 
						|
    test->maxscales->connect_maxscale(0);
 | 
						|
    execute_query(test->maxscales->conn_rwsplit[0], "DROP USER 'test'@'%%'");
 | 
						|
 | 
						|
    config.restart_monitors();
 | 
						|
 | 
						|
    /**
 | 
						|
     * Make sure the server are in a bad state. This way we'll know that the
 | 
						|
     * monitor is running if the states have changed and the query is
 | 
						|
     * successful.
 | 
						|
     */
 | 
						|
    test->maxscales->ssh_node(0, "for i in 0 1 2 3; do maxadmin clear server server$i running; done", true);
 | 
						|
 | 
						|
    test->maxscales->wait_for_monitor();
 | 
						|
    test->add_result(execute_query_silent(test->maxscales->conn_rwsplit[0], "SELECT 1") == 0,
 | 
						|
                     "Query should fail when monitor has wrong credentials");
 | 
						|
    test->maxscales->close_maxscale_connections(0);
 | 
						|
 | 
						|
    for (int i = 0; i < test->repl->N; i++)
 | 
						|
    {
 | 
						|
        config.alter_server(i, "monitoruser", "skysql");
 | 
						|
        config.alter_server(i, "monitorpw", "skysql");
 | 
						|
    }
 | 
						|
 | 
						|
    config.restart_monitors();
 | 
						|
    sleep(1);
 | 
						|
    test->check_maxscale_alive(0);
 | 
						|
 | 
						|
    int rval = test->global_result;
 | 
						|
    delete test;
 | 
						|
    return rval;
 | 
						|
}
 |