Files
MaxScale/system-test/connection_limit.cpp
Esa Korhonen 08f5174915 MXS-2900 Rename maxscale-system-test directory to system-test
A link with the old directory name is provided.
2020-07-28 15:24:27 +03:00

105 lines
3.2 KiB
C++

/**
* @file connection_limit.cpp connection_limit check if max_connections parameter works
*
* - Maxscale.cnf contains max_connections=10 for RWSplit, max_connections=20 for ReadConn master and
* max_connections=25 for ReadConn slave
* - create max num of connections and check tha N+1 connection fails
*/
#include "testconnections.h"
void check_with_wrong_pw(int router, int max_conn, TestConnections& test);
void check_max_conn(int router, int max_conn, TestConnections& test);
int main(int argc, char* argv[])
{
TestConnections test(argc, argv);
// First test with wrong pw to see that count is properly decremented.
test.tprintf("Trying 20 connections with RWSplit with wrong password\n");
check_with_wrong_pw(0, 20, test);
if (test.ok())
{
test.tprintf("Trying 11 connections with RWSplit\n");
check_max_conn(0, 10, test);
}
if (test.ok())
{
test.tprintf("Trying 21 connections with Readconn master\n");
check_max_conn(1, 20, test);
}
if (test.ok())
{
test.tprintf("Trying 26 connections with Readconnn slave\n");
check_max_conn(2, 25, test);
}
test.check_maxscale_alive(0);
int rval = test.global_result;
return rval;
}
void check_with_wrong_pw(int router, int max_conn, TestConnections& test)
{
// Check MXS-2645, connection count is not decremented properly when authentication fails.
const char wrong_pw[] = "batman";
bool limit_reached = false;
for (int i = 0; i < max_conn && !limit_reached; i++)
{
MYSQL* failed_conn = open_conn(
test.maxscales->ports[0][router], test.maxscales->IP[0],
test.maxscales->user_name, wrong_pw,
test.ssl);
auto error = mysql_errno(failed_conn);
if (error == 0)
{
test.expect(false, "Connection succeeded when it should have failed.");
}
else if (error == 1040)
{
test.expect(false, "Connection limit wrongfully reached.");
limit_reached = true;
}
mysql_close(failed_conn);
}
}
void check_max_conn(int router, int max_conn, TestConnections& test)
{
MYSQL* conn[max_conn + 1];
int i;
for (i = 0; i < max_conn; i++)
{
conn[i] = open_conn(test.maxscales->ports[0][router],
test.maxscales->IP[0],
test.maxscales->user_name,
test.maxscales->password,
test.ssl);
if (mysql_errno(conn[i]) != 0)
{
test.add_result(1, "Connection %d failed, error is %s\n", i, mysql_error(conn[i]));
}
}
conn[max_conn] = open_conn(test.maxscales->ports[0][router],
test.maxscales->IP[0],
test.maxscales->user_name,
test.maxscales->password,
test.ssl);
if (mysql_errno(conn[i]) != 1040)
{
test.add_result(1,
"Max_xonnections reached, but error is not 1040, it is %d %s\n",
mysql_errno(conn[i]),
mysql_error(conn[i]));
}
for (i = 0; i < max_conn; i++)
{
mysql_close(conn[i]);
}
}