diff --git a/.travis.yml b/.travis.yml index 4ab907cc..f2f0c15e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,6 +28,7 @@ matrix: # - env: SERVER_BRANCH=10.5 TEST_OPTION=--ps-protocol include: - env: DB=build + - env: SKYSQL=true # disable for now - env: DB=mysql:8.0 - env: DB=mariadb:10.1 - env: DB=mariadb:10.2 diff --git a/.travis/script.sh b/.travis/script.sh index cd535b55..fb928583 100644 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -7,52 +7,69 @@ set -e # test different type of configuration ################################################################################################################### mysql=( mysql --protocol=tcp -ubob -h127.0.0.1 --port=3305 ) -export COMPOSE_FILE=.travis/docker-compose.yml + +if [ -n "$SKYSQL" ] ; then + + if [ -z "$SKYSQL_TEST_HOST" ] ; then + echo "No SkySQL configuration found !" + exit 1 + fi + + export MYSQL_TEST_USER=$SKYSQL_TEST_USER + export MYSQL_TEST_HOST=$SKYSQL_TEST_HOST + export MYSQL_TEST_PASSWD=$SKYSQL_TEST_PASSWORD + export MYSQL_TEST_PORT=$SKYSQL_TEST_PORT + export MYSQL_TEST_DATABASE=$SKYSQL_TEST_DATABASE + export MYSQL_TEST_TLS=1 +else + export COMPOSE_FILE=.travis/docker-compose.yml -################################################################################################################### -# launch docker server and maxscale -################################################################################################################### -export INNODB_LOG_FILE_SIZE=$(echo ${PACKET}| cut -d'M' -f 1)0M -docker-compose -f ${COMPOSE_FILE} build -docker-compose -f ${COMPOSE_FILE} up -d + ################################################################################################################### + # launch docker server and maxscale + ################################################################################################################### + export INNODB_LOG_FILE_SIZE=$(echo ${PACKET}| cut -d'M' -f 1)0M + docker-compose -f ${COMPOSE_FILE} build + docker-compose -f ${COMPOSE_FILE} up -d -################################################################################################################### -# wait for docker initialisation -################################################################################################################### + ################################################################################################################### + # wait for docker initialisation + ################################################################################################################### -for i in {60..0}; do + for i in {60..0}; do if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then break fi echo 'data server still not active' sleep 1 -done + done -docker-compose -f ${COMPOSE_FILE} logs + docker-compose -f ${COMPOSE_FILE} logs -if [ "$i" = 0 ]; then + if [ "$i" = 0 ]; then echo 'SELECT 1' | "${mysql[@]}" echo >&2 'data server init process failed.' exit 1 + fi + + #list ssl certificates + ls -lrt ${SSLCERT} + + + export MYSQL_TEST_HOST=mariadb.example.com + export MYSQL_TEST_DB=ctest + export MYSQL_TEST_USER=bob + export MYSQL_TEST_PORT=3305 + export MYSQL_TEST_TRAVIS=1 + export MARIADB_PLUGIN_DIR=$PWD + fi -#list ssl certificates -ls -lrt ${SSLCERT} - - #build C connector cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=OPENSSL -DCERT_PATH=${SSLCERT} make -export MYSQL_TEST_HOST=mariadb.example.com -export MYSQL_TEST_DB=ctest -export MYSQL_TEST_USER=bob -export MYSQL_TEST_PORT=3305 -export MYSQL_TEST_TRAVIS=1 -export MARIADB_PLUGIN_DIR=$PWD - ## list ciphers openssl ciphers -v diff --git a/unittest/libmariadb/basic-t.c b/unittest/libmariadb/basic-t.c index d7b1d4d7..9151ef11 100644 --- a/unittest/libmariadb/basic-t.c +++ b/unittest/libmariadb/basic-t.c @@ -37,6 +37,8 @@ static int test_conc75(MYSQL *my) int i; my_bool reconnect= 1; + SKIP_SKYSQL; + mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); @@ -144,6 +146,8 @@ static int test_conc70(MYSQL *my) SKIP_CONNECTION_HANDLER; + SKIP_SKYSQL; + mysql= mysql_init(NULL); rc= mysql_query(my, "SET @a:=@@max_allowed_packet"); @@ -205,6 +209,8 @@ static int test_conc68(MYSQL *my) MYSQL *mysql; SKIP_CONNECTION_HANDLER; + SKIP_SKYSQL; + mysql= mysql_init(NULL); @@ -259,8 +265,9 @@ static int basic_connect(MYSQL *unused __attribute__((unused))) MYSQL_RES *res; MYSQL_FIELD *field; int rc; + MYSQL *my; - MYSQL *my= mysql_init(NULL); + my= mysql_init(NULL); FAIL_IF(!my, "mysql_init() failed"); FAIL_IF(!my_test_connect(my, hostname, username, password, schema, diff --git a/unittest/libmariadb/conc336.c b/unittest/libmariadb/conc336.c index b155c160..e382f471 100644 --- a/unittest/libmariadb/conc336.c +++ b/unittest/libmariadb/conc336.c @@ -12,6 +12,11 @@ int main(int argc, char *argv[]) { get_envvars(); + if (IS_SKYSQL(hostname)) + return 0; + + diag("hostname: %s", hostname); + for (i = 0; i < MAX_COUNT; ++i) { if (mysql_library_init(-1, NULL, NULL) != 0) { @@ -25,6 +30,9 @@ int main(int argc, char *argv[]) { return 1; } + if (force_tls) + mysql_options(mysql, MYSQL_OPT_SSL_ENFORCE, &force_tls); + if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, 0)) { diag("mysql_real_connect failed: %s", mysql_error(mysql)); return 1; diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 933d27cf..11632e69 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -34,6 +34,8 @@ static int test_conc66(MYSQL *my) FILE *fp; char query[1024]; + SKIP_SKYSQL; + if (!(fp= fopen("./my-conc66-test.cnf", "w"))) return FAIL; @@ -85,6 +87,8 @@ static int test_bug20023(MYSQL *mysql) int sql_big_selects_5; int rc; + SKIP_SKYSQL; + if (!is_mariadb) return SKIP; @@ -669,7 +673,11 @@ int test_connection_timeout2(MYSQL *unused __attribute__((unused))) { unsigned int timeout= 5; time_t start, elapsed; - MYSQL *mysql= mysql_init(NULL); + MYSQL *mysql; + + SKIP_SKYSQL; + + mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, (unsigned int *)&timeout); mysql_options(mysql, MYSQL_INIT_COMMAND, "set @a:=SLEEP(6)"); start= time(NULL); @@ -791,6 +799,8 @@ static int test_bind_address(MYSQL *my) char query[128]; int rc; + SKIP_SKYSQL; + if (!hostname || !strcmp(hostname, "localhost")) { diag("test doesn't work with unix sockets"); @@ -994,6 +1004,8 @@ static int test_unix_socket_close(MYSQL *unused __attribute__((unused))) FILE *fp; int i; + SKIP_SKYSQL; + if (!(fp= fopen("./dummy_sock", "w"))) { diag("couldn't create dummy socket"); @@ -1003,7 +1015,7 @@ static int test_unix_socket_close(MYSQL *unused __attribute__((unused))) for (i=0; i < 10000; i++) { - mysql_real_connect(mysql, "localhost", "user", "passwd", NULL, 0, "./dummy_sock", 0); + my_test_connect(mysql, "localhost", "user", "passwd", NULL, 0, "./dummy_sock", 0); /* check if we run out of sockets */ if (mysql_errno(mysql) == 2001) { @@ -1081,6 +1093,9 @@ static int test_auth256(MYSQL *my) my_ulonglong num_rows= 0; char query[1024]; + if (IS_SKYSQL(hostname)) + return SKIP; + if (!mysql_client_find_plugin(mysql, "sha256_password", MYSQL_CLIENT_AUTHENTICATION_PLUGIN)) { diag("sha256_password plugin not available"); @@ -1109,7 +1124,7 @@ static int test_auth256(MYSQL *my) rc= mysql_query(my, query); check_mysql_rc(rc, my); - if (!mysql_real_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) + if (!my_test_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) { diag("error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -1119,7 +1134,7 @@ static int test_auth256(MYSQL *my) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_SERVER_PUBLIC_KEY, "rsa_public_key.pem"); - if (!mysql_real_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) + if (!my_test_connect(mysql, hostname, "sha256user", "foo", NULL, port, socketname, 0)) { diag("error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -1283,7 +1298,7 @@ static int test_conc276(MYSQL *unused __attribute__((unused))) mysql_options(mysql, MYSQL_OPT_SSL_ENFORCE, &val); mysql_options(mysql, MYSQL_OPT_RECONNECT, &val); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, 0)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, socketname, 0)) { diag("Connection failed. Error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -1389,6 +1404,8 @@ static int test_conc317(MYSQL *unused __attribute__((unused))) const char *env= getenv("MYSQL_TMP_DIR"); char cnf_file1[FN_REFLEN + 1]; + SKIP_SKYSQL; + if (travis_test) return SKIP; @@ -1430,6 +1447,8 @@ static int test_conc327(MYSQL *unused __attribute__((unused))) char cnf_file1[FN_REFLEN + 1]; char cnf_file2[FN_REFLEN + 1]; + SKIP_SKYSQL; + if (travis_test) return SKIP; @@ -1587,7 +1606,7 @@ static int test_conc312(MYSQL *my) check_mysql_rc(rc, my); mysql= mysql_init(NULL); - if (!mysql_real_connect(mysql, hostname, "foo", "foo", schema, port, socketname, 0)) + if (!my_test_connect(mysql, hostname, "foo", "foo", schema, port, socketname, 0)) { diag("Error: %s", mysql_error(mysql)); return FAIL; @@ -1608,6 +1627,8 @@ static int test_conc366(MYSQL *mysql) int rc; MYSQL *my; + SKIP_SKYSQL; + if (!is_mariadb) { diag("feature not supported by MySQL server"); @@ -1640,7 +1661,7 @@ static int test_conc366(MYSQL *mysql) my= mysql_init(NULL); if (plugindir) mysql_options(my, MYSQL_PLUGIN_DIR, plugindir); - if (!mysql_real_connect(my, hostname, "ede", "foo", schema, port, socketname, 0)) + if (!my_test_connect(my, hostname, "ede", "foo", schema, port, socketname, 0)) { diag("Error: %s", mysql_error(my)); return FAIL; @@ -1697,7 +1718,7 @@ static int test_conc443(MYSQL *my __attribute__((unused))) mysql_options(mysql, MYSQL_INIT_COMMAND, "set @a:=3"); mysql_options(mysql, MYSQL_OPT_RECONNECT, &x); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) { diag("Connection failed. Error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -1740,7 +1761,7 @@ static int test_default_auth(MYSQL *my __attribute__((unused))) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_DEFAULT_AUTH, "mysql_clear_password"); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) { diag("Connection failed. Error: %s", mysql_error(mysql)); mysql_close(mysql); @@ -1751,7 +1772,7 @@ static int test_default_auth(MYSQL *my __attribute__((unused))) mysql= mysql_init(NULL); mysql_options(mysql, MYSQL_DEFAULT_AUTH, "caching_sha2_password"); - if (!mysql_real_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) + if (!my_test_connect(mysql, hostname, username, password, schema, port, socketname, CLIENT_REMEMBER_OPTIONS)) { diag("Connection failed. Error: %s", mysql_error(mysql)); mysql_close(mysql); diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index 09dd5ab0..d8e36370 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -38,6 +38,8 @@ static int test_bug28075(MYSQL *mysql) { int rc; + SKIP_SKYSQL; + rc= mysql_dump_debug_info(mysql); check_mysql_rc(rc, mysql); @@ -768,6 +770,8 @@ static int test_bug49694(MYSQL *mysql) int i; FILE *fp; + SKIP_SKYSQL; + rc= mysql_query(mysql, "DROP TABLE IF EXISTS enclist"); check_mysql_rc(rc, mysql); @@ -805,7 +809,10 @@ static int test_conc49(MYSQL *mysql) int rc; MYSQL_RES *res; int i; - FILE *fp= fopen("./sample.csv", "w"); + FILE *fp; + + SKIP_SKYSQL; + fp= fopen("./sample.csv", "w"); for (i=1; i < 4; i++) fprintf(fp, "\"%d\", \"%d\", \"%d\"\r\n", i, i, i); fclose(fp); @@ -1014,6 +1021,7 @@ void *remote_plugin; static int test_remote1(MYSQL *mysql) { int rc; + SKIP_SKYSQL; remote_plugin= (void *)mysql_client_find_plugin(mysql, "remote_io", MARIADB_CLIENT_REMOTEIO_PLUGIN); if (!remote_plugin) @@ -1069,6 +1077,7 @@ static int test_mdev12965(MYSQL *unused __attribute__((unused))) const char *env= getenv("MYSQL_TMP_DIR"); char cnf_file1[FN_REFLEN + 1]; + SKIP_SKYSQL; if (travis_test) return SKIP; @@ -1353,6 +1362,7 @@ static int test_conc395(MYSQL *unused __attribute__((unused))) const char *env= getenv("MYSQL_TMP_DIR"); char cnf_file1[FN_REFLEN + 1]; + SKIP_SKYSQL; if (travis_test) return SKIP; @@ -1391,6 +1401,8 @@ static int test_sslenforce(MYSQL *unused __attribute__((unused))) const char *env= getenv("MYSQL_TMP_DIR"); char cnf_file1[FN_REFLEN + 1]; + SKIP_SKYSQL; + if (travis_test) return SKIP; @@ -1400,10 +1412,6 @@ static int test_sslenforce(MYSQL *unused __attribute__((unused))) snprintf(cnf_file1, FN_REFLEN, "%s%c.my.cnf", env, FN_LIBCHAR); - if (travis_test) - return SKIP; - - FAIL_IF(!access(cnf_file1, R_OK), "access"); mysql= mysql_init(NULL); diff --git a/unittest/libmariadb/my_test.h b/unittest/libmariadb/my_test.h index 45bc64cd..e5768bd4 100644 --- a/unittest/libmariadb/my_test.h +++ b/unittest/libmariadb/my_test.h @@ -55,6 +55,14 @@ with this program; if not, write to the Free Software Foundation, Inc., # define TRUE 1 #endif +#define IS_SKYSQL(a) ((a) && strstr((a), "db.skysql.net")) +#define SKIP_SKYSQL \ +if (IS_SKYSQL(hostname)) \ +{ \ + diag("Not supported by SkySQL"); \ + return SKIP; \ +} + #define MAX_KEY MAX_INDEXES #define MAX_KEY_LENGTH_DECIMAL_WIDTH 4 /* strlen("4096") */ @@ -524,6 +532,8 @@ void get_envvars() { if (!hostname && (envvar= getenv("MYSQL_TEST_HOST"))) hostname= envvar; + + if (!username) { if ((envvar= getenv("MYSQL_TEST_USER"))) diff --git a/unittest/libmariadb/ps.c b/unittest/libmariadb/ps.c index d5ed10c1..af4365bf 100644 --- a/unittest/libmariadb/ps.c +++ b/unittest/libmariadb/ps.c @@ -3729,6 +3729,8 @@ static int test_nstmts(MYSQL *mysql) static uint i, total_stmts= 2000; MYSQL_BIND my_bind[1]; + SKIP_SKYSQL; + mysql_autocommit(mysql, TRUE); rc= mysql_query(mysql, "DROP TABLE IF EXISTS test_nstmts"); diff --git a/unittest/libmariadb/ps_bugs.c b/unittest/libmariadb/ps_bugs.c index 25fd9f52..89f62c74 100644 --- a/unittest/libmariadb/ps_bugs.c +++ b/unittest/libmariadb/ps_bugs.c @@ -2928,6 +2928,8 @@ static int test_bug6059(MYSQL *mysql) const char *stmt_text; int rc; + SKIP_SKYSQL; + stmt_text= "SELECT 'foo' INTO OUTFILE 'x.3'"; stmt= mysql_stmt_init(mysql);