Johan Wikman dc94ec9963 MXS-1889 Improve test program
Verify that once there are slaves, we are connected
to a slave as expected.
2018-06-01 12:45:19 +03:00

86 lines
2.0 KiB
C++

/**
* MXS-1889: A single remaining master is valid for readconnroute configured with 'router_options=slave'
*
* https://jira.mariadb.org/browse/MXS-1889
*/
#include "testconnections.h"
#include <iostream>
#include <string>
using namespace std;
namespace
{
string get_server_id(TestConnections& test, MYSQL* pMysql)
{
string id;
int rv = mysql_query(pMysql, "SELECT @@server_id");
test.add_result(rv, "Could not execute query.");
if (rv == 0)
{
MYSQL_RES* pResult = mysql_store_result(pMysql);
test.assert(pResult, "Could not store result.");
if (pResult)
{
unsigned int n = mysql_field_count(pMysql);
test.assert(n == 1, "Unexpected number of fields.");
MYSQL_ROW pzRow = mysql_fetch_row(pResult);
test.assert(pzRow, "Returned row was NULL.");
if (pzRow)
{
id = pzRow[0];
}
mysql_free_result(pResult);
}
}
return id;
}
}
int main(int argc, char** argv)
{
TestConnections test(argc, argv);
test.tprintf("Taking down all slaves.");
test.repl->stop_node(1);
test.repl->stop_node(2);
test.repl->stop_node(3);
test.tprintf("Giving monitor time to detect the situation...");
sleep(5);
test.maxscales->connect();
// All slaves down, so we expect a connection to the master.
string master_id = get_server_id(test, test.maxscales->conn_slave[0]);
test.tprintf("Master id: %s", master_id.c_str());
test.maxscales->disconnect();
test.tprintf("Starting all slaves.");
test.repl->start_node(3);
test.repl->start_node(2);
test.repl->start_node(1);
test.tprintf("Giving monitor time to detect the situation...");
sleep(5);
test.maxscales->connect();
string slave_id = get_server_id(test, test.maxscales->conn_slave[0]);
test.tprintf("Server id: %s", slave_id.c_str());
test.assert(slave_id != master_id, "Expected something else but %s", master_id.c_str());
return test.global_result;
}