diff --git a/unittest/libmariadb/basic-t.c b/unittest/libmariadb/basic-t.c index 3efdea63..c3ea35fa 100644 --- a/unittest/libmariadb/basic-t.c +++ b/unittest/libmariadb/basic-t.c @@ -40,7 +40,7 @@ static int test_conc75(MYSQL *my) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); - mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, 0| CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS); + my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0| CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS); rc= mysql_query(mysql, "DROP TABLE IF EXISTS a"); check_mysql_rc(rc, mysql); @@ -80,7 +80,7 @@ static int test_conc74(MYSQL *unused __attribute__((unused))) mysql= mysql_init(NULL); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, 0| CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0| CLIENT_MULTI_RESULTS | CLIENT_REMEMBER_OPTIONS)) { diag("Error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -119,7 +119,7 @@ static int test_conc71(MYSQL *my) mysql_options(mysql, MYSQL_INIT_COMMAND, "/*!40101 SET SQL_MODE='' */"); mysql_options(mysql, MYSQL_INIT_COMMAND, "/*!40101 set @@session.wait_timeout=28800 */"); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); diag("kill server"); @@ -149,7 +149,7 @@ static int test_conc70(MYSQL *my) mysql_query(my, "SET global max_allowed_packet=1024*1024*22"); mysql_options(mysql, MYSQL_OPT_COMPRESS, (void *)1); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1"); @@ -207,7 +207,7 @@ static int test_conc68(MYSQL *my) mysql_query(my, "SET global max_allowed_packet=1024*1024*22"); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1"); @@ -257,7 +257,7 @@ static int basic_connect(MYSQL *unused __attribute__((unused))) MYSQL *my= mysql_init(NULL); FAIL_IF(!my, "mysql_init() failed"); - FAIL_IF(!mysql_real_connect(my, hostname, username, password, schema, + FAIL_IF(!my_test_connect(my, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); rc= mysql_query(my, "SELECT @@version"); @@ -647,7 +647,7 @@ static int test_status(MYSQL *mysql) static int bug_conc1(MYSQL *mysql) { - mysql_real_connect(mysql, hostname, username, password, schema, + my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0); diag("errno: %d", mysql_errno(mysql)); FAIL_IF(mysql_errno(mysql) != CR_ALREADY_CONNECTED, @@ -663,7 +663,7 @@ static int test_options_initcmd(MYSQL *unused __attribute__((unused))) mysql_options(mysql, MYSQL_INIT_COMMAND, "DROP TABLE IF EXISTS t1; CREATE TABLE t1 (a int)"); mysql_options(mysql, MYSQL_INIT_COMMAND, "INSERT INTO t1 VALUES (1),(2),(3)"); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS), mysql_error(mysql)); @@ -708,7 +708,7 @@ static int test_reconnect_maxpackage(MYSQL *unused __attribute__((unused))) SKIP_CONNECTION_HANDLER; mysql= mysql_init(NULL); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS), mysql_error(mysql)); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); @@ -760,7 +760,7 @@ static int test_compressed(MYSQL *unused __attribute__((unused))) my_bool reconnect= 1; mysql_options(mysql, MYSQL_OPT_COMPRESS, (void *)1); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_MULTI_STATEMENTS | CLIENT_MULTI_RESULTS), mysql_error(mysql)); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); diff --git a/unittest/libmariadb/charset.c b/unittest/libmariadb/charset.c index 83dcc5a0..7c9fac0d 100644 --- a/unittest/libmariadb/charset.c +++ b/unittest/libmariadb/charset.c @@ -737,7 +737,7 @@ static int charset_auto(MYSQL *my __attribute__((unused))) mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "auto"); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), mysql_error(mysql)); diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 0413371a..ceedc45d 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -57,7 +57,7 @@ static int test_conc66(MYSQL *my) check_mysql_rc(rc, my); rc= mysql_query(my, "FLUSH PRIVILEGES"); check_mysql_rc(rc, my); - if (!mysql_real_connect(mysql, hostname, NULL, + if (!my_test_connect(mysql, hostname, NULL, NULL, schema, port, socketname, 0)) { diag("Error: %s", mysql_error(mysql)); @@ -441,13 +441,13 @@ static int test_bug31669(MYSQL *mysql) } /** - Bug# 33831 mysql_real_connect() should fail if + Bug# 33831 my_test_connect() should fail if given an already connected MYSQL handle. */ static int test_bug33831(MYSQL *mysql) { - FAIL_IF(mysql_real_connect(mysql, hostname, username, + FAIL_IF(my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), "Error expected"); @@ -476,7 +476,7 @@ static int test_opt_reconnect(MYSQL *mysql) mysql_get_option(mysql, MYSQL_OPT_RECONNECT, &reconnect); FAIL_UNLESS(reconnect == 1, "reconnect != 1"); - if (!(mysql_real_connect(mysql, hostname, username, + if (!(my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0))) { @@ -496,7 +496,7 @@ static int test_opt_reconnect(MYSQL *mysql) mysql_get_option(mysql, MYSQL_OPT_RECONNECT, &reconnect); FAIL_UNLESS(reconnect == 0, "reconnect != 0"); - if (!(mysql_real_connect(mysql, hostname, username, + if (!(my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0))) { @@ -527,7 +527,7 @@ static int test_compress(MYSQL *mysql) - if (!(mysql_real_connect(mysql, hostname, username, + if (!(my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0))) { @@ -565,7 +565,7 @@ static int test_reconnect(MYSQL *mysql) mysql_get_option(mysql1, MYSQL_OPT_RECONNECT, &reconnect); FAIL_UNLESS(reconnect == 1, "reconnect != 1"); - if (!(mysql_real_connect(mysql1, hostname, username, + if (!(my_test_connect(mysql1, hostname, username, password, schema, port, socketname, 0))) { @@ -626,7 +626,7 @@ int test_conc26(MYSQL *unused __attribute__((unused))) MYSQL *mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "utf8"); - FAIL_IF(mysql_real_connect(mysql, hostname, "notexistinguser", "password", schema, port, NULL, CLIENT_REMEMBER_OPTIONS), + FAIL_IF(my_test_connect(mysql, hostname, "notexistinguser", "password", schema, port, NULL, CLIENT_REMEMBER_OPTIONS), "Error expected"); FAIL_IF(!mysql->options.charset_name || strcmp(mysql->options.charset_name, "utf8") != 0, @@ -634,7 +634,7 @@ int test_conc26(MYSQL *unused __attribute__((unused))) mysql_close(mysql); mysql= mysql_init(NULL); - FAIL_IF(mysql_real_connect(mysql, hostname, "notexistinguser", "password", schema, port, NULL, 0), + FAIL_IF(my_test_connect(mysql, hostname, "notexistinguser", "password", schema, port, NULL, 0), "Error expected"); FAIL_IF(mysql->options.charset_name, "Error: options not freed"); mysql_close(mysql); @@ -649,7 +649,7 @@ int test_connection_timeout(MYSQL *unused __attribute__((unused))) MYSQL *mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (unsigned int *)&timeout); start= time(NULL); - if (mysql_real_connect(mysql, "192.168.1.101", "notexistinguser", "password", schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) + if (my_test_connect(mysql, "192.168.1.101", "notexistinguser", "password", schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) { diag("Error expected - maybe you have to change hostname"); return FAIL; @@ -669,7 +669,7 @@ int test_connection_timeout2(MYSQL *unused __attribute__((unused))) mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (unsigned int *)&timeout); mysql_options(mysql, MYSQL_INIT_COMMAND, "set @a:=SLEEP(6)"); start= time(NULL); - if (mysql_real_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) + if (my_test_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) { diag("timeout error expected"); return FAIL; @@ -693,7 +693,7 @@ int test_connection_timeout3(MYSQL *unused __attribute__((unused))) mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, (unsigned int *)&read_write_timeout); mysql_options(mysql, MYSQL_INIT_COMMAND, "set @a:=SLEEP(6)"); start= time(NULL); - if (mysql_real_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) + if (my_test_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) { diag("timeout error expected"); elapsed= time(NULL) - start; @@ -710,7 +710,7 @@ int test_connection_timeout3(MYSQL *unused __attribute__((unused))) mysql_options(mysql, MYSQL_OPT_READ_TIMEOUT, (unsigned int *)&read_write_timeout); mysql_options(mysql, MYSQL_OPT_WRITE_TIMEOUT, (unsigned int *)&read_write_timeout); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, NULL, CLIENT_REMEMBER_OPTIONS)) { diag("Error: %s", mysql_error(mysql)); return FAIL; @@ -770,7 +770,7 @@ static int test_wrong_bind_address(MYSQL *unused __attribute__((unused))) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_BIND, bind_addr); - if (mysql_real_connect(mysql, hostname, username, + if (my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0)) { diag("Error expected"); @@ -815,7 +815,7 @@ static int test_bind_address(MYSQL *my) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_BIND, bind_addr); - if (!mysql_real_connect(mysql, bind_addr, username, + if (!my_test_connect(mysql, bind_addr, username, password, schema, port, socketname, 0)) { diag("Error: %s\n", mysql_error(mysql)); @@ -942,14 +942,15 @@ static int test_sess_track_db(MYSQL *mysql) "session_track_get_first failed"); FAIL_IF(strncmp(data, "testc", len), "Expected new schema 'testc'"); + diag("charset: %s", mysql->charset->csname); rc= mysql_query(mysql, "SET NAMES utf8"); check_mysql_rc(rc, mysql); - diag("charset: %s", mysql->charset->csname); - FAIL_IF(strcmp(mysql->charset->csname, "utf8"), "Expected charset 'utf8'"); if (!mysql_session_track_get_first(mysql, SESSION_TRACK_SYSTEM_VARIABLES, &data, &len)) do { printf("# SESSION_TRACK_VARIABLES: %*.*s\n", (int)len, (int)len, data); } while (!mysql_session_track_get_next(mysql, SESSION_TRACK_SYSTEM_VARIABLES, &data, &len)); + diag("charset: %s", mysql->charset->csname); + FAIL_IF(strcmp(mysql->charset->csname, "utf8"), "Expected charset 'utf8'"); rc= mysql_query(mysql, "SET NAMES latin1"); check_mysql_rc(rc, mysql); diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index b14df00e..befac8d8 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -910,7 +910,7 @@ static int test_connect_attrs(MYSQL *my) mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "foo1", "bar1"); mysql_options4(mysql, MYSQL_OPT_CONNECT_ATTR_ADD, "foo2", "bar2"); - FAIL_IF(!mysql_real_connect(mysql, hostname, username, password, schema, + FAIL_IF(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); if (!(mysql->server_capabilities & CLIENT_CONNECT_ATTRS)) @@ -959,7 +959,7 @@ static int test_conc117(MYSQL *unused __attribute__((unused))) { my_bool reconnect= 1; MYSQL *my= mysql_init(NULL); - FAIL_IF(!mysql_real_connect(my, hostname, username, password, schema, + FAIL_IF(!my_test_connect(my, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); mysql_kill(my, mysql_thread_id(my)); @@ -978,7 +978,7 @@ static int test_read_timeout(MYSQL *unused __attribute__((unused))) int timeout= 5, rc; MYSQL *my= mysql_init(NULL); mysql_options(my, MYSQL_OPT_READ_TIMEOUT, &timeout); - FAIL_IF(!mysql_real_connect(my, hostname, username, password, schema, + FAIL_IF(!my_test_connect(my, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); rc= mysql_query(my, "SELECT SLEEP(50)"); @@ -1034,7 +1034,7 @@ static int test_remote2(MYSQL *my) mysql_options(mysql, MYSQL_READ_DEFAULT_FILE, "http://localhost/test.cnf"); mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "test"); - mysql_real_connect(mysql, hostname, username, password, schema, + my_test_connect(mysql, hostname, username, password, schema, 0, socketname, 0), mysql_error(my); diag("port: %d", mysql->port); mysql_close(mysql); diff --git a/unittest/libmariadb/my_test.h b/unittest/libmariadb/my_test.h index 1ab43fcb..6dc88bae 100644 --- a/unittest/libmariadb/my_test.h +++ b/unittest/libmariadb/my_test.h @@ -116,12 +116,22 @@ struct my_tests_st const char *skipmsg; }; +MYSQL *my_test_connect(MYSQL *mysql, + const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag); + static const char *schema = 0; static char *hostname = 0; static char *password = 0; static unsigned int port = 0; static char *socketname = 0; static char *username = 0; +static int force_tls= 0; /* static struct my_option test_options[] = { @@ -313,6 +323,7 @@ static void usage() printf("-p password\n"); printf("-d database\n"); printf("-S socketname\n"); + printf("-t force use of TLS\n"); printf("-P port number\n"); printf("? displays this help and exits\n"); } @@ -321,7 +332,7 @@ void get_options(int argc, char **argv) { int c= 0; - while ((c=getopt(argc,argv, "h:u:p:d:w:P:S:?")) >= 0) + while ((c=getopt(argc,argv, "h:u:p:d:w:P:S:t:?")) >= 0) { switch(c) { case 'h': @@ -342,6 +353,9 @@ void get_options(int argc, char **argv) case 'S': socketname= optarg; break; + case 't': + force_tls= 1; + break; case '?': usage(); exit(0); @@ -408,7 +422,7 @@ MYSQL *test_connect(struct my_tests_st *test) i++; } } - if (!(mysql_real_connect(mysql, hostname, username, password, + if (!(my_test_connect(mysql, hostname, username, password, schema, port, socketname, (test) ? test->connect_flags:0))) { diag("Couldn't establish connection to server %s. Error (%d): %s", @@ -450,10 +464,33 @@ void get_envvars() { schema= "testc"; if (!port && (envvar= getenv("MYSQL_TEST_PORT"))) port= atoi(envvar); + if (!force_tls && (envvar= getenv("MYSQL_TEST_TLS"))) + force_tls= atoi(envvar); if (!socketname && (envvar= getenv("MYSQL_TEST_SOCKET"))) socketname= envvar; } +MYSQL *my_test_connect(MYSQL *mysql, + const char *host, + const char *user, + const char *passwd, + const char *db, + unsigned int port, + const char *unix_socket, + unsigned long clientflag) +{ + if (force_tls) + mysql_options(mysql, MYSQL_OPT_SSL_ENFORCE, &force_tls); + mysql= mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, clientflag); + if (mysql && force_tls && !mysql_get_ssl_cipher(mysql)) + { + diag("Error: TLS connection not established"); + return NULL; + } + return mysql; +} + + void run_tests(struct my_tests_st *test) { int i, rc, total=0; MYSQL *mysql, *mysql_default= NULL; /* default connection */ diff --git a/unittest/libmariadb/ps.c b/unittest/libmariadb/ps.c index 7b85e2dc..9965e48d 100644 --- a/unittest/libmariadb/ps.c +++ b/unittest/libmariadb/ps.c @@ -59,8 +59,8 @@ static int test_conc83(MYSQL *unused __attribute__((unused))) stmt= mysql_stmt_init(mysql); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); - FAIL_IF(!(mysql_real_connect(mysql, hostname, username, password, - schema, port, socketname, 0)), "mysql_real_connect failed"); + FAIL_IF(!(my_test_connect(mysql, hostname, username, password, + schema, port, socketname, 0)), "my_test_connect failed"); /* 1. Status is inited, so prepare should work */ @@ -825,8 +825,8 @@ static int test_prepare_alter(MYSQL *mysql) mysql_new= mysql_init(NULL); FAIL_IF(!mysql_new, "mysql_init failed"); - FAIL_IF(!(mysql_real_connect(mysql_new, hostname, username, password, - schema, port, socketname, 0)), "mysql_real_connect failed"); + FAIL_IF(!(my_test_connect(mysql_new, hostname, username, password, + schema, port, socketname, 0)), "my_test_connect failed"); rc= mysql_query(mysql_new, "ALTER TABLE test_prep_alter change id id_new varchar(20)"); diag("Error: %d %s", mysql_errno(mysql_new), mysql_error(mysql_new)); check_mysql_rc(rc, mysql_new); diff --git a/unittest/libmariadb/ssl.c.in b/unittest/libmariadb/ssl.c.in index 1cac46d7..a7b9d617 100644 --- a/unittest/libmariadb/ssl.c.in +++ b/unittest/libmariadb/ssl.c.in @@ -180,7 +180,7 @@ static int test_conc95(MYSQL *unused __attribute__((unused))) NULL); if (!mysql_real_connect(mysql, hostname, "ssluser1", sslpw, schema, - port, socketname, 0)) + port, socketname, 0)) { diag("could not establish x509 connection. Error: %s", mysql_error(mysql)); mysql_close(mysql); diff --git a/unittest/libmariadb/thread.c b/unittest/libmariadb/thread.c index d86d6f6a..aef9c5c6 100644 --- a/unittest/libmariadb/thread.c +++ b/unittest/libmariadb/thread.c @@ -14,7 +14,7 @@ static int basic_connect(MYSQL *unused __attribute__((unused))) MYSQL *my= mysql_init(NULL); FAIL_IF(!my, "mysql_init() failed"); - FAIL_IF(!mysql_real_connect(my, hostname, username, password, schema, + FAIL_IF(!my_test_connect(my, hostname, username, password, schema, port, socketname, 0), mysql_error(my)); rc= mysql_query(my, "SELECT @@version"); @@ -123,7 +123,7 @@ DWORD WINAPI thread_conc27(void) MYSQL_RES *res; mysql_thread_init(); mysql= mysql_init(NULL); - if(!mysql_real_connect(mysql, hostname, username, password, schema, + if(!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0)) { diag(">Error: %s", mysql_error(mysql));