MXS-2168 Update test_cycle_find

The test now uses both server id:s and hostname:port combinations.
This commit is contained in:
Esa Korhonen
2018-11-16 10:21:16 +02:00
parent c61aaee0ba
commit 5d4775cac1

View File

@ -16,7 +16,6 @@
#include <iostream> #include <iostream>
#include <numeric> #include <numeric>
#include <string> #include <string>
#include <sstream>
#include <vector> #include <vector>
#include <maxbase/log.hh> #include <maxbase/log.hh>
#include <maxbase/maxbase.hh> #include <maxbase/maxbase.hh>
@ -33,7 +32,7 @@ const int MAX_EDGES = 20;
class MariaDBMonitor::Test class MariaDBMonitor::Test
{ {
// These defines are required since Centos 6 doesn't support vector literal initialisers :/ // TODO: Now using C++11 even on Centos 6 so get rid of these
typedef struct typedef struct
{ {
int members[MAX_CYCLE_SIZE]; int members[MAX_CYCLE_SIZE];
@ -56,17 +55,22 @@ class MariaDBMonitor::Test
} EdgeArray; } EdgeArray;
public: public:
Test(); Test(bool use_hostnames);
~Test(); ~Test();
int run_tests(); int run_tests();
private: private:
MariaDBMonitor* m_monitor; MariaDBMonitor* m_monitor = NULL;
int m_current_test; int m_current_test = 0;
bool m_use_hostnames = true;
void init_servers(int count); void init_servers(int count);
void clear_servers(); void clear_servers();
void add_replication(EdgeArray edges); void add_replication(EdgeArray edges);
int check_result_cycles(CycleArray expected_cycles); int check_result_cycles(CycleArray expected_cycles);
string create_servername(int i);
string create_hostname(int i);
MariaDBServer* get_server(int i);
}; };
int main() int main()
@ -74,13 +78,19 @@ int main()
maxbase::init(); maxbase::init();
maxbase::Log log; maxbase::Log log;
MariaDBMonitor::Test tester; bool use_hostnames = true;
return tester.run_tests(); MariaDBMonitor::Test tester1(use_hostnames);
int rval = tester1.run_tests();
use_hostnames = false;
MariaDBMonitor::Test tester2(use_hostnames);
rval += tester2.run_tests();
return rval;
} }
MariaDBMonitor::Test::Test() MariaDBMonitor::Test::Test(bool use_hostnames)
: m_monitor(new MariaDBMonitor(NULL)) : m_monitor(new MariaDBMonitor(NULL))
, m_current_test(0) , m_use_hostnames(use_hostnames)
{ {
} }
@ -140,20 +150,36 @@ int MariaDBMonitor::Test::run_tests()
void MariaDBMonitor::Test::init_servers(int count) void MariaDBMonitor::Test::init_servers(int count)
{ {
clear_servers(); clear_servers();
m_monitor->m_assume_unique_hostnames = m_use_hostnames;
mxb_assert(m_monitor->m_servers.empty() && m_monitor->m_servers_by_id.empty()); mxb_assert(m_monitor->m_servers.empty() && m_monitor->m_servers_by_id.empty());
for (int i = 1; i < count + 1; i++) for (int i = 1; i < count + 1; i++)
{ {
SERVER* base_server = new SERVER; // Contents mostly undefined SERVER* base_server = new SERVER; // Contents mostly undefined
std::stringstream server_name; string server_name = create_servername(i);
server_name << "Server" << i; base_server->name = MXS_STRDUP(server_name.c_str());
base_server->name = MXS_STRDUP(server_name.str().c_str());
MXS_MONITORED_SERVER* mon_server = new MXS_MONITORED_SERVER; // Contents mostly undefined MXS_MONITORED_SERVER* mon_server = new MXS_MONITORED_SERVER; // Contents mostly undefined
mon_server->server = base_server; mon_server->server = base_server;
MariaDBServer* new_server = new MariaDBServer(mon_server, i - 1);
new_server->m_server_id = i; MariaDBServer* mariadb_server = new MariaDBServer(mon_server, i - 1, m_use_hostnames);
m_monitor->m_servers.push_back(new_server);
m_monitor->m_servers_by_id[i] = new_server; if (m_use_hostnames)
{
string hostname = create_hostname(i);
strcpy(base_server->address, hostname.c_str());
base_server->port = i;
}
else
{
mariadb_server->m_server_id = i;
}
m_monitor->m_servers.push_back(mariadb_server);
if (!m_use_hostnames)
{
m_monitor->m_servers_by_id[i] = mariadb_server;
}
} }
m_current_test++; m_current_test++;
} }
@ -189,12 +215,23 @@ void MariaDBMonitor::Test::add_replication(EdgeArray edges)
{ {
break; break;
} }
auto iter2 = m_monitor->m_servers_by_id.find(slave_id);
mxb_assert(iter2 != m_monitor->m_servers_by_id.end());
SlaveStatus ss; SlaveStatus ss;
ss.master_server_id = master_id;
ss.slave_io_running = SlaveStatus::SLAVE_IO_YES; ss.slave_io_running = SlaveStatus::SLAVE_IO_YES;
(*iter2).second->m_slave_status.push_back(ss); ss.slave_sql_running = true;
if (m_use_hostnames)
{
ss.master_host = create_hostname(master_id);
ss.master_port = master_id;
}
else
{
ss.master_server_id = master_id;
ss.seen_connected = true;
}
MariaDBServer* slave = get_server(slave_id);
slave->m_slave_status.push_back(ss);
} }
m_monitor->build_replication_graph(); m_monitor->build_replication_graph();
@ -209,12 +246,12 @@ void MariaDBMonitor::Test::add_replication(EdgeArray edges)
*/ */
int MariaDBMonitor::Test::check_result_cycles(CycleArray expected_cycles) int MariaDBMonitor::Test::check_result_cycles(CycleArray expected_cycles)
{ {
std::stringstream test_name_ss; string test_name = "Test " + std::to_string(m_current_test) + " ("
test_name_ss << "Test " << m_current_test << ": "; + (m_use_hostnames ? "hostnames" : "server id:s") + "): ";
string test_name = test_name_ss.str();
int errors = 0; int errors = 0;
// Copy the index->server map so it can be checked later
IdToServerMap no_cycle_servers = m_monitor->m_servers_by_id; // Copy the servers for later comparison.
std::set<MariaDBServer*> no_cycle_servers(m_monitor->m_servers.begin(), m_monitor->m_servers.end());
std::set<int> used_cycle_ids; std::set<int> used_cycle_ids;
for (auto ind_cycles = 0; ind_cycles < MAX_CYCLES; ind_cycles++) for (auto ind_cycles = 0; ind_cycles < MAX_CYCLES; ind_cycles++)
{ {
@ -227,7 +264,8 @@ int MariaDBMonitor::Test::check_result_cycles(CycleArray expected_cycles)
{ {
break; break;
} }
auto cycle_server = m_monitor->get_server(search_id);
MariaDBServer* cycle_server = get_server(search_id);
if (cycle_server->m_node.cycle == NodeData::CYCLE_NONE) if (cycle_server->m_node.cycle == NodeData::CYCLE_NONE)
{ {
cout << test_name << cycle_server->name() << " is not in a cycle when it should.\n"; cout << test_name << cycle_server->name() << " is not in a cycle when it should.\n";
@ -254,14 +292,13 @@ int MariaDBMonitor::Test::check_result_cycles(CycleArray expected_cycles)
<< " when " << cycle_id << " was expected.\n"; << " when " << cycle_id << " was expected.\n";
errors++; errors++;
} }
no_cycle_servers.erase(cycle_server->m_server_id); no_cycle_servers.erase(cycle_server);
} }
} }
// Check that servers not in expected_cycles are not in a cycle // Check that servers not in expected_cycles are not in a cycle
for (auto& map_elem : no_cycle_servers) for (MariaDBServer* server : no_cycle_servers)
{ {
MariaDBServer* server = map_elem.second;
if (server->m_node.cycle != NodeData::CYCLE_NONE) if (server->m_node.cycle != NodeData::CYCLE_NONE)
{ {
cout << server->name() << " is in cycle " << server->m_node.cycle << " when none was expected.\n"; cout << server->name() << " is in cycle " << server->m_node.cycle << " when none was expected.\n";
@ -271,3 +308,21 @@ int MariaDBMonitor::Test::check_result_cycles(CycleArray expected_cycles)
return errors; return errors;
} }
MariaDBServer* MariaDBMonitor::Test::get_server(int i)
{
auto rval = m_use_hostnames ? m_monitor->get_server(create_hostname(i), i) :
m_monitor->get_server(i);
mxb_assert(rval);
return rval;
}
string MariaDBMonitor::Test::create_servername(int i)
{
return "Server" + std::to_string(i);
}
string MariaDBMonitor::Test::create_hostname(int i)
{
return "hostname" + std::to_string(i) + ".mariadb.com";
}