Markus Mäkelä d7d4ec29bb Add tests from develop
Added tests from develop. The test results need to be modified for 2.0.
2017-05-26 15:40:40 +03:00

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;
}