"Fossies" - the Fresh Open Source Software Archive

Member "mariadb-connector-c-3.0.8-src/unittest/libmariadb/t_aurora.c" (18 Dec 2018, 4103 Bytes) of package /linux/misc/mariadb-connector-c-3.0.8-src.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "t_aurora.c": 3.0.2-src_vs_3.0.3-src.

    1 /*
    2 */
    3 
    4 #include "my_test.h"
    5 #include "ma_pvio.h"
    6 
    7 static int aurora1(MYSQL *unused __attribute__((unused)))
    8 {
    9   int rc;
   10   my_bool read_only= 1;
   11   char *primary, *my_schema;
   12   MYSQL_RES *res;
   13   MYSQL *mysql= mysql_init(NULL);
   14 
   15   if (!mysql_real_connect(mysql, hostname, username, password, schema, port, NULL, 0))
   16   {
   17     diag("Error: %s", mysql_error(mysql));
   18     mysql_close(mysql);
   19     return FAIL;
   20   }
   21 
   22   rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
   23   check_mysql_rc(rc, mysql);
   24 
   25   rc= mysql_query(mysql, "CREATE TABLE t1 (a int, b varchar(20))");
   26   check_mysql_rc(rc, mysql);
   27 
   28   rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1, 'foo'), (2, 'bar')");
   29   check_mysql_rc(rc, mysql);
   30 
   31   mariadb_get_infov(mysql, MARIADB_CONNECTION_HOST, &primary);
   32   diag("primary: %s", primary);
   33 
   34   mysql_options(mysql, MARIADB_OPT_CONNECTION_READ_ONLY, &read_only);
   35 
   36   /* ensure, that this is a replica, so INSERT should fail */
   37   rc= mysql_query(mysql, "INSERT INTO t1 VALUES (3, 'error')");
   38   if (rc)
   39     diag("Expected error: %s", mysql_error(mysql));
   40 
   41   rc= mysql_query(mysql, "SELECT a, b FROM t1");
   42   check_mysql_rc(rc, mysql);
   43 
   44   res= mysql_store_result(mysql);
   45 
   46   diag("Num_rows: %lld", mysql_num_rows(res));
   47   mysql_free_result(res);
   48 
   49   mariadb_get_infov(mysql, MARIADB_CONNECTION_SCHEMA, &my_schema);
   50   diag("db: %s", my_schema);
   51 
   52   mysql_close(mysql);
   53 
   54   return OK;
   55 }
   56 
   57 static int test_wrong_user(MYSQL *unused __attribute__((unused)))
   58 {
   59   MYSQL *mysql= mysql_init(NULL);
   60 
   61   if (mysql_real_connect(mysql, hostname, "wrong_user", NULL, NULL, 0, NULL, 0))
   62   {
   63     diag("Error expected");
   64     mysql_close(mysql);
   65     return FAIL;
   66   }
   67   mysql_close(mysql);
   68   return OK;
   69 }
   70 
   71 static int test_reconnect(MYSQL *unused __attribute__((unused)))
   72 {
   73   MYSQL *mysql= mysql_init(NULL);
   74   MYSQL_RES *res;
   75   my_bool read_only= 1;
   76   int rc;
   77   my_bool reconnect= 1;
   78   char *aurora_host;
   79 
   80   mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect);
   81 
   82   if (!mysql_real_connect(mysql, hostname, username, password, schema, port, NULL, 0))
   83   {
   84     diag("Error: %s", mysql_error(mysql));
   85     mysql_close(mysql);
   86     return FAIL;
   87   }
   88 
   89   mariadb_get_infov(mysql, MARIADB_CONNECTION_HOST, &aurora_host);
   90   diag("host: %s", aurora_host);
   91 
   92   rc= mysql_query(mysql, "DROP TABLE IF EXISTS tx01");
   93   check_mysql_rc(rc, mysql);
   94   rc= mysql_query(mysql, "CREATE TABLE tx01 (a int)");
   95   check_mysql_rc(rc, mysql);
   96 
   97   /* we force cluster restart and promoting new primary:
   98    * we wait for 50 seconds - however there is no guarantee that
   99    * cluster was restarted already - so this test might fail */
  100   rc= system("/usr/local/aws/bin/aws rds failover-db-cluster --db-cluster-identifier instance-1-cluster");
  101 
  102   diag("aws return code: %d", rc);
  103 
  104   sleep(50);
  105   diag("Q1");
  106   rc= mysql_query(mysql, "INSERT INTO tx01 VALUES (1)");
  107   if (!rc)
  108     diag("error expected!");
  109   diag("Error: %s", mysql_error(mysql));
  110 
  111   diag("Q2");
  112   rc= mysql_query(mysql, "INSERT INTO tx01 VALUES (1)");
  113   if (rc)
  114   {  
  115     diag("no error expected!");
  116     diag("Error: %s", mysql_error(mysql));
  117     diag("host: %s", mysql->host);
  118   }
  119   else
  120   {
  121     mariadb_get_infov(mysql, MARIADB_CONNECTION_HOST, &aurora_host);
  122     diag("host: %s", aurora_host);
  123   }
  124 
  125   mysql_options(mysql, MARIADB_OPT_CONNECTION_READ_ONLY, &read_only);
  126 
  127   rc= mysql_query(mysql, "SELECT * from tx01");
  128   check_mysql_rc(rc, mysql);
  129 
  130   if ((res= mysql_store_result(mysql)))
  131   {
  132     diag("num_rows: %lld", mysql_num_rows(res));
  133     mysql_free_result(res);
  134   }
  135 
  136   mariadb_get_infov(mysql, MARIADB_CONNECTION_HOST, &aurora_host);
  137   diag("host: %s", aurora_host);
  138 
  139   mysql_close(mysql); 
  140   return OK;
  141 }
  142 
  143 struct my_tests_st my_tests[] = {
  144   {"aurora1", aurora1, TEST_CONNECTION_NONE, 0,  NULL,  NULL},
  145   {"test_wrong_user", test_wrong_user, TEST_CONNECTION_NONE, 0,  NULL,  NULL},
  146   {"test_reconnect", test_reconnect, TEST_CONNECTION_NONE, 0, NULL, NULL}, 
  147   {NULL, NULL, 0, 0, NULL, NULL}
  148 };
  149 
  150 
  151 int main(int argc, char **argv)
  152 {
  153   mysql_library_init(0,0,NULL);
  154 
  155   if (argc > 1)
  156     get_options(argc, argv);
  157 
  158   get_envvars();
  159 
  160   run_tests(my_tests);
  161 
  162   mysql_server_end();
  163   return(exit_status());
  164 }