MXS-1929: Add basic filter creation/destruction test
The test creates and destroys a regexfilter at runtime and checks that the filter remains in use for as long as the connection is open.
This commit is contained in:
@ -1024,6 +1024,10 @@ add_test_executable(mxs1926_killed_server.cpp mxs1926_killed_server mxs1926_kill
|
|||||||
# https://jira.mariadb.org/browse/MXS-1929
|
# https://jira.mariadb.org/browse/MXS-1929
|
||||||
add_test_executable(mxs1929_service_runtime.cpp mxs1929_service_runtime mxs1929_service_runtime LABELS REPL_BACKEND)
|
add_test_executable(mxs1929_service_runtime.cpp mxs1929_service_runtime mxs1929_service_runtime LABELS REPL_BACKEND)
|
||||||
|
|
||||||
|
# MXS-1929: Runtime filter creation/destruction
|
||||||
|
# https://jira.mariadb.org/browse/MXS-1929
|
||||||
|
add_test_executable(mxs1929_filter_runtime.cpp mxs1929_filter_runtime mxs1929_filter_runtime LABELS REPL_BACKEND)
|
||||||
|
|
||||||
# MXS-1932: Hidden files are not ignored
|
# MXS-1932: Hidden files are not ignored
|
||||||
# https://jira.mariadb.org/browse/MXS-1932
|
# https://jira.mariadb.org/browse/MXS-1932
|
||||||
add_test_executable(mxs1932_hidden_cnf.cpp mxs1932_hidden_cnf replication LABELS REPL_BACKEND)
|
add_test_executable(mxs1932_hidden_cnf.cpp mxs1932_hidden_cnf replication LABELS REPL_BACKEND)
|
||||||
|
|||||||
@ -0,0 +1,13 @@
|
|||||||
|
[maxscale]
|
||||||
|
threads=###threads###
|
||||||
|
log_info=1
|
||||||
|
|
||||||
|
[CLI]
|
||||||
|
type=service
|
||||||
|
router=cli
|
||||||
|
|
||||||
|
[CLI Listener]
|
||||||
|
type=listener
|
||||||
|
service=CLI
|
||||||
|
protocol=maxscaled
|
||||||
|
socket=default
|
||||||
70
maxscale-system-test/mxs1929_filter_runtime.cpp
Normal file
70
maxscale-system-test/mxs1929_filter_runtime.cpp
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* MXS-1929: Runtime filter creation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "testconnections.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
void create_all(TestConnections& test)
|
||||||
|
{
|
||||||
|
test.check_maxctrl("create server server1 " + string(test.repl->ip(0)) + " " + to_string(test.repl->port[0]));
|
||||||
|
test.check_maxctrl("create server server2 " + string(test.repl->ip(1)) + " " + to_string(test.repl->port[1]));
|
||||||
|
test.check_maxctrl("create server server3 " + string(test.repl->ip(2)) + " " + to_string(test.repl->port[2]));
|
||||||
|
test.check_maxctrl("create service svc1 readwritesplit user=skysql password=skysql --servers server1 server2 server3");
|
||||||
|
test.check_maxctrl("create listener svc1 listener1 4006");
|
||||||
|
test.check_maxctrl("create monitor mon1 mariadbmon --monitor-user skysql --monitor-password skysql --servers server1 server2 server3");
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroy_all(TestConnections& test)
|
||||||
|
{
|
||||||
|
test.check_maxctrl("unlink monitor mon1 server1 server2 server3");
|
||||||
|
test.check_maxctrl("unlink service svc1 server1 server2 server3");
|
||||||
|
test.check_maxctrl("destroy listener svc1 listener1");
|
||||||
|
test.check_maxctrl("destroy service svc1");
|
||||||
|
test.check_maxctrl("destroy monitor mon1");
|
||||||
|
test.check_maxctrl("destroy server server1");
|
||||||
|
test.check_maxctrl("destroy server server2");
|
||||||
|
test.check_maxctrl("destroy server server3");
|
||||||
|
}
|
||||||
|
|
||||||
|
void basic(TestConnections& test)
|
||||||
|
{
|
||||||
|
test.check_maxctrl("create filter test1 regexfilter \"match=SELECT 1\" \"replace=SELECT 2\"");
|
||||||
|
test.check_maxctrl("alter service filters svc1 test1");
|
||||||
|
|
||||||
|
Connection c = test.maxscales->rwsplit();
|
||||||
|
c.connect();
|
||||||
|
test.assert(c.check("SELECT 1", "2"), "The regex filter did not replace the query");
|
||||||
|
|
||||||
|
|
||||||
|
auto res = test.maxctrl("destroy filter test1");
|
||||||
|
test.assert(res.first != 0, "Destruction should fail when filter is in use");
|
||||||
|
|
||||||
|
test.check_maxctrl("alter service filters svc1");
|
||||||
|
test.check_maxctrl("destroy filter test1");
|
||||||
|
|
||||||
|
test.assert(c.check("SELECT 1", "2"), "The filter should not yet be destroyed");
|
||||||
|
|
||||||
|
c.disconnect();
|
||||||
|
c.connect();
|
||||||
|
|
||||||
|
test.assert(c.check("SELECT 1", "1"), "The filter should be destroyed");
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
TestConnections test(argc, argv);
|
||||||
|
|
||||||
|
test.tprintf("Creating servers, monitors and services");
|
||||||
|
create_all(test);
|
||||||
|
|
||||||
|
test.tprintf("Basic test");
|
||||||
|
basic(test);
|
||||||
|
|
||||||
|
test.tprintf("Destroying servers, monitors and services");
|
||||||
|
destroy_all(test);
|
||||||
|
|
||||||
|
return test.global_result;
|
||||||
|
}
|
||||||
@ -519,6 +519,25 @@ public:
|
|||||||
*/
|
*/
|
||||||
void process_template(int m, const char *src, const char *dest = "/etc/maxscale.cnf");
|
void process_template(int m, const char *src, const char *dest = "/etc/maxscale.cnf");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a MaxCtrl command
|
||||||
|
*
|
||||||
|
* @param cmd Command to execute, without the `maxctrl` part
|
||||||
|
* @param m MaxScale node to execute the command on
|
||||||
|
* @param sudo Run the command as root
|
||||||
|
*
|
||||||
|
* @return The exit code and output of MaxCtrl
|
||||||
|
*/
|
||||||
|
std::pair<int, std::string> maxctrl(std::string cmd, int m = 0, bool sudo = true)
|
||||||
|
{
|
||||||
|
return maxscales->ssh_output("maxctrl " + cmd, m, sudo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_maxctrl(std::string cmd, int m = 0, bool sudo = true)
|
||||||
|
{
|
||||||
|
auto result = maxctrl(cmd, m, sudo);
|
||||||
|
assert(result.first == 0, "Command '%s' should work: %s", cmd.c_str(), result.second.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
void check_current_operations(int m, int value);
|
void check_current_operations(int m, int value);
|
||||||
void check_current_connections(int m, int value);
|
void check_current_connections(int m, int value);
|
||||||
|
|||||||
Reference in New Issue
Block a user