MaxScale/maxscale-system-test/mxs922_monitor.cpp
2017-12-08 12:23:04 +02:00

83 lines
2.5 KiB
C++

/**
* @file mxs922_monitor.cpp MXS-922: Monitor creation test
*
*/
#include "config_operations.h"
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();
sleep(1);
test->check_maxscale_alive(0);
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");
sleep(1);
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");
sleep(1);
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);
sleep(1);
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);
test->check_log_err(0, "Fatal", false);
int rval = test->global_result;
delete test;
return rval;
}