Merge branch '2.1' into develop

This commit is contained in:
Johan Wikman
2017-04-19 18:19:13 +03:00
14 changed files with 121 additions and 81 deletions

View File

@ -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());
}

View File

@ -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
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;
}