test: implement comprehensive noise injection across MySQL TAP tests

Integrated the enhanced noise framework into multiple MySQL-specific tests.
Each test now optionally spawns:
- Random Stats Poller
- REST Prometheus Poller (with auto-enable support)
- PgSQL Traffic v2 (configured with 100 conns and 300ms delay)

This significantly increases the background load during test execution to
better uncover potential race conditions and stability issues.
pull/5408/head
Rene Cannao 3 months ago
parent d1d7f4df9f
commit df76a3dc06

@ -1077,4 +1077,9 @@ void spawn_noise(const CommandLine& cl, const std::string& tool_path, const std:
*/
extern "C" void stop_noise_tools();
/**
* @brief Returns the number of background noise tools currently running.
*/
extern "C" int get_noise_tools_count();
#endif // #define UTILS_H

@ -6,6 +6,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
@ -44,6 +45,15 @@ int create_connections(CommandLine& cl) {
int main(int argc, char** argv) {
CommandLine cl;
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return -1;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
int np = 0;
np += 3; // for processlist
np += NUM_CONNS ; // to kill connections
@ -55,11 +65,10 @@ int main(int argc, char** argv) {
np += 2; // to count rows
np += NUM_CONNS ; // to run third DO 1
plan(np);
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return -1;
if (cl.use_noise) {
plan(np + 3);
} else {
plan(np);
}

@ -31,9 +31,11 @@ int main(int argc, char** argv) {
spawn_internal_noise(cl, internal_noise_mysql_traffic);
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
if (cl.use_noise) {
plan(8 + 2);
plan(8 + 4);
} else {
plan(8);
}

@ -7,6 +7,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
@ -47,15 +48,23 @@ int create_connections(CommandLine& cl) {
int main(int argc, char** argv) {
CommandLine cl;
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return -1;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
int np = 0;
np += 6;
np += NUM_CONNS; // new admin connections
plan(np);
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return -1;
if (cl.use_noise) {
plan(np + 3);
} else {
plan(np);
}

@ -25,6 +25,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
using std::string;
@ -112,8 +113,6 @@ int check_perf_diff(const string tcase, double time1, double time2, double exp_d
}
int main(int argc, char** argv) {
plan(8);
CommandLine cl;
if (cl.getEnv()) {
@ -121,6 +120,16 @@ int main(int argc, char** argv) {
return EXIT_FAILURE;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
if (cl.use_noise) {
plan(8 + 3);
} else {
plan(8);
}
MYSQL* admin = init_mysql_conn(cl.host, cl.admin_port, cl.admin_username, cl.admin_password);
if (!admin) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(admin));

@ -80,6 +80,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
using std::string;
@ -181,15 +182,23 @@ int test_mode(MYSQL* admin, MYSQL* proxy, int mode, bool expect_success) {
}
int main(int argc, char** argv) {
// We have 2 queries × 2 modes = 4 tests total
plan(4);
CommandLine cl;
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return exit_status();
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
// We have 2 queries × 2 modes = 4 tests total
if (cl.use_noise) {
plan(4 + 3);
} else {
plan(4);
}
MYSQL* admin = init_mysql_conn(cl.host, cl.admin_username, cl.admin_password, cl.admin_port);
if (!admin) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(admin));

@ -9,6 +9,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
#include "json.hpp"
@ -180,14 +181,22 @@ int test_wait_timeout_json_values(CommandLine *cl, MYSQL *admin) {
}
int main(int argc, char** argv) {
plan(12); // 4 + 8 tests for new JSON validation function
CommandLine cl;
if (cl.getEnv()) {
diag("Failed to get the required environmental variables.");
return exit_status();
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
if (cl.use_noise) {
plan(12 + 3);
} else {
plan(12);
}
MYSQL* admin = init_mysql_conn(cl.host, cl.admin_username, cl.admin_password, cl.admin_port);
if (!admin) {
fprintf(stderr, "File %s, line %d, Error: %s\n", __FILE__, __LINE__, mysql_error(admin));

@ -14,6 +14,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
using std::string;
@ -25,6 +26,10 @@ int main(int argc, char** argv) {
return exit_status();
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
std::vector<string> ssl_version_queries = {
"SHOW STATUS LIKE 'Ssl_version'",
"SHOW STATUS LIKE 'ssl_version'",
@ -38,7 +43,11 @@ int main(int argc, char** argv) {
};
int num_plans = ssl_version_queries.size() + 1; // +1 for query count check
plan(num_plans);
if (cl.use_noise) {
plan(num_plans + 3);
} else {
plan(num_plans);
}
MYSQL* admin = init_mysql_conn(cl.host, cl.admin_port, cl.admin_username, cl.admin_password);
if (!admin) {

@ -9,6 +9,7 @@
#include "mysql.h"
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
constexpr size_t BUFFER_SIZE = 1024;
@ -126,6 +127,10 @@ int main(int argc, char** argv) {
return EXIT_FAILURE;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
std::vector<std::vector<uint8_t>> malformed_pkts = {
{0x01, 0x00},
{0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00},
@ -138,7 +143,11 @@ int main(int argc, char** argv) {
{0x03, 0x00, 0x00, 0x2F, 0x2A, 0xE0, 0x00},
};
plan(malformed_pkts.size() * 4);
if (cl.use_noise) {
plan(malformed_pkts.size() * 4 + 3);
} else {
plan(malformed_pkts.size() * 4);
}
{
diag(">>> Sending malformed packets to BACKEND connection <<<");

@ -10,6 +10,7 @@
#include "mysql.h"
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
using std::string;
@ -41,7 +42,15 @@ int main() {
return -1;
}
plan(1); // One test for MySQL
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
if (cl.use_noise) {
plan(1 + 3);
} else {
plan(1);
}
MYSQL* proxysql_admin = mysql_init(NULL);
if (!proxysql_admin) {

@ -22,6 +22,7 @@
#include "tap.h"
#include "utils.h"
#include "noise_utils.h"
#include "command_line.h"
using nlohmann::json;
@ -106,8 +107,6 @@ void check_matching_logline(fstream& f_log, string regex) {
}
int main(int, char**) {
plan(12);
CommandLine cl;
if (cl.getEnv()) {
@ -115,6 +114,16 @@ int main(int, char**) {
return EXIT_FAILURE;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
if (cl.use_noise) {
plan(12 + 3);
} else {
plan(12);
}
// Open the error log and fetch the final position
const string f_path { get_env("REGULAR_INFRA_DATADIR") + "/proxysql.log" };
fstream f_log {};

@ -19,6 +19,7 @@
#include "tap.h"
#include "command_line.h"
#include "noise_utils.h"
#include "utils.h"
using std::string;
@ -185,6 +186,10 @@ int main() {
return -1;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
const unsigned int num_selects = 200; // Number of "SELECT 1" queries to run
unsigned int p = 2; // Number of tests for table structure checks
p += num_selects/10; // Number of tests for SELECT 1 queries (one every 10 iterations)
@ -192,7 +197,11 @@ int main() {
p += 1; // Number of tests for empty hostgroup error
p += 1; // Number of tests for non-existing schema error
p += 2; // Number of tests for checking query results in stats and history tables
plan(p);
if (cl.use_noise) {
plan(p + 3);
} else {
plan(p);
}
MYSQL* admin_conn = mysql_init(nullptr);
if (!admin_conn) {

@ -38,6 +38,7 @@
#include "proxysql_utils.h"
#include "re2/re2.h"
#include "command_line.h"
#include "noise_utils.h"
#include "tap.h"
__thread int mysql_thread___query_digests_max_query_length = 65000;
@ -783,6 +784,10 @@ int main(int argc, char** argv) {
return EXIT_FAILURE;
}
spawn_internal_noise(cl, internal_noise_random_stats_poller);
spawn_internal_noise(cl, internal_noise_rest_prometheus_poller, {{"enable_rest_api", "true"}});
spawn_internal_noise(cl, internal_noise_pgsql_traffic_v2, {{"num_connections", "100"}, {"reconnect_interval", "100"}, {"avg_delay_ms", "300"}});
bool exec_crashing_tests = true;
bool exec_grouping_tests = true;
bool exec_regular_tests = true;
@ -849,7 +854,11 @@ int main(int argc, char** argv) {
if (exec_grouping_tests) { tests_planned += grouping_tests_num; };
if (exec_crashing_tests) { tests_planned += crashing_tests_num; };
plan(tests_planned);
if (cl.use_noise) {
plan(tests_planned + 3);
} else {
plan(tests_planned);
}
if (exec_regular_tests) {
process_digest_tests(regular_tests_defs);

Loading…
Cancel
Save