Files
MaxScale/maxscale-system-test/mxs1961_standalone_rejoin.cpp
Markus Mäkelä 4a215b9ca2 MXS-1961: Add test case
Added a test case that reproduces the problem.
2018-07-07 09:28:50 +03:00

144 lines
2.8 KiB
C++

/**
* MXS-1961: Standalone master loses master status
*/
#include "testconnections.h"
#include <iostream>
using namespace std;
void checkpoint(TestConnections& test)
{
const int v = 5;
test.maxscales->wait_for_monitor(v);
for (auto&& s: {"server1", "server2", "server3"})
{
auto status = test.get_server_status(s);
cout << s << " { ";
for (auto a: status)
{
cout << a << ", ";
}
cout << "}\n";
}
}
int main(int argc, char *argv[])
{
Mariadb_nodes::require_gtid(true);
TestConnections test(argc, argv);
auto status = [&](const char* server)
{
return test.get_server_status(server);
};
auto comment = [&](const char* comment)
{
cout << comment << endl;
test.maxscales->ssh_node_f(0, true, "echo '----- %s -----' >> /var/log/maxscale/maxscale.log", comment);
};
auto slave = [&](const char* name)
{
static StringSet slave{"Slave", "Running"};
test.assert(status(name) == slave, "'%s' should be a slave", name);
};
auto master = [&](const char* name)
{
static StringSet master{"Master", "Running"};
test.assert(status(name) == master, "'%s' should be the master", name);
};
auto down = [&](const char* name)
{
static StringSet down{"Down"};
test.assert(status(name) == down, "'%s' should be down", name);
};
auto block = [&](int node)
{
test.repl->block_node(node);
checkpoint(test);
};
auto unblock = [&](int node)
{
test.repl->unblock_node(node);
checkpoint(test);
};
test.maxscales->wait_for_monitor(1);
master("server1");
slave("server2");
slave("server3");
comment("Blocking server1");
block(0);
comment("Blocking server2");
block(1);
down("server1");
down("server2");
master("server3");
comment("Unblocking server2");
unblock(1);
down("server1");
slave("server2");
master("server3");
comment("Blocking server3");
block(2);
comment("Unblocking server3");
unblock(2);
down("server1");
master("server2");
slave("server3");
comment("Blocking server3");
block(2);
down("server1");
master("server2");
down("server3");
comment("Unblocking server1");
unblock(0);
slave("server1");
master("server2");
down("server3");
comment("Blocking server2");
block(1);
master("server1");
down("server2");
down("server3");
comment("Unblocking server2");
unblock(1);
master("server1");
slave("server2");
down("server3");
comment("Unblocking server3");
unblock(2);
master("server1");
slave("server2");
slave("server3");
test.maxscales->stop();
test.repl->fix_replication();
return test.global_result;
}