115 lines
2.9 KiB
C++
115 lines
2.9 KiB
C++
/**
|
|
* @file mx321.cpp regression case for bug MXS-321 ("Incorrect number of connections in maxadmin list view")
|
|
*
|
|
* - Set max_connections to 100
|
|
* - Create 200 connections
|
|
* - Close connections
|
|
* - Check that maxadmin list servers shows 0 connections
|
|
*/
|
|
|
|
|
|
#include <iostream>
|
|
#include <unistd.h>
|
|
#include <cstdlib>
|
|
#include <string>
|
|
#include "testconnections.h"
|
|
#include "maxadmin_operations.h"
|
|
|
|
using namespace std;
|
|
|
|
#define CONNECTIONS 200
|
|
int check_connection_count(TestConnections* test, int server)
|
|
{
|
|
char result[1024];
|
|
char cmd[1024];
|
|
test->set_timeout(30);
|
|
sprintf(cmd, "show server server%d", server);
|
|
test->add_result(test->get_maxadmin_param(cmd, (char*) "Current no. of conns:", result),
|
|
"maxadmin command %s failed\n", cmd);
|
|
int result_d = 999;
|
|
sscanf(result, "%d", &result_d);
|
|
if (strlen(result) == 0)
|
|
{
|
|
test->add_result(1, "Empty Current no. of conns \n");
|
|
}
|
|
test->tprintf("result %s\t result_d %d\n", result, result_d);
|
|
return result_d;
|
|
}
|
|
|
|
void create_and_check_connections(TestConnections* test, int target)
|
|
{
|
|
MYSQL* stmt[CONNECTIONS];
|
|
|
|
for (int i = 0; i < CONNECTIONS; i++)
|
|
{
|
|
test->set_timeout(20);
|
|
switch (target)
|
|
{
|
|
case 1:
|
|
stmt[i] = test->open_rwsplit_connection();
|
|
break;
|
|
|
|
case 2:
|
|
stmt[i] = test->open_readconn_master_connection();
|
|
break;
|
|
|
|
case 3:
|
|
stmt[i] = test->open_readconn_master_connection();
|
|
break;
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < CONNECTIONS; i++)
|
|
{
|
|
test->set_timeout(20);
|
|
if (stmt[i])
|
|
{
|
|
mysql_close(stmt[i]);
|
|
}
|
|
}
|
|
|
|
test->stop_timeout();
|
|
sleep(10);
|
|
int result_d;
|
|
|
|
for (int j = 1; j < test->repl->N + 1; j++)
|
|
{
|
|
if ((result_d = check_connection_count(test, j)))
|
|
{
|
|
test->tprintf("Waiting 5 seconds and testing again.");
|
|
sleep(5);
|
|
result_d = check_connection_count(test, j);
|
|
}
|
|
|
|
test->add_result(result_d, "Expected 0 connections, but got %d\n", result_d);
|
|
}
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
|
|
TestConnections * Test = new TestConnections(argc, argv);
|
|
Test->set_timeout(50);
|
|
|
|
Test->repl->execute_query_all_nodes((char *) "SET GLOBAL max_connections=100");
|
|
Test->connect_maxscale();
|
|
execute_query(Test->conn_rwsplit, "SET GLOBAL max_connections=100");
|
|
Test->close_maxscale_connections();
|
|
Test->stop_timeout();
|
|
|
|
/** Create connections to readwritesplit */
|
|
create_and_check_connections(Test, 1);
|
|
|
|
/** Create connections to readconnroute master */
|
|
create_and_check_connections(Test, 2);
|
|
|
|
/** Create connections to readconnroute slave */
|
|
create_and_check_connections(Test, 3);
|
|
|
|
Test->repl->flush_hosts();
|
|
|
|
int rval = Test->global_result;
|
|
delete Test;
|
|
return rval;
|
|
}
|