Compile core unit tests as C++

Since the core source is C++, the tests should also be C++.
This commit is contained in:
Markus Mäkelä
2017-04-28 22:45:55 +03:00
parent 758dc72f06
commit 6f24c04a4f
22 changed files with 85 additions and 84 deletions

View File

@ -1,27 +1,27 @@
add_executable(test_atomic testatomic.c)
add_executable(test_adminusers testadminusers.c)
add_executable(test_buffer testbuffer.c)
add_executable(test_dcb testdcb.c)
add_executable(test_filter testfilter.c)
add_executable(test_hash testhash.c)
add_executable(test_hint testhint.c)
add_executable(test_log testlog.c)
add_executable(test_logorder testlogorder.c)
add_executable(test_atomic testatomic.cc)
add_executable(test_adminusers testadminusers.cc)
add_executable(test_buffer testbuffer.cc)
add_executable(test_dcb testdcb.cc)
add_executable(test_filter testfilter.cc)
add_executable(test_hash testhash.cc)
add_executable(test_hint testhint.cc)
add_executable(test_log testlog.cc)
add_executable(test_logorder testlogorder.cc)
add_executable(test_logthrottling testlogthrottling.cc)
add_executable(test_modutil testmodutil.c)
add_executable(test_poll testpoll.c)
add_executable(test_queuemanager testqueuemanager.c)
add_executable(test_modutil testmodutil.cc)
add_executable(test_poll testpoll.cc)
add_executable(test_queuemanager testqueuemanager.cc)
add_executable(test_semaphore testsemaphore.cc)
add_executable(test_server testserver.c)
add_executable(test_service testservice.c)
add_executable(test_spinlock testspinlock.c)
add_executable(test_server testserver.cc)
add_executable(test_service testservice.cc)
add_executable(test_spinlock testspinlock.cc)
add_executable(test_trxcompare testtrxcompare.cc ../../../query_classifier/test/testreader.cc)
add_executable(test_trxtracking testtrxtracking.cc)
add_executable(test_users testusers.c)
add_executable(testfeedback testfeedback.c)
add_executable(testmaxscalepcre2 testmaxscalepcre2.c)
add_executable(testmodulecmd testmodulecmd.c)
add_executable(testconfig testconfig.c)
add_executable(test_users testusers.cc)
add_executable(testfeedback testfeedback.cc)
add_executable(testmaxscalepcre2 testmaxscalepcre2.cc)
add_executable(testmodulecmd testmodulecmd.cc)
add_executable(testconfig testconfig.cc)
add_executable(trxboundaryparser_profile trxboundaryparser_profile.cc)
target_link_libraries(test_atomic maxscale-common)
target_link_libraries(test_adminusers maxscale-common)

View File

@ -45,7 +45,7 @@
*/
uint8_t* generate_data(size_t count)
{
uint8_t* data = MXS_MALLOC(count);
uint8_t* data = (uint8_t*)MXS_MALLOC(count);
MXS_ABORT_IF_NULL(data);
srand(0);
@ -79,7 +79,7 @@ GWBUF* create_test_buffer()
uint8_t* data = generate_data(total);
total = 0;
for (int i = 0; i < sizeof(buffers) / sizeof(size_t); i++)
for (size_t i = 0; i < sizeof(buffers) / sizeof(size_t); i++)
{
head = gwbuf_append(head, gwbuf_alloc_and_load(buffers[i], data + total));
total += buffers[i];
@ -104,7 +104,7 @@ int get_length_at(int n)
void split_buffer(int n, int offset)
{
int cutoff = get_length_at(n) + offset;
size_t cutoff = get_length_at(n) + offset;
GWBUF* buffer = create_test_buffer();
int len = gwbuf_length(buffer);
GWBUF* newbuf = gwbuf_split(&buffer, cutoff);
@ -119,7 +119,7 @@ void split_buffer(int n, int offset)
void consume_buffer(int n, int offset)
{
int cutoff = get_length_at(n) + offset;
size_t cutoff = get_length_at(n) + offset;
GWBUF* buffer = create_test_buffer();
int len = gwbuf_length(buffer);
buffer = gwbuf_consume(buffer, cutoff);
@ -131,7 +131,7 @@ void consume_buffer(int n, int offset)
void copy_buffer(int n, int offset)
{
int cutoff = get_length_at(n) + offset;
size_t cutoff = get_length_at(n) + offset;
uint8_t* data = generate_data(cutoff);
GWBUF* buffer = create_test_buffer();
int len = gwbuf_length(buffer);
@ -450,30 +450,30 @@ test1()
{
GWBUF *buffer, *extra, *clone, *partclone;
HINT *hint;
int size = 100;
int bite1 = 35;
int bite2 = 60;
int bite3 = 10;
int buflen;
size_t size = 100;
size_t bite1 = 35;
size_t bite2 = 60;
size_t bite3 = 10;
size_t buflen;
/* Single buffer tests */
ss_dfprintf(stderr,
"testbuffer : creating buffer with data size %d bytes",
"testbuffer : creating buffer with data size %lu bytes",
size);
buffer = gwbuf_alloc(size);
ss_dfprintf(stderr, "\t..done\nAllocated buffer of size %d.", size);
ss_dfprintf(stderr, "\t..done\nAllocated buffer of size %lu.", size);
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "\nBuffer length is now %d", buflen);
ss_dfprintf(stderr, "\nBuffer length is now %lu", buflen);
ss_info_dassert(size == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_info_dassert(GWBUF_IS_TYPE_UNDEFINED(buffer), "Buffer type should be undefined");
ss_dfprintf(stderr, "\t..done\nSet a hint for the buffer");
hint = hint_create_parameter(NULL, "name", "value");
hint = hint_create_parameter(NULL, (char*)"name", (char*)"value");
gwbuf_add_hint(buffer, hint);
ss_info_dassert(hint == buffer->hint, "Buffer should point to first and only hint");
ss_dfprintf(stderr, "\t..done\nSet a property for the buffer");
gwbuf_add_property(buffer, "name", "value");
ss_info_dassert(0 == strcmp("value", gwbuf_get_property(buffer, "name")), "Should now have correct property");
gwbuf_add_property(buffer, (char*)"name", (char*)"value");
ss_info_dassert(0 == strcmp("value", gwbuf_get_property(buffer, (char*)"name")), "Should now have correct property");
strcpy((char*)GWBUF_DATA(buffer), "The quick brown fox jumps over the lazy dog");
ss_dfprintf(stderr, "\t..done\nLoad some data into the buffer");
ss_info_dassert('q' == GWBUF_DATA_CHAR(buffer, 4), "Fourth character of buffer must be 'q'");
@ -485,7 +485,7 @@ test1()
clone = gwbuf_clone(buffer);
ss_dfprintf(stderr, "\t..done\nCloned buffer");
buflen = GWBUF_LENGTH(clone);
ss_dfprintf(stderr, "\nCloned buffer length is now %d", buflen);
ss_dfprintf(stderr, "\nCloned buffer length is now %lu", buflen);
ss_info_dassert(size == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(clone), "Cloned buffer should not be empty");
ss_dfprintf(stderr, "\t..done\n");
@ -495,45 +495,45 @@ test1()
buffer = gwbuf_consume(buffer, bite1);
ss_info_dassert(NULL != buffer, "Buffer should not be null");
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "Consumed %d bytes, now have %d, should have %d", bite1, buflen, size - bite1);
ss_dfprintf(stderr, "Consumed %lu bytes, now have %lu, should have %lu", bite1, buflen, size - bite1);
ss_info_dassert((size - bite1) == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_dfprintf(stderr, "\t..done\n");
buffer = gwbuf_consume(buffer, bite2);
ss_info_dassert(NULL != buffer, "Buffer should not be null");
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "Consumed %d bytes, now have %d, should have %d", bite2, buflen, size - bite1 - bite2);
ss_dfprintf(stderr, "Consumed %lu bytes, now have %lu, should have %lu", bite2, buflen, size - bite1 - bite2);
ss_info_dassert((size - bite1 - bite2) == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_dfprintf(stderr, "\t..done\n");
buffer = gwbuf_consume(buffer, bite3);
ss_dfprintf(stderr, "Consumed %d bytes, should have null buffer", bite3);
ss_dfprintf(stderr, "Consumed %lu bytes, should have null buffer", bite3);
ss_info_dassert(NULL == buffer, "Buffer should be null");
/* Buffer list tests */
size = 100000;
buffer = gwbuf_alloc(size);
ss_dfprintf(stderr, "\t..done\nAllocated buffer of size %d.", size);
ss_dfprintf(stderr, "\t..done\nAllocated buffer of size %lu.", size);
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "\nBuffer length is now %d", buflen);
ss_dfprintf(stderr, "\nBuffer length is now %lu", buflen);
ss_info_dassert(size == buflen, "Incorrect buffer size");
ss_info_dassert(0 == GWBUF_EMPTY(buffer), "Buffer should not be empty");
ss_info_dassert(GWBUF_IS_TYPE_UNDEFINED(buffer), "Buffer type should be undefined");
extra = gwbuf_alloc(size);
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "\t..done\nAllocated extra buffer of size %d.", size);
ss_dfprintf(stderr, "\t..done\nAllocated extra buffer of size %lu.", size);
ss_info_dassert(size == buflen, "Incorrect buffer size");
buffer = gwbuf_append(buffer, extra);
buflen = gwbuf_length(buffer);
ss_dfprintf(stderr, "\t..done\nAppended extra buffer to original buffer to create list of size %d", buflen);
ss_dfprintf(stderr, "\t..done\nAppended extra buffer to original buffer to create list of size %lu", buflen);
ss_info_dassert((size * 2) == gwbuf_length(buffer), "Incorrect size for set of buffers");
buffer = gwbuf_rtrim(buffer, 60000);
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "\t..done\nTrimmed 60 bytes from buffer, now size is %d.", buflen);
ss_dfprintf(stderr, "\t..done\nTrimmed 60 bytes from buffer, now size is %lu.", buflen);
ss_info_dassert((size - 60000) == buflen, "Incorrect buffer size");
buffer = gwbuf_rtrim(buffer, 60000);
buflen = GWBUF_LENGTH(buffer);
ss_dfprintf(stderr, "\t..done\nTrimmed another 60 bytes from buffer, now size is %d.", buflen);
ss_dfprintf(stderr, "\t..done\nTrimmed another 60 bytes from buffer, now size is %lu.", buflen);
ss_info_dassert(100000 == buflen, "Incorrect buffer size");
ss_info_dassert(buffer == extra, "The buffer pointer should now point to the extra buffer");
ss_dfprintf(stderr, "\t..done\n");

View File

@ -43,7 +43,7 @@ int test_validity()
{MXS_END_MODULE_PARAMS}
};
CONFIG_CONTEXT ctx = {.object = ""};
CONFIG_CONTEXT ctx = {.object = (char*)""};
/** Int parameter */
TEST(config_param_is_valid(params, "p1", "1", &ctx));
@ -90,7 +90,7 @@ int test_validity()
TEST(!config_param_is_valid(params, "p6", "This is not a valid path", &ctx));
/** Service parameter */
CONFIG_CONTEXT svc = {.object = "test-service"};
CONFIG_CONTEXT svc = {.object = (char*)"test-service"};
ctx.next = &svc;
config_add_param(&svc, "type", "service");
TEST(config_param_is_valid(params, "p7", "test-service", &ctx));
@ -135,9 +135,12 @@ int test_add_parameter()
};
CONFIG_CONTEXT svc1 = {.object = "my-service"};
CONFIG_CONTEXT svc2 = {.object = "some-service", .next = &svc1};
CONFIG_CONTEXT ctx = {.object = "", .next = &svc2};
CONFIG_CONTEXT svc1, svc2, ctx;
svc1.object = (char*)"my-service";
svc2.object = (char*)"some-service";
svc2.next = &svc1;
ctx.object = (char*)"";
ctx.next = &svc2;
config_add_param(&svc1, "type", "service");
config_add_param(&svc2, "type", "service");
@ -190,7 +193,7 @@ int test_required_parameters()
{MXS_END_MODULE_PARAMS}
};
CONFIG_CONTEXT ctx = {.object = ""};
CONFIG_CONTEXT ctx = {.object = (char*)""};
TEST(missing_required_parameters(params, ctx.parameters));
config_add_defaults(&ctx, params);

View File

@ -45,9 +45,11 @@
#include <regex.h>
#include <maxscale/maxscale_test.h>
#include "../maxscale/config.h"
#include "../load_utils.cc"
static char* server_options[] =
static const char* server_options[] =
{
"MariaDB Corporation MaxScale",
"--no-defaults",
@ -60,7 +62,7 @@ static char* server_options[] =
const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
static char* server_groups[] =
static const char* server_groups[] =
{
"embedded",
"server",
@ -71,10 +73,6 @@ static char* server_groups[] =
NULL
};
int config_load(char *);
void config_enable_feedback_task(void);
int do_http_post(GWBUF *buffer, void *cfg);
int main(int argc, char** argv)
{
FEEDBACK_CONF* fc;
@ -85,14 +83,14 @@ int main(int argc, char** argv)
hkinit();
cnf = MXS_MALLOC(sizeof(char) * (strlen(TEST_DIR) + strlen("/maxscale.cnf") + 1));
cnf = (char*)MXS_MALLOC(sizeof(char) * (strlen(TEST_DIR) + strlen("/maxscale.cnf") + 1));
MXS_ABORT_IF_NULL(cnf);
sprintf(cnf, "%s/maxscale.cnf", TEST_DIR);
printf("Config: %s\n", cnf);
if (mysql_library_init(num_elements, server_options, server_groups))
if (mysql_library_init(num_elements, (char**)server_options, (char**)server_groups))
{
FAILTEST("Failed to initialize embedded library.");
}

View File

@ -54,7 +54,7 @@ test1()
MXS_FREE(name);
mxs_log_flush_sync();
ss_info_dassert(NULL != hint, "New hint list should not be null");
ss_info_dassert(0 == strcmp("value", hint->value), "Hint value should be correct");
ss_info_dassert(0 == strcmp("value", (char*)hint->value), "Hint value should be correct");
ss_info_dassert(0 != hint_exists(&hint, HINT_PARAMETER), "Hint of parameter type should exist");
ss_dfprintf(stderr, "\t..done\nFree hints.");
if (NULL != hint)

View File

@ -35,7 +35,7 @@ static void skygw_log_disable(int priority)
int main(int argc, char* argv[])
{
int err = 0;
char* logstr;
const char* logstr;
int i;
bool succp;

View File

@ -82,7 +82,7 @@ static int test2()
pcre2_code *re2 = pcre2_compile((PCRE2_SPTR) pattern2, PCRE2_ZERO_TERMINATED,
0, &err, &erroff, NULL);
size_t size = 1000;
char* dest = MXS_MALLOC(size);
char* dest = (char*)MXS_MALLOC(size);
MXS_ABORT_IF_NULL(dest);
mxs_pcre2_result_t result = mxs_pcre2_substitute(re, subject, good_replace, &dest, &size);
@ -90,12 +90,12 @@ static int test2()
test_assert(strcmp(dest, expected) == 0, "Replaced text should match expected text");
size = 1000;
dest = MXS_REALLOC(dest, size);
dest = (char*)MXS_REALLOC(dest, size);
result = mxs_pcre2_substitute(re2, subject, good_replace, &dest, &size);
test_assert(result == MXS_PCRE2_NOMATCH, "Non-matching substitution should not substitute");
size = 1000;
dest = MXS_REALLOC(dest, size);
dest = (char*)MXS_REALLOC(dest, size);
result = mxs_pcre2_substitute(re, subject, bad_replace, &dest, &size);
test_assert(result == MXS_PCRE2_ERROR, "Bad substitution should return an error");

View File

@ -23,7 +23,7 @@
#include "../maxscale/monitor.h"
#define TEST(a, b) do{if (!(a)){printf("%s:%d "b"\n", __FILE__, __LINE__);return 1;}}while(false)
#define TEST(a, b) do{if (!(a)){printf("%s:%d " b "\n", __FILE__, __LINE__);return 1;}}while(false)
static bool ok = false;
@ -154,8 +154,8 @@ int test_optional_arguments()
const void *params3[] = {"Hello", NULL};
const void *params4[] = {NULL, NULL};
const void *ns = "test_optional_arguments";
const void *id = "test_optional_arguments";
const char *ns = "test_optional_arguments";
const char *id = "test_optional_arguments";
modulecmd_arg_type_t args1[] =
{
{MODULECMD_ARG_STRING | MODULECMD_ARG_OPTIONAL, ""},
@ -375,7 +375,7 @@ int test_domain_matching()
/** Create a monitor */
char *libdir = MXS_STRDUP_A("../../modules/monitor/mysqlmon/");
set_libdir(libdir);
monitor_alloc((char*)ns, "mysqlmon");
monitor_alloc((char*)ns, (char*)"mysqlmon");
const void* params[] = {ns};

View File

@ -62,7 +62,7 @@ test1()
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_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_info_dassert(0 == modutil_replace_SQL(buffer, (char*)"select * from some_table;"), "Default buffer should fail");
ss_dfprintf(stderr, "\t..done\nTidy up.");
gwbuf_free(buffer);
ss_dfprintf(stderr, "\t..done\n");
@ -89,7 +89,7 @@ test2()
*((unsigned char*)buffer->start + 2) = 0;
*((unsigned char*)buffer->start + 3) = 1;
*((unsigned char*)buffer->start + 4) = 0x03;
memcpy(buffer->start + 5, query, strlen(query));
memcpy((uint8_t*)buffer->start + 5, query, strlen(query));
char* result = modutil_get_SQL(buffer);
ss_dassert(strcmp(result, query) == 0);
gwbuf_free(buffer);
@ -109,7 +109,7 @@ static char ok[] =
* CREATE OR REPLACE TABLE test.t1 (id int);
* INSERT INTO test.t1 VALUES (3000);
* SELECT * FROM test.t1; */
static const char resultset[] =
static const uint8_t resultset[] =
{
/* Packet 1 */
0x01, 0x00, 0x00, 0x01, 0x01,
@ -141,7 +141,7 @@ static const char resultset[] =
struct packet
{
int index;
int length;
unsigned int length;
} packets[] =
{
{ PACKET_1_IDX, PACKET_1_LEN },
@ -259,8 +259,8 @@ void test_multiple_sql_packets1()
ss_info_dassert(gwbuf_length(complete) == sizeof(resultset),
"Complete should be sizeof(resulset) bytes long");
int headlen = gwbuf_length(head);
int completelen = complete ? gwbuf_length(complete) : 0;
unsigned int headlen = gwbuf_length(head);
unsigned int completelen = complete ? gwbuf_length(complete) : 0;
uint8_t databuf[sizeof(resultset)];
ss_info_dassert(gwbuf_copy_data(complete, 0, completelen, databuf) == completelen,
"Expected data should be readable");
@ -344,7 +344,7 @@ void test_multiple_sql_packets2()
buffer = gwbuf_alloc_and_load(sizeof(resultset), resultset);
// Empty buffer packet by packet.
for (int i = 0; i < N_PACKETS; i++)
for (unsigned int i = 0; i < N_PACKETS; i++)
{
GWBUF* next = modutil_get_next_MySQL_packet(&buffer);
ss_info_dassert(next, "Next packet buffer should not be NULL");
@ -439,7 +439,7 @@ void test_multiple_sql_packets2()
}
while (total < sizeof(resultset));
for (int i = 0; i < N_PACKETS; i++)
for (unsigned int i = 0; i < N_PACKETS; i++)
{
GWBUF* next = modutil_get_next_MySQL_packet(&buffer);
ss_info_dassert(next, "Next packet buffer should not be NULL");
@ -580,7 +580,7 @@ void test_large_packets()
for (int i = 2; i < 8; i++)
{
GWBUF* buffer = gwbuf_append(create_buffer(0x00ffffff), create_buffer(i));
ss_dassert(gwbuf_length(buffer) == 0xffffff + i + 8);
ss_dassert(gwbuf_length(buffer) == 0xffffffUL + i + 8);
GWBUF_RTRIM(buffer->next, 1)
GWBUF* complete = modutil_get_complete_packets(&buffer);
ss_info_dassert(buffer, "Incomplete buffer is not NULL");
@ -591,9 +591,9 @@ void test_large_packets()
}
}
char* bypass_whitespace(char* sql)
char* bypass_whitespace(const char* sql)
{
return modutil_MySQL_bypass_whitespace(sql, strlen(sql));
return modutil_MySQL_bypass_whitespace((char*)sql, strlen(sql));
}
void test_bypass_whitespace()

View File

@ -93,7 +93,7 @@ test1()
ss_dfprintf(stderr, "Filled %d, emptied %d, expired %d\n", filled, emptied, expired);
if (random_jkiss() % 2)
{
int *entrynumber = MXS_MALLOC(sizeof(int));
int *entrynumber = (int*)MXS_MALLOC(sizeof(int));
*entrynumber = input_counter;
if (mxs_enqueue(queue, entrynumber))
{

View File

@ -64,10 +64,10 @@ test1()
//ss_info_dassert(0 != service_isvalid(service), "Service must be valid after creation");
ss_dfprintf(stderr, "\t..done\nTest Parameter for Server.");
ss_info_dassert(NULL == server_get_parameter(server, "name"), "Parameter should be null when not set");
ss_info_dassert(NULL == server_get_parameter(server, (char*)"name"), "Parameter should be null when not set");
server_add_parameter(server, "name", "value");
mxs_log_flush_sync();
ss_info_dassert(0 == strcmp("value", server_get_parameter(server, "name")),
ss_info_dassert(0 == strcmp("value", server_get_parameter(server, (char*)"name")),
"Parameter should be returned correctly");
ss_dfprintf(stderr, "\t..done\nTesting Unique Name for Server.");
ss_info_dassert(NULL == server_find_by_unique_name("non-existent"),
@ -115,7 +115,7 @@ bool test_load_config(const char *input, SERVER *server)
if (duplicate_context_init(&dcontext))
{
CONFIG_CONTEXT ccontext = {.object = ""};
CONFIG_CONTEXT ccontext = {.object = (char*)""};
if (config_load_single_file(input, &dcontext, &ccontext))
{