 b07c53d532
			
		
	
	b07c53d532
	
	
	
		
			
			Was deprecated in 2.3. Similar features are in MariaDB-Monitor. One system test was modified to use MariaDB-Monitor instead. Some parts of the test are disabled for now to make it pass.
		
			
				
	
	
		
			169 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|  * @file mm test of mariadbmon in a multimaster situation
 | |
|  *
 | |
|  * - use mariadbmon as monitor
 | |
|  * - reset master, stop slaves, stop all nodes
 | |
|  * - start 2 nodes
 | |
|  * - execute SET MASTER TO on node0 to point to node1 and on node1 to point to node0
 | |
|  * - execute SET GLOBAL READ_ONLY=ON on node0
 | |
|  * - check server status using maxadmin interface, expect Master on node1 and Slave on node0
 | |
|  * - put data to DB using RWSplit, check data using RWSplit and directrly from backend nodes
 | |
|  * - block node0 (slave)
 | |
|  * - check server status using maxadmin interface, expect node0 Down
 | |
|  * - put data and check it
 | |
|  * - unblock node0
 | |
|  * - block node1 (master)
 | |
|  * - check server status using maxadmin interface, expect node1 Down
 | |
|  * - execute SET GLOBAL READ_ONLY=OFF on node0
 | |
|  * - unblock node0
 | |
|  * - execute SET GLOBAL READ_ONLY=ON on node1
 | |
|  * - check server status using maxadmin interface, expect Master on node0 and Slave on node1
 | |
|  */
 | |
| 
 | |
| 
 | |
| #include <iostream>
 | |
| #include "testconnections.h"
 | |
| #include "maxadmin_operations.h"
 | |
| #include "sql_t1.h"
 | |
| 
 | |
| int check_conf(TestConnections& test, int blocked_node)
 | |
| {
 | |
|     int global_result = 0;
 | |
|     test.set_timeout(60);
 | |
| 
 | |
|     test.repl->connect();
 | |
|     test.maxscales->connect_rwsplit(0);
 | |
|     create_t1(test.maxscales->conn_rwsplit[0]);
 | |
|     global_result += insert_into_t1(test.maxscales->conn_rwsplit[0], 1);
 | |
| 
 | |
|     printf("Sleeping to let replication happen\n");
 | |
|     fflush(stdout);
 | |
|     test.stop_timeout();
 | |
|     sleep(10);
 | |
| 
 | |
|     for (int i = 0; i < 2; i++)
 | |
|     {
 | |
|         if (i != blocked_node)
 | |
|         {
 | |
|             test.tprintf("Checking data from node %d (%s)\n", i, test.repl->IP[i]);
 | |
|             test.set_timeout(100);
 | |
|             global_result += select_from_t1(test.repl->nodes[i], 1);
 | |
|         }
 | |
|     }
 | |
|     test.set_timeout(100);
 | |
|     printf("Checking data from rwsplit\n");
 | |
|     fflush(stdout);
 | |
|     global_result += select_from_t1(test.maxscales->conn_rwsplit[0], 1);
 | |
|     global_result += execute_query(test.maxscales->conn_rwsplit[0], "DROP TABLE t1");
 | |
| 
 | |
|     test.repl->close_connections();
 | |
|     mysql_close(test.maxscales->conn_rwsplit[0]);
 | |
| 
 | |
|     test.stop_timeout();
 | |
|     return global_result;
 | |
| }
 | |
| 
 | |
| int main(int argc, char* argv[])
 | |
| {
 | |
|     TestConnections test(argc, argv);
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     char maxadmin_result[1024];
 | |
| 
 | |
|     test.repl->set_repl_user();
 | |
| 
 | |
|     test.start_mm(0);   // first node - slave, second - master
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server1", (char*) "Status:", maxadmin_result);
 | |
|     test.tprintf("node0 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Slave, Running") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node0 is not slave, status is %s\n", maxadmin_result);
 | |
|     }
 | |
|     test.set_timeout(120);
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server2", (char*) "Status:", maxadmin_result);
 | |
|     test.tprintf("node1 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Master, Running") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node1 is not master, status is %s\n", maxadmin_result);
 | |
|     }
 | |
|     test.set_timeout(120);
 | |
| //    printf("Put some data and check\n");
 | |
| //    test.add_result(check_conf(test, 2), "Configuration broken\n");
 | |
|     test.set_timeout(120);
 | |
|     test.tprintf("Block slave\n");
 | |
|     test.repl->block_node(0);
 | |
|     test.stop_timeout();
 | |
|     test.maxscales->wait_for_monitor();
 | |
|     test.set_timeout(120);
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server1", (char*) "Status:", maxadmin_result);
 | |
|     printf("node0 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Down") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node0 is not down, status is %s\n", maxadmin_result);
 | |
|     }
 | |
|     test.set_timeout(120);
 | |
| //    test.tprintf("Put some data and check\n");
 | |
| //    test.add_result(check_conf(test, 0), "configuration broken\n");
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     test.tprintf("Unlock slave\n");
 | |
|     test.repl->unblock_node(0);
 | |
|     test.maxscales->wait_for_monitor();
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     test.tprintf("Block master\n");
 | |
|     test.repl->block_node(1);
 | |
|     test.maxscales->wait_for_monitor();
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server2", (char*) "Status:", maxadmin_result);
 | |
|     printf("node1 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Down") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node1 is not down, status is %s\n", maxadmin_result);
 | |
|     }
 | |
|     test.tprintf("Make node 1 master\n");
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     test.repl->connect();
 | |
|     execute_query(test.repl->nodes[0], (char*) "SET GLOBAL READ_ONLY=OFF");
 | |
|     test.repl->close_connections();
 | |
| 
 | |
|     test.maxscales->wait_for_monitor();
 | |
|     test.set_timeout(120);
 | |
|  //   test.tprintf("Put some data and check\n");
 | |
|  //   test.add_result(check_conf(test, 1), "configuration broken\n");
 | |
| 
 | |
|     printf("Unlock slave\n");
 | |
|     test.repl->unblock_node(1);
 | |
|     test.maxscales->wait_for_monitor();
 | |
| 
 | |
|     test.set_timeout(120);
 | |
|     printf("Make node 2 slave\n");
 | |
|     test.repl->connect();
 | |
|     execute_query(test.repl->nodes[1], (char*) "SET GLOBAL READ_ONLY=ON");
 | |
|     test.repl->close_connections();
 | |
|     test.maxscales->wait_for_monitor();
 | |
| 
 | |
|     test.set_timeout(120);
 | |
| //    printf("Put some data and check\n");
 | |
| //    test.add_result(check_conf(test, 2), "Configuration broken\n");
 | |
| 
 | |
|     test.set_timeout(60);
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server2", (char*) "Status:", maxadmin_result);
 | |
|     printf("node1 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Slave, Running") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node1 is not slave, status is %s\n", maxadmin_result);
 | |
|     }
 | |
|     test.set_timeout(60);
 | |
|     test.maxscales->get_maxadmin_param(0, (char*) "show server server1", (char*) "Status:", maxadmin_result);
 | |
|     test.tprintf("node0 %s\n", maxadmin_result);
 | |
|     if (strstr(maxadmin_result, "Master, Running") == NULL)
 | |
|     {
 | |
|         test.add_result(1, "Node0 is not master, status is %s\n", maxadmin_result);
 | |
|     }
 | |
| 
 | |
|     return test.global_result;
 | |
| }
 |