 c447e5cf15
			
		
	
	c447e5cf15
	
	
	
		
			
			See script directory for method. The script to run in the top level MaxScale directory is called maxscale-uncrustify.sh, which uses another script, list-src, from the same directory (so you need to set your PATH). The uncrustify version was 0.66.
		
			
				
	
	
		
			114 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <maxscale/cdefs.h>
 | |
| 
 | |
| #include "../mariadbclient/mysql_client.cc"
 | |
| 
 | |
| #define NO_THREAD_ID 0
 | |
| 
 | |
| int test_one_query(const char* query,
 | |
|                    bool should_succeed,
 | |
|                    uint64_t expected_tid,
 | |
|                    int expected_kt,
 | |
|                    std::string expected_user)
 | |
| {
 | |
|     char* query_copy = MXS_STRDUP_A(query);
 | |
|     uint64_t result_tid = 1111111;
 | |
|     kill_type_t result_kt = KT_QUERY;
 | |
|     std::string user;
 | |
| 
 | |
|     /* If the parse fails, these should remain unchanged */
 | |
|     if (!should_succeed)
 | |
|     {
 | |
|         result_tid = expected_tid;
 | |
|         result_kt = (kill_type_t)expected_kt;
 | |
|     }
 | |
|     bool success = parse_kill_query(query_copy, &result_tid, &result_kt, &user);
 | |
|     MXS_FREE(query_copy);
 | |
| 
 | |
|     if (success == should_succeed && result_tid == expected_tid
 | |
|         && result_kt == expected_kt && expected_user == user)
 | |
|     {
 | |
|         return 0;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Result wrong on query: '%s'.\n", query);
 | |
|         if (success != should_succeed)
 | |
|         {
 | |
|             printf("Expected success '%d', got '%d'.\n", should_succeed, success);
 | |
|         }
 | |
|         if (result_tid != expected_tid)
 | |
|         {
 | |
|             printf("Expected thread id '%" PRIu64 "', got '%" PRIu64 "'.\n", expected_tid, result_tid);
 | |
|         }
 | |
|         if (result_kt != expected_kt)
 | |
|         {
 | |
|             printf("Expected kill type '%u', got '%u'.\n", expected_kt, result_kt);
 | |
|         }
 | |
|         if (expected_user != user)
 | |
|         {
 | |
|             printf("Expected user '%s', got '%s'.\n", expected_user.c_str(), user.c_str());
 | |
|         }
 | |
|         printf("\n");
 | |
|         return 1;
 | |
|     }
 | |
| }
 | |
| typedef struct test_t
 | |
| {
 | |
|     const char* query;
 | |
|     bool        should_succeed;
 | |
|     uint64_t    correct_id;
 | |
|     int         correct_kt;
 | |
|     const char* correct_user;
 | |
| } test_t;
 | |
| 
 | |
| int main(int argc, char** argv)
 | |
| {
 | |
|     test_t tests[] =
 | |
|     {
 | |
|         {" kill ConNectioN 123  ",                     true,  123,          KT_CONNECTION          },
 | |
|         {"kIlL  coNNectioN 987654321  ;",              true,  987654321,    KT_CONNECTION          },
 | |
|         {" Ki5L CoNNectioN 987654321  ",               false, 0,            KT_CONNECTION          },
 | |
|         {"1",                                          false, 0,            KT_CONNECTION          },
 | |
|         {"kILL 1",                                     true,  1,            KT_CONNECTION          },
 | |
|         {"\n\t kill \nQueRy 456",                      true,  456,          KT_QUERY               },
 | |
|         {"     A         kill 1;     ",                false, 0,            KT_CONNECTION          },
 | |
|         {" kill connection 1A",                        false, 0,            KT_CONNECTION          },
 | |
|         {" kill connection 1 A ",                      false, 0,            KT_CONNECTION          },
 | |
|         {"kill query 7 ; select * ",                   false, 0,            KT_CONNECTION          },
 | |
|         {"KIll query 12345678901234567890",            false, 0,            KT_QUERY               },   // 32-bit
 | |
|                                                                                                         // integer
 | |
|                                                                                                         // overflow
 | |
|         {"KIll query   \t    \n    \t   21  \n \t   ", true,  21,           KT_QUERY               },
 | |
|         {"KIll   \t    \n    \t   -6  \n \t   ",       false, 0,            KT_CONNECTION          },
 | |
|         {"KIll 12345678901234567890123456  \n \t   ",  false, 0,            KT_CONNECTION          },
 | |
|         {"kill ;",                                     false, 0,            KT_QUERY               },
 | |
|         {" kill ConNectioN 123 HARD",                  false, 123,          KT_CONNECTION          },
 | |
|         {" kill ConNectioN 123 SOFT",                  false, 123,          KT_CONNECTION          },
 | |
|         {" kill ConNectioN SOFT 123",                  false, 123,          KT_CONNECTION          },
 | |
|         {" kill  HARD ConNectioN 123",                 true,  123,          KT_CONNECTION | KT_HARD},
 | |
|         {" kill  SOFT ConNectioN 123",                 true,  123,          KT_CONNECTION | KT_SOFT},
 | |
|         {" kill  HARD 123",                            true,  123,          KT_CONNECTION | KT_HARD},
 | |
|         {" kill  SOFT 123",                            true,  123,          KT_CONNECTION | KT_SOFT},
 | |
|         {"KIll soft query 21 ",                        true,  21,           KT_QUERY | KT_SOFT     },
 | |
|         {"KIll query soft 21 ",                        false, 21,           KT_QUERY               },
 | |
|         {"KIll query user maxuser ",                   true,  NO_THREAD_ID, KT_QUERY, "maxuser"    },
 | |
|         {"KIll user query  maxuser ",                  false, NO_THREAD_ID, KT_QUERY               }
 | |
|     };
 | |
|     int result = 0;
 | |
|     int arr_size = sizeof(tests) / sizeof(test_t);
 | |
|     for (int i = 0; i < arr_size; i++)
 | |
|     {
 | |
|         const char* query = tests[i].query;
 | |
|         bool should_succeed = tests[i].should_succeed;
 | |
|         uint64_t expected_tid = tests[i].correct_id;
 | |
|         int expected_kt = tests[i].correct_kt;
 | |
|         std::string expected_user = tests[i].correct_user ? tests[i].correct_user : "";
 | |
|         result += test_one_query(query,
 | |
|                                  should_succeed,
 | |
|                                  expected_tid,
 | |
|                                  expected_kt,
 | |
|                                  expected_user);
 | |
|     }
 | |
|     return result;
 | |
| }
 |