1+ /* *
2+ * @file test_logger_special_devices-t.cpp
3+ * @brief Tests for MySQL_Logger special device file handling (/dev/stdout, /dev/stderr)
4+ * @details This test ensures that eventslog_filename and auditlog_filename can be set to
5+ * special device files like /dev/stdout and /dev/stderr without rotation errors.
6+ */
7+
8+ #include < cstdlib>
9+ #include < cstdio>
10+ #include < cstring>
11+ #include < unistd.h>
12+ #include < string>
13+ #include < fstream>
14+
15+ #include " mysql.h"
16+ #include " mysqld_error.h"
17+ #include " proxysql.h"
18+ #include " cpp-dotenv/dotenv.h"
19+
20+ #include " tap.h"
21+ #include " command_line.h"
22+ #include " utils.h"
23+
24+ int main (int argc, char ** argv) {
25+ CommandLine cl;
26+
27+ if (cl.getEnv ()) {
28+ diag (" Failed to get the required environmental variables." );
29+ return -1 ;
30+ }
31+
32+ MYSQL* proxysql_admin = mysql_init (NULL );
33+
34+ if (!mysql_real_connect (proxysql_admin, cl.host , cl.admin_username , cl.admin_password , NULL , cl.admin_port , NULL , 0 )) {
35+ fprintf (stderr, " File %s, line %d, Error: %s\n " , __FILE__, __LINE__, mysql_error (proxysql_admin));
36+ return -1 ;
37+ }
38+
39+ plan (6 );
40+
41+ // Test 1: Set eventslog_filename to /dev/stdout (should not fail)
42+ {
43+ MYSQL_QUERY (proxysql_admin, " SET mysql-eventslog_filename='/dev/stdout'" );
44+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
45+ ok (true , " Successfully set eventslog_filename to /dev/stdout" );
46+ }
47+
48+ // Test 2: Set eventslog_filename to /dev/stderr (should not fail)
49+ {
50+ MYSQL_QUERY (proxysql_admin, " SET mysql-eventslog_filename='/dev/stderr'" );
51+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
52+ ok (true , " Successfully set eventslog_filename to /dev/stderr" );
53+ }
54+
55+ // Test 3: Set auditlog_filename to /dev/stdout (should not fail)
56+ {
57+ MYSQL_QUERY (proxysql_admin, " SET mysql-auditlog_filename='/dev/stdout'" );
58+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
59+ ok (true , " Successfully set auditlog_filename to /dev/stdout" );
60+ }
61+
62+ // Test 4: Set auditlog_filename to /dev/stderr (should not fail)
63+ {
64+ MYSQL_QUERY (proxysql_admin, " SET mysql-auditlog_filename='/dev/stderr'" );
65+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
66+ ok (true , " Successfully set auditlog_filename to /dev/stderr" );
67+ }
68+
69+ // Test 5: FLUSH LOGS with special device should work
70+ {
71+ MYSQL_QUERY (proxysql_admin, " SET mysql-eventslog_filename='/dev/stdout'" );
72+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
73+ MYSQL_QUERY (proxysql_admin, " PROXYSQL FLUSH LOGS" );
74+ ok (true , " FLUSH LOGS works with /dev/stdout" );
75+ }
76+
77+ // Test 6: Verify we can switch back to regular file
78+ {
79+ MYSQL_QUERY (proxysql_admin, " SET mysql-eventslog_filename='/tmp/test_events.log'" );
80+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
81+ ok (true , " Successfully switched back to regular file" );
82+ }
83+
84+ // Cleanup
85+ MYSQL_QUERY (proxysql_admin, " SET mysql-eventslog_filename=''" );
86+ MYSQL_QUERY (proxysql_admin, " SET mysql-auditlog_filename=''" );
87+ MYSQL_QUERY (proxysql_admin, " LOAD MYSQL VARIABLES TO RUNTIME" );
88+
89+ mysql_close (proxysql_admin);
90+
91+ return exit_status ();
92+ }
0 commit comments