
maxscale-system-test changed in order to control test environment by itself. Every test checks which machines are running, compare with list of needed machines and start new VMs is they are missing in the running machines list. Tests are executiong MDBCI commands, MDBCI executable should be in the PATH
75 lines
2.6 KiB
C++
75 lines
2.6 KiB
C++
/**
|
|
* Test binary protocol prepared statement routing
|
|
*/
|
|
#include "testconnections.h"
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
TestConnections test(argc, argv);
|
|
char server_id[test.repl->N][1024];
|
|
|
|
test.repl->connect();
|
|
|
|
/** Get server_id for each node */
|
|
for (int i = 0; i < test.repl->N; i++)
|
|
{
|
|
sprintf(server_id[i], "%d", test.repl->get_server_id(i));
|
|
}
|
|
|
|
test.maxscales->connect_maxscale(0);
|
|
|
|
test.set_timeout(20);
|
|
|
|
MYSQL_STMT* stmt = mysql_stmt_init(test.maxscales->conn_rwsplit[0]);
|
|
const char* write_query = "SELECT @@server_id, @@last_insert_id";
|
|
const char* read_query = "SELECT @@server_id";
|
|
char buffer[100] = "";
|
|
char buffer2[100] = "";
|
|
my_bool err = false;
|
|
my_bool isnull = false;
|
|
MYSQL_BIND bind[2] = {};
|
|
|
|
bind[0].buffer_length = sizeof(buffer);
|
|
bind[0].buffer = buffer;
|
|
bind[0].error = &err;
|
|
bind[0].is_null = &isnull;
|
|
bind[1].buffer_length = sizeof(buffer2);
|
|
bind[1].buffer = buffer2;
|
|
bind[1].error = &err;
|
|
bind[1].is_null = &isnull;
|
|
|
|
// Execute a write, should return the master's server ID
|
|
test.add_result(mysql_stmt_prepare(stmt, write_query, strlen(write_query)), "Failed to prepare");
|
|
test.add_result(mysql_stmt_execute(stmt), "Failed to execute");
|
|
test.add_result(mysql_stmt_bind_result(stmt, bind), "Failed to bind result");
|
|
test.add_result(mysql_stmt_fetch(stmt), "Failed to fetch result");
|
|
test.add_result(strcmp(buffer, server_id[0]), "Expected server_id '%s', got '%s'", server_id[0], buffer);
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
stmt = mysql_stmt_init(test.maxscales->conn_rwsplit[0]);
|
|
|
|
// Execute read, should return a slave server ID
|
|
test.add_result(mysql_stmt_prepare(stmt, read_query, strlen(read_query)), "Failed to prepare");
|
|
test.add_result(mysql_stmt_execute(stmt), "Failed to execute");
|
|
test.add_result(mysql_stmt_bind_result(stmt, bind), "Failed to bind result");
|
|
test.add_result(mysql_stmt_fetch(stmt), "Failed to fetch result");
|
|
test.add_result(strcmp(buffer,
|
|
server_id[1]) && strcmp(buffer, server_id[2]) && strcmp(buffer, server_id[3]),
|
|
"Expected one of the slave server IDs (%s, %s or %s), not '%s'",
|
|
server_id[1],
|
|
server_id[2],
|
|
server_id[3],
|
|
buffer);
|
|
|
|
|
|
mysql_stmt_close(stmt);
|
|
|
|
test.maxscales->close_maxscale_connections(0);
|
|
|
|
// MXS-2266: COM_STMT_CLOSE causes a warning to be logged
|
|
test.log_excludes(0, "Closing unknown prepared statement");
|
|
|
|
return test.global_result;
|
|
}
|