diff --git a/maxscale-system-test/connect_to_nonexisting_db.cpp b/maxscale-system-test/connect_to_nonexisting_db.cpp index bf7199db8..bd348cdbc 100644 --- a/maxscale-system-test/connect_to_nonexisting_db.cpp +++ b/maxscale-system-test/connect_to_nonexisting_db.cpp @@ -1,66 +1,85 @@ /** - * @file connect_to_nonexisting_db.cpp Tries to connect to non existing DB, expects no crash - */ + * @file connect_to_nonexisting_db.cpp Tries to connect to non existing DB, expects no crash + */ -// some relations to bug#425 - -#include #include "testconnections.h" #include "sql_t1.h" -using namespace std; +bool try_connect(TestConnections& test) +{ + const char* ip = test.maxscale_IP; + const char* user = test.maxscale_user; + const char* pw = test.maxscale_password; + const char* db = "test_db"; + + MYSQL* rwsplit = open_conn_db(test.rwsplit_port, ip, db, user, pw, false); + MYSQL* master = open_conn_db(test.readconn_master_port, ip, db, user, pw, false); + MYSQL* slave = open_conn_db(test.readconn_slave_port, ip, db, user, pw, false); + bool rval = false; + + if (rwsplit && master && slave && + execute_query(rwsplit, "SELECT 1") == 0 && + execute_query(master, "SELECT 1") == 0 && + execute_query(slave, "SELECT 1") == 0) + + { + rval = true; + } + + mysql_close(rwsplit); + mysql_close(master); + mysql_close(slave); + + return rval; +} int main(int argc, char *argv[]) { - TestConnections * Test = new TestConnections(argc, argv); - Test->set_timeout(30); + TestConnections test(argc, argv); - Test->tprintf("Connecting to RWSplit\n"); - Test->conn_rwsplit = open_conn_no_db(Test->rwsplit_port, Test->maxscale_IP, Test->maxscale_user, - Test->maxscale_password, Test->ssl); - if (Test->conn_rwsplit == NULL) - { - Test->add_result(1, "Error connecting to MaxScale\n"); - delete Test; - return 1; - } - Test->tprintf("Removing 'test' DB\n"); - execute_query(Test->conn_rwsplit, (char *) "DROP DATABASE IF EXISTS test;"); - Test->tprintf("Closing connections and waiting 5 seconds\n"); - Test->close_rwsplit(); + test.tprintf("Connecting to RWSplit"); + + test.set_timeout(30); + MYSQL* conn = open_conn_no_db(test.rwsplit_port, test.maxscale_IP, test.maxscale_user, + test.maxscale_password, test.ssl); + test.add_result(conn == NULL, "Error connecting to MaxScale"); + + test.tprintf("Removing 'test_db' DB"); + execute_query(conn, "DROP DATABASE IF EXISTS test_db"); + test.tprintf("Closing connections and waiting 5 seconds"); + mysql_close(conn); + test.stop_timeout(); sleep(5); - Test->tprintf("Connection to non-existing DB (all routers)\n"); - Test->connect_maxscale(); - Test->close_maxscale_connections(); + test.set_timeout(30); + test.tprintf("Connection to non-existing DB (all routers)"); + test.add_result(try_connect(test), "Connection with dropped database should fail"); - Test->tprintf("Connecting to RWSplit again to recreate 'test' db\n"); - Test->conn_rwsplit = open_conn_no_db(Test->rwsplit_port, Test->maxscale_IP, Test->maxscale_user, - Test->maxscale_password, Test->ssl); - if (Test->conn_rwsplit == NULL) - { - printf("Error connecting to MaxScale\n"); - delete Test; - return 1; - } + test.tprintf("Connecting to RWSplit again to recreate 'test_db' db"); + conn = open_conn_no_db(test.rwsplit_port, test.maxscale_IP, test.maxscale_user, + test.maxscale_password, test.ssl); + test.add_result(conn == NULL, "Error connecting to MaxScale"); - Test->tprintf("Creating and selecting 'test' DB\n"); - Test->try_query(Test->conn_rwsplit, (char *) "CREATE DATABASE test; USE test"); - Test->tprintf("Creating 't1' table\n"); - Test->add_result(create_t1(Test->conn_rwsplit), "Error creation 't1'\n"); - Test->close_rwsplit(); + test.tprintf("Creating and selecting 'test_db' DB"); + test.try_query(conn, "CREATE DATABASE test_db"); + test.try_query(conn, "USE test_db"); + test.tprintf("Creating 't1' table"); + test.add_result(create_t1(conn), "Error creation 't1'"); + mysql_close(conn); - Test->tprintf("Reconnectiong\n"); - Test->add_result(Test->connect_maxscale(), "error connection to Maxscale\n"); - Test->tprintf("Trying simple operations with t1 \n"); - Test->try_query(Test->conn_rwsplit, (char *) "INSERT INTO t1 (x1, fl) VALUES(0, 1);"); - Test->set_timeout(240); - Test->add_result(execute_select_query_and_check(Test->conn_rwsplit, (char *) "SELECT * FROM t1;", 1), - "Error execution SELECT * FROM t1;\n"); + test.tprintf("Reconnectiong"); + test.add_result(!try_connect(test), "Error connecting to Maxscale"); - Test->close_maxscale_connections(); - int rval = Test->global_result; - delete Test; - return rval; + test.tprintf("Trying simple operations with t1 "); + conn = open_conn_no_db(test.rwsplit_port, test.maxscale_IP, test.maxscale_user, + test.maxscale_password, test.ssl); + test.try_query(conn, "USE test_db"); + test.try_query(conn, "INSERT INTO t1 (x1, fl) VALUES(0, 1)"); + test.set_timeout(60); + test.add_result(execute_select_query_and_check(conn, "SELECT * FROM t1", 1), + "Error execution SELECT * FROM t1;"); + mysql_close(conn); + + return test.global_result; }