
maxscale-system-test changed in order to control test environment by itself. Every test checks which machines are running, compare with list of needed machines and start new VMs is they are missing in the running machines list. Tests are executiong MDBCI commands, MDBCI executable should be in the PATH
77 lines
2.4 KiB
C++
77 lines
2.4 KiB
C++
/**
|
|
* MXS-2106: Maxscale CDC JSON output does not respect null values
|
|
*/
|
|
|
|
#include "testconnections.h"
|
|
#include <cdc_connector.h>
|
|
|
|
int main(int argc, char** argv)
|
|
{
|
|
TestConnections::skip_maxscale_start(true);
|
|
TestConnections::check_nodes(false);
|
|
TestConnections test(argc, argv);
|
|
|
|
test.set_timeout(120);
|
|
test.replicate_from_master(0);
|
|
|
|
test.repl->connect();
|
|
execute_query(test.repl->nodes[0],
|
|
"CREATE OR REPLACE TABLE `test`.`test1` ("
|
|
" `test1_id` int(10) unsigned NOT NULL AUTO_INCREMENT,"
|
|
" `some_id` int(10) unsigned DEFAULT NULL,"
|
|
" `desc` varchar(50) DEFAULT NULL,"
|
|
" `some_date` timestamp NULL DEFAULT NULL,"
|
|
" `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,"
|
|
" PRIMARY KEY (`test1_id`)"
|
|
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
|
|
"INSERT INTO test.test1(some_id,`desc`,some_date) VALUES (1,NULL,NULL), (NULL,'value1',NULL),"
|
|
"(NULL,NULL,NOW());"
|
|
"UPDATE test.test1 SET some_id = NULL, `desc` = 'value2', some_date = NOW() WHERE test1_id = 1;"
|
|
"UPDATE test.test1 SET some_id = 35, `desc` = NULL, some_date = NULL WHERE test1_id = 2;");
|
|
|
|
/** Give avrorouter some time to process the events */
|
|
test.stop_timeout();
|
|
sleep(10);
|
|
test.set_timeout(120);
|
|
|
|
CDC::Connection conn(test.maxscales->IP[0], 4001, "skysql", "skysql");
|
|
|
|
test.expect(conn.connect("test.test1"), "Failed to connect");
|
|
|
|
auto check = [&](const std::string& name) {
|
|
static int i = 1;
|
|
CDC::SRow row = conn.read();
|
|
|
|
if (row)
|
|
{
|
|
test.expect(row->is_null(name),
|
|
"%d: `%s` is not null: %s",
|
|
i++,
|
|
name.c_str(),
|
|
row->value(name).c_str());
|
|
}
|
|
else
|
|
{
|
|
test.tprintf("Error: %s", conn.error().c_str());
|
|
}
|
|
};
|
|
|
|
// The three inserts
|
|
check("some_date");
|
|
check("some_id");
|
|
check("some_id");
|
|
|
|
// First update
|
|
check("desc");
|
|
check("some_id");
|
|
|
|
// Second update
|
|
check("some_id");
|
|
check("desc");
|
|
|
|
execute_query(test.repl->nodes[0], "DROP TABLE `test1`");
|
|
test.repl->disconnect();
|
|
|
|
return test.global_result;
|
|
}
|