Merge branch '2.1' into develop
This commit is contained in:
@ -937,17 +937,18 @@ static void usage(void)
|
||||
" -?, --help show this help\n"
|
||||
"\n"
|
||||
"Defaults paths:\n"
|
||||
" config file : %s/%s\n"
|
||||
" configdir : %s\n"
|
||||
" logdir : %s\n"
|
||||
" cachedir : %s\n"
|
||||
" libdir : %s\n"
|
||||
" datadir : %s\n"
|
||||
" execdir : %s\n"
|
||||
" language : %s\n"
|
||||
" piddir : %s\n"
|
||||
" persistdir : %s\n"
|
||||
" module configdir : %s\n"
|
||||
" config file : %s/%s\n"
|
||||
" configdir : %s\n"
|
||||
" logdir : %s\n"
|
||||
" cachedir : %s\n"
|
||||
" libdir : %s\n"
|
||||
" datadir : %s\n"
|
||||
" execdir : %s\n"
|
||||
" language : %s\n"
|
||||
" piddir : %s\n"
|
||||
" persistdir : %s\n"
|
||||
" module configdir : %s\n"
|
||||
" connector plugins : %s\n"
|
||||
"\n"
|
||||
"If '--basedir' is provided then all other paths, including the default\n"
|
||||
"configuration file path, are defined relative to that. As an example,\n"
|
||||
@ -959,7 +960,7 @@ static void usage(void)
|
||||
get_configdir(), default_cnf_fname,
|
||||
get_configdir(), get_logdir(), get_cachedir(), get_libdir(),
|
||||
get_datadir(), get_execdir(), get_langdir(), get_piddir(),
|
||||
get_config_persistdir(), get_module_configdir());
|
||||
get_config_persistdir(), get_module_configdir(), get_connector_plugindir());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -22,6 +22,10 @@ namespace maxscale
|
||||
|
||||
#define TBP_EXPECT_TOKEN(string_literal) string_literal, (sizeof(string_literal) - 1)
|
||||
|
||||
// For debugging purposes.
|
||||
// #define TBP_LOG_UNEXPECTED_AND_EXHAUSTED
|
||||
#undef TBP_LOG_UNEXPECTED_AND_EXHAUSTED
|
||||
|
||||
/**
|
||||
* @class TrxBoundaryParser
|
||||
*
|
||||
@ -149,7 +153,7 @@ private:
|
||||
|
||||
void log_unexpected()
|
||||
{
|
||||
#ifdef SS_DEBUG
|
||||
#ifdef TBP_LOG_UNEXPECTED_AND_EXHAUSTED
|
||||
MXS_NOTICE("Transaction tracking: In statement '%.*s', unexpected token at '%.*s'.",
|
||||
(int)m_len, m_pSql, (int)(m_pEnd - m_pI), m_pI);
|
||||
#endif
|
||||
@ -157,7 +161,7 @@ private:
|
||||
|
||||
void log_exhausted()
|
||||
{
|
||||
#ifdef SS_DEBUG
|
||||
#ifdef TBP_LOG_UNEXPECTED_AND_EXHAUSTED
|
||||
MXS_NOTICE("Transaction tracking: More tokens expected in statement '%.*s'.", (int)m_len, m_pSql);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ int test_validity()
|
||||
TEST(!config_param_is_valid(params, "p8", "d", &ctx));
|
||||
TEST(!config_param_is_valid(params, "p8", "a,d", &ctx));
|
||||
TEST(!config_param_is_valid(params, "p8", "a,b,c,d", &ctx));
|
||||
|
||||
config_parameter_free(svc.parameters);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -174,7 +174,9 @@ int test_add_parameter()
|
||||
TEST(val == 5);
|
||||
TEST(strcmp(config_get_string(ctx.parameters, "p6"), "/dev/null") == 0);
|
||||
TEST(strcmp(config_get_string(ctx.parameters, "p7"), "some-service") == 0);
|
||||
|
||||
config_parameter_free(ctx.parameters);
|
||||
config_parameter_free(svc1.parameters);
|
||||
config_parameter_free(svc2.parameters);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -201,7 +203,7 @@ int test_required_parameters()
|
||||
config_add_param(&ctx, "p2", "1");
|
||||
config_add_param(&ctx, "p3", "1");
|
||||
TEST(!missing_required_parameters(params, ctx.parameters));
|
||||
|
||||
config_parameter_free(ctx.parameters);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -29,11 +29,14 @@
|
||||
#if defined(NDEBUG)
|
||||
#undef NDEBUG
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <maxscale/listener.h>
|
||||
|
||||
#include <maxscale/config.h>
|
||||
#include <maxscale/dcb.h>
|
||||
#include <maxscale/listener.h>
|
||||
|
||||
/**
|
||||
* test1 Allocate a dcb and do lots of other things
|
||||
@ -64,15 +67,15 @@ test1()
|
||||
dcb->state = DCB_STATE_POLLING;
|
||||
dcb_close(dcb);
|
||||
ss_dfprintf(stderr, "Freed original dcb");
|
||||
ss_info_dassert(!dcb_isvalid(dcb), "Freed DCB must not be valid");
|
||||
ss_info_dassert(!dcb_isvalid(dcb), "Closed DCB must not be valid");
|
||||
ss_dfprintf(stderr, "\t..done\nMake clone DCB a zombie");
|
||||
clone->state = DCB_STATE_NOPOLLING;
|
||||
dcb_add_to_list(clone);
|
||||
dcb_close(clone);
|
||||
ss_dfprintf(stderr, "\t..done\nCheck clone no longer valid");
|
||||
ss_info_dassert(!dcb_isvalid(clone), "After closing, clone DCB must not be valid");
|
||||
ss_dfprintf(stderr, "\t..done\nProcess the zombies list");
|
||||
dcb_process_zombies(0);
|
||||
ss_dfprintf(stderr, "\t..done\nCheck clone no longer valid");
|
||||
ss_info_dassert(!dcb_isvalid(clone), "After zombie processing, clone DCB must not be valid");
|
||||
ss_dfprintf(stderr, "\t..done\n");
|
||||
|
||||
return 0;
|
||||
@ -81,6 +84,8 @@ test1()
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int result = 0;
|
||||
MXS_CONFIG* glob_conf = config_get_global_options();
|
||||
glob_conf->n_threads = 1;
|
||||
dcb_global_init();
|
||||
|
||||
result += test1();
|
||||
|
||||
@ -89,6 +89,8 @@ test2()
|
||||
filter_add_parameter(f1, "name1", "value1");
|
||||
filter_add_parameter(f1, "name2", "value2");
|
||||
filter_add_parameter(f1, "name3", "value3");
|
||||
|
||||
filter_free(f1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -46,19 +46,21 @@ static int
|
||||
test1()
|
||||
{
|
||||
GWBUF *buffer;
|
||||
char *(sql[100]);
|
||||
char *sql;
|
||||
int result, length, residual;
|
||||
|
||||
/* Poll tests */
|
||||
ss_dfprintf(stderr,
|
||||
"testmodutil : Rudimentary tests.");
|
||||
buffer = gwbuf_alloc(100);
|
||||
ss_info_dassert(GWBUF_IS_CONTIGUOUS(buffer), "Allocated buffer should be continuos");
|
||||
memset(GWBUF_DATA(buffer), 0, GWBUF_LENGTH(buffer));
|
||||
ss_info_dassert(0 == modutil_is_SQL(buffer), "Default buffer should be diagnosed as not SQL");
|
||||
/* There would ideally be some straightforward way to create a SQL buffer? */
|
||||
ss_dfprintf(stderr, "\t..done\nExtract SQL from buffer");
|
||||
ss_info_dassert(0 == modutil_extract_SQL(buffer, sql, &length), "Default buffer should fail");
|
||||
ss_info_dassert(0 == modutil_extract_SQL(buffer, &sql, &length), "Default buffer should fail");
|
||||
ss_dfprintf(stderr, "\t..done\nExtract SQL from buffer different way?");
|
||||
ss_info_dassert(0 == modutil_MySQL_Query(buffer, sql, &length, &residual), "Default buffer should fail");
|
||||
ss_info_dassert(0 == modutil_MySQL_Query(buffer, &sql, &length, &residual), "Default buffer should fail");
|
||||
ss_dfprintf(stderr, "\t..done\nReplace SQL in buffer");
|
||||
ss_info_dassert(0 == modutil_replace_SQL(buffer, "select * from some_table;"), "Default buffer should fail");
|
||||
ss_dfprintf(stderr, "\t..done\nTidy up.");
|
||||
@ -166,6 +168,7 @@ void test_single_sql_packet1()
|
||||
ss_info_dassert(gwbuf_length(complete) == sizeof(ok), "Complete packet buffer should contain enough data");
|
||||
ss_info_dassert(memcmp(GWBUF_DATA(complete), ok, GWBUF_LENGTH(complete)) == 0,
|
||||
"Complete packet buffer's data should be equal to original data");
|
||||
gwbuf_free(complete);
|
||||
|
||||
/** Partial single packet */
|
||||
buffer = gwbuf_alloc_and_load(sizeof(ok) - 4, ok);
|
||||
@ -181,6 +184,7 @@ void test_single_sql_packet1()
|
||||
ss_info_dassert(complete, "Complete packet buffer should not be NULL");
|
||||
ss_info_dassert(complete->next, "The complete packet should be a chain of buffers");
|
||||
ss_info_dassert(gwbuf_length(complete) == sizeof(ok), "Buffer should contain all data");
|
||||
gwbuf_free(complete);
|
||||
}
|
||||
|
||||
void test_multiple_sql_packets1()
|
||||
@ -195,6 +199,7 @@ void test_multiple_sql_packets1()
|
||||
"Complete packet buffer should contain enough data");
|
||||
ss_info_dassert(memcmp(GWBUF_DATA(complete), resultset, GWBUF_LENGTH(complete)) == 0,
|
||||
"Complete packet buffer's data should be equal to original data");
|
||||
gwbuf_free(complete);
|
||||
|
||||
/** Partial data available with one complete packet */
|
||||
GWBUF* head = gwbuf_alloc_and_load(7, resultset);
|
||||
@ -204,14 +209,16 @@ void test_multiple_sql_packets1()
|
||||
ss_info_dassert(complete, "Complete buffer should not be NULL");
|
||||
ss_info_dassert(gwbuf_length(complete) == 5, "Complete buffer should contain first packet only");
|
||||
ss_info_dassert(gwbuf_length(head) == 2, "Complete buffer should contain first packet only");
|
||||
gwbuf_free(complete);
|
||||
|
||||
/** All packets are available */
|
||||
head = gwbuf_append(head, tail);
|
||||
complete = modutil_get_complete_packets(&head);
|
||||
ss_info_dassert(buffer == NULL, "Old buffer should be NULL");
|
||||
ss_info_dassert(head == NULL, "Old buffer should be NULL");
|
||||
ss_info_dassert(complete, "Complete packet buffer should not be NULL");
|
||||
ss_info_dassert(gwbuf_length(complete) == sizeof(resultset) - 5,
|
||||
"Complete packet should be sizeof(resultset) - 5 bytes");
|
||||
gwbuf_free(complete);
|
||||
|
||||
/** Sliding cutoff of the buffer boundary */
|
||||
for (size_t i = 0; i < sizeof(resultset); i++)
|
||||
@ -228,6 +235,8 @@ void test_multiple_sql_packets1()
|
||||
gwbuf_copy_data(complete, 0, completelen, databuf);
|
||||
gwbuf_copy_data(head, 0, headlen, databuf + completelen);
|
||||
ss_info_dassert(memcmp(databuf, resultset, sizeof(resultset)) == 0, "Data should be OK");
|
||||
gwbuf_free(head);
|
||||
gwbuf_free(complete);
|
||||
}
|
||||
|
||||
/** Fragmented buffer chain */
|
||||
@ -285,6 +294,7 @@ void test_multiple_sql_packets1()
|
||||
ss_info_dassert(gwbuf_copy_data(complete, 0, completelen, databuf) == completelen,
|
||||
"All data should be readable");
|
||||
ss_info_dassert(memcmp(databuf, resultset, sizeof(resultset)) == 0, "Data should be OK");
|
||||
gwbuf_free(complete);
|
||||
}
|
||||
|
||||
//
|
||||
@ -412,6 +422,8 @@ void test_multiple_sql_packets2()
|
||||
gwbuf_copy_data(next, 0, nextlen, databuf);
|
||||
gwbuf_copy_data(head, 0, headlen, databuf + nextlen);
|
||||
ss_info_dassert(memcmp(databuf, resultset, sizeof(resultset)) == 0, "Data should be OK");
|
||||
gwbuf_free(head);
|
||||
gwbuf_free(next);
|
||||
}
|
||||
|
||||
/** Fragmented buffer chain */
|
||||
@ -575,6 +587,7 @@ void test_large_packets()
|
||||
ss_info_dassert(complete, "The complete buffer is not NULL");
|
||||
ss_info_dassert(gwbuf_length(complete) == 0xffffff + 4, "Length should be correct");
|
||||
gwbuf_free(buffer);
|
||||
gwbuf_free(complete);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -55,7 +55,6 @@ test1()
|
||||
ss_dfprintf(stderr,
|
||||
"testpoll : Initialise the polling system.");
|
||||
init_test_env(NULL);
|
||||
poll_init();
|
||||
ss_dfprintf(stderr, "\t..done\nAdd a DCB");
|
||||
dcb = dcb_alloc(DCB_ROLE_CLIENT_HANDLER, &dummy);
|
||||
|
||||
|
||||
@ -134,6 +134,7 @@ test1()
|
||||
return 10;
|
||||
}
|
||||
output_counter++;
|
||||
MXS_FREE(entry.queued_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -148,6 +149,7 @@ test1()
|
||||
return 6;
|
||||
}
|
||||
output_counter++;
|
||||
MXS_FREE(entry.queued_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -172,6 +174,7 @@ test1()
|
||||
return 8;
|
||||
}
|
||||
output_counter++;
|
||||
MXS_FREE(entry.queued_object);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -188,7 +191,7 @@ test1()
|
||||
}
|
||||
|
||||
ss_dfprintf(stderr, "Successfully ended test\n");
|
||||
|
||||
mxs_queue_free(queue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -241,6 +244,7 @@ test2()
|
||||
ss_info_dassert((0 == err), "Must join threads successfully");
|
||||
ss_dfprintf(stderr, "\nThread %d ended with debug check fail at %d.\n", i, debug_check_fail);
|
||||
}
|
||||
mxs_queue_free(thread_queue);
|
||||
return debug_check_fail ? 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user