diff --git a/.travis.yml b/.travis.yml index 6363fa80..bfc18500 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,48 +1,68 @@ -sudo: true +os: linux +dist: focal language: c -cache: - apt: true - ccache: true services: docker - addons: hosts: - mariadb.example.com -before_script: - # Disable services enabled by default - - sudo /etc/init.d/mysql stop +cache: + apt: true + ccache: true + directories: + - $HOME/docker before_install: - - chmod -R +x .travis/* - - chmod 777 .travis/build/ - - export PROJ_PATH=`pwd` - - export ENTRYPOINT=$PROJ_PATH/.travis/sql - - mkdir tmp - - .travis/gen-ssl.sh mariadb.example.com tmp - - export SSLCERT=$PROJ_PATH/tmp -matrix: + - git clone https://github.com/mariadb-corporation/connector-test-machine.git + # Load cached docker images + - if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi + +install: + - |- + if [ -z "$server_branch" ] ; then + case $TRAVIS_OS_NAME in + windows) + connector-test-machine/launch.bat -t "$srv" -v "$v" -d testc + ;; + linux) + source connector-test-machine/launch.sh -t "$srv" -v "$v" -d testc -l "$local" -n "$native" + ;; + esac + fi + + +env: local=0 + +jobs: + fast_finish: true allow_failures: - - env: SERVER_BRANCH=10.6 - - env: SERVER_BRANCH=10.6 TEST_OPTION=--ps-protocol - - env: SKYSQL_HA=true MAXSCALE_TEST_DISABLE=true + - env: srv=build v=10.6 + - env: srv=mariadb v=10.5 + os: windows + language: shell include: - - env: SKYSQL=true -# disable for now - env: DB=mysql:8.0 -# eoled - env: DB=mariadb:10.1 - - env: DB=mariadb:10.2 - - env: DB=mariadb:10.3 - - env: DB=mariadb:10.4 - - env: DB=mariadb:10.5 - - env: SKYSQL_HA=true MAXSCALE_TEST_DISABLE=true - - env: DB=mariadb:10.5 MAXSCALE_VERSION=2.5.3 MAXSCALE_TEST_DISABLE=true - - env: DB=build:10.6 - - env: SERVER_BRANCH=10.6 - - env: SERVER_BRANCH=10.6 TEST_OPTION=--ps-protocol - -script: - - if [[ "$DB" == build* ]] ; then .travis/build/build.sh; fi - - if [[ "$DB" == build* ]] ; then docker build -t build:10.6 --label build .travis/build/; fi - - if [ -z "$DB" ] && [ -z "$SKYSQL" ] && [ -z "$SKYSQL_HA" ] ; then .travis/server-replace-submodule.sh; fi - - if [ -n "$DB" ] || [ -n "$SKYSQL" ] || [ -n "$SKYSQL_HA" ]; then .travis/script.sh; fi + - env: srv=mariadb v=10.5 + os: windows + language: shell + - env: srv=mariadb v=10.2 local=1 + dist: bionic + - env: srv=mariadb v=10.3 local=1 + - env: srv=mariadb v=10.4 local=1 + - env: srv=mariadb v=10.5 local=1 + - env: srv=mariadb v=10.6 local=1 + - if: env(CONNECTOR_TEST_SECRET_KEY) + env: srv=mariadb-es v=10.5 + - if: env(CONNECTOR_TEST_SECRET_KEY) + env: srv=maxscale + - if: env(CONNECTOR_TEST_SECRET_KEY) + env: srv=build v=10.6 + - env: srv=mysql v=5.7 native=1 + - env: srv=mysql v=8.0 native=1 + - if: env(CONNECTOR_TEST_SECRET_KEY) + env: srv=skysql + - if: env(CONNECTOR_TEST_SECRET_KEY) + env: srv=skysql-ha + - env: server_branch=10.6 + - env: server_branch=10.6 TEST_OPTION=--ps-protocol +script: ./travis.sh diff --git a/.travis/build/Dockerfile b/.travis/build/Dockerfile deleted file mode 100644 index 73042544..00000000 --- a/.travis/build/Dockerfile +++ /dev/null @@ -1,102 +0,0 @@ -# vim:set ft=dockerfile: -FROM ubuntu:xenial - -# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added -RUN groupadd -r mysql && useradd -r -g mysql mysql - -# https://bugs.debian.org/830696 (apt uses gpgv by default in newer releases, rather than gpg) -RUN set -ex; \ - apt-get update; \ - if ! which gpg; then \ - apt-get install -y --no-install-recommends gnupg; \ - fi; \ -# Ubuntu includes "gnupg" (not "gnupg2", but still 2.x), but not dirmngr, and gnupg 2.x requires dirmngr -# so, if we're not running gnupg 1.x, explicitly install dirmngr too - if ! gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \ - apt-get install -y --no-install-recommends dirmngr; \ - fi; \ - rm -rf /var/lib/apt/lists/* - -# add gosu for easy step-down from root -ENV GOSU_VERSION 1.10 -RUN set -ex; \ - \ - fetchDeps=' \ - ca-certificates \ - wget \ - '; \ - apt-get update; \ - apt-get install -y --no-install-recommends $fetchDeps; \ - rm -rf /var/lib/apt/lists/*; \ - \ - dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \ - wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \ - wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \ - \ -# verify the signature - export GNUPGHOME="$(mktemp -d)"; \ - gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \ - gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \ - command -v gpgconf > /dev/null && gpgconf --kill all || :; \ - rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc; \ - \ - chmod +x /usr/local/bin/gosu; \ -# verify that the binary works - gosu nobody true; \ - \ - apt-get purge -y --auto-remove $fetchDeps - -RUN mkdir /docker-entrypoint-initdb.d - -# install "pwgen" for randomizing passwords -# install "apt-transport-https" for Percona's repo (switched to https-only) -RUN apt-get update && apt-get install -y --no-install-recommends \ - apt-transport-https ca-certificates \ - tzdata \ - pwgen \ - && rm -rf /var/lib/apt/lists/* - -RUN { \ - echo "mariadb-server-10.6" mysql-server/root_password password 'unused'; \ - echo "mariadb-server-10.6" mysql-server/root_password_again password 'unused'; \ - } | debconf-set-selections - -RUN apt-get update -y -RUN apt-get install -y software-properties-common wget -#RUN apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db -#RUN apt-key adv --recv-keys --keyserver ha.pool.sks-keyservers.net F1656F24C74CD1D8 -#RUN echo 'deb http://yum.mariadb.org/galera/repo/deb xenial main' > /etc/apt/sources.list.d/galera-test-repo.list -#RUN apt-get update -y - -RUN apt-get install -y curl libdbi-perl rsync socat libnuma1 libaio1 zlib1g-dev libreadline5 libjemalloc1 libsnappy1v5 libcrack2 - -#RUN apt-get install -y galera3 - -COPY *.deb /root/ -RUN chmod 777 /root/* - -RUN dpkg --install /root/mysql-common* -RUN dpkg --install /root/mariadb-common* -RUN dpkg -R --unpack /root/ -RUN apt-get install -f -y -RUN ls -lrt /etc/mysql -RUN ls -lrt /etc/mysql/mariadb.conf.d -RUN rm -rf /var/lib/apt/lists/* \ - && sed -ri 's/^user\s/#&/' /etc/mysql/my.cnf /etc/mysql/mariadb.conf.d/*.cnf \ - && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld \ - && chown -R mysql:mysql /var/lib/mysql /var/run/mysqld \ - && chmod 777 /var/run/mysqld \ - && find /etc/mysql/ -name '*.cnf' -print0 \ - | xargs -0 grep -lZE '^(bind-address|log)' \ - | xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/' \ - && echo '[mysqld]\nskip-host-cache\nskip-name-resolve' > /etc/mysql/mariadb.conf.d/docker.cnf - -VOLUME /var/lib/mysql - -COPY docker-entrypoint.sh /usr/local/bin/ -RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat -ENTRYPOINT ["docker-entrypoint.sh"] - -EXPOSE 3306 -CMD ["mysqld"] - diff --git a/.travis/build/build.sh b/.travis/build/build.sh deleted file mode 100644 index cd62d279..00000000 --- a/.travis/build/build.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -echo "**************************************************************************" -echo "* searching for last complete build" -echo "**************************************************************************" - -wget -q -o /dev/null index.html http://hasky.askmonty.org/archive/10.6/ -grep -o ">build-[0-9]*" index.html | grep -o "[0-9]*" | tac | while read -r line ; do - - curl -s --head http://hasky.askmonty.org/archive/10.6/build-$line/kvm-deb-xenial-amd64/md5sums.txt | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null - if [ $? = "0" ]; then - echo "**************************************************************************" - echo "* Processing $line" - echo "**************************************************************************" - wget -q -o /dev/null -O $line.html http://hasky.askmonty.org/archive/10.6/build-$line/kvm-deb-xenial-amd64/debs/binary/ - grep -o ">[^\"]*\.deb" $line.html | grep -o "[^>]*\.deb" | while read -r file ; do - if [[ "$file" =~ ^mariadb-plugin.* ]] ; - then - echo "skipped file: $file" - else - echo "download file: http://hasky.askmonty.org/archive/10.6/build-$line/kvm-deb-xenial-amd64/debs/binary/$file" - wget -q -o /dev/null -O .travis/build/$file http://hasky.askmonty.org/archive/10.6/build-$line/kvm-deb-xenial-amd64/debs/binary/$file - fi - done - - exit - else - echo "skip build $line" - fi -done - - - diff --git a/.travis/build/docker-entrypoint.sh b/.travis/build/docker-entrypoint.sh deleted file mode 100644 index 588f4788..00000000 --- a/.travis/build/docker-entrypoint.sh +++ /dev/null @@ -1,355 +0,0 @@ -#!/bin/bash -set -eo pipefail -shopt -s nullglob - -# logging functions -mysql_log() { - local type="$1"; shift - printf '%s [%s] [Entrypoint]: %s\n' "$(date --rfc-3339=seconds)" "$type" "$*" -} -mysql_note() { - mysql_log Note "$@" -} -mysql_warn() { - mysql_log Warn "$@" >&2 -} -mysql_error() { - mysql_log ERROR "$@" >&2 - exit 1 -} - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then - mysql_error "Both $var and $fileVar are set (but are exclusive)" - fi - local val="$def" - if [ "${!var:-}" ]; then - val="${!var}" - elif [ "${!fileVar:-}" ]; then - val="$(< "${!fileVar}")" - fi - export "$var"="$val" - unset "$fileVar" -} - -# check to see if this file is being run or sourced from another script -_is_sourced() { - # https://unix.stackexchange.com/a/215279 - [ "${#FUNCNAME[@]}" -ge 2 ] \ - && [ "${FUNCNAME[0]}" = '_is_sourced' ] \ - && [ "${FUNCNAME[1]}" = 'source' ] -} - -# usage: docker_process_init_files [file [file [...]]] -# ie: docker_process_init_files /always-initdb.d/* -# process initializer files, based on file extensions -docker_process_init_files() { - # mysql here for backwards compatibility "${mysql[@]}" - mysql=( docker_process_sql ) - - echo - local f - for f; do - case "$f" in - *.sh) - # https://github.com/docker-library/postgres/issues/450#issuecomment-393167936 - # https://github.com/docker-library/postgres/pull/452 - if [ -x "$f" ]; then - mysql_note "$0: running $f" - "$f" - else - mysql_note "$0: sourcing $f" - . "$f" - fi - ;; - *.sql) mysql_note "$0: running $f"; docker_process_sql < "$f"; echo ;; - *.sql.gz) mysql_note "$0: running $f"; gunzip -c "$f" | docker_process_sql; echo ;; - *.sql.xz) mysql_note "$0: running $f"; xzcat "$f" | docker_process_sql; echo ;; - *) mysql_warn "$0: ignoring $f" ;; - esac - echo - done -} - -mysql_check_config() { - local toRun=( "$@" --verbose --help --log-bin-index="$(mktemp -u)" ) errors - if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then - mysql_error $'mysqld failed while attempting to check config\n\tcommand was: '"${toRun[*]}"$'\n\t'"$errors" - fi -} - -# Fetch value from server config -# We use mysqld --verbose --help instead of my_print_defaults because the -# latter only show values present in config files, and not server defaults -mysql_get_config() { - local conf="$1"; shift - "$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null \ - | awk -v conf="$conf" '$1 == conf && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }' - # match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)" -} - -# Do a temporary startup of the MySQL server, for init purposes -docker_temp_server_start() { - "$@" --skip-networking --socket="${SOCKET}" & - mysql_note "Waiting for server startup" - local i - for i in {30..0}; do - # only use the root password if the database has already been initializaed - # so that it won't try to fill in a password file when it hasn't been set yet - extraArgs=() - if [ -z "$DATABASE_ALREADY_EXISTS" ]; then - extraArgs+=( '--dont-use-mysql-root-password' ) - fi - if docker_process_sql "${extraArgs[@]}" --database=mysql <<<'SELECT 1' &> /dev/null; then - break - fi - sleep 1 - done - if [ "$i" = 0 ]; then - mysql_error "Unable to start server." - fi -} - -# Stop the server. When using a local socket file mysqladmin will block until -# the shutdown is complete. -docker_temp_server_stop() { - if ! mysqladmin --defaults-extra-file=<( _mysql_passfile ) shutdown -uroot --socket="${SOCKET}"; then - mysql_error "Unable to shut down server." - fi -} - -# Verify that the minimally required password settings are set for new databases. -docker_verify_minimum_env() { - if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then - mysql_error $'Database is uninitialized and password option is not specified\n\tYou need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD' - fi -} - -# creates folders for the database -# also ensures permission for user mysql of run as root -docker_create_db_directories() { - local user; user="$(id -u)" - - # TODO other directories that are used by default? like /var/lib/mysql-files - # see https://github.com/docker-library/mysql/issues/562 - mkdir -p "$DATADIR" - - if [ "$user" = "0" ]; then - # this will cause less disk access than `chown -R` - find "$DATADIR" \! -user mysql -exec chown mysql '{}' + - fi -} - -# initializes the database directory -docker_init_database_dir() { - mysql_note "Initializing database files" - installArgs=( --datadir="$DATADIR" --rpm --auth-root-authentication-method=normal ) - if { mysql_install_db --help || :; } | grep -q -- '--skip-test-db'; then - # 10.3+ - installArgs+=( --skip-test-db ) - fi - # "Other options are passed to mysqld." (so we pass all "mysqld" arguments directly here) - mysql_install_db "${installArgs[@]}" "${@:2}" - mysql_note "Database files initialized" -} - -# Loads various settings that are used elsewhere in the script -# This should be called after mysql_check_config, but before any other functions -docker_setup_env() { - # Get config - declare -g DATADIR SOCKET - DATADIR="$(mysql_get_config 'datadir' "$@")" - SOCKET="$(mysql_get_config 'socket' "$@")" - - # Initialize values that might be stored in a file - file_env 'MYSQL_ROOT_HOST' '%' - file_env 'MYSQL_DATABASE' - file_env 'MYSQL_USER' - file_env 'MYSQL_PASSWORD' - file_env 'MYSQL_ROOT_PASSWORD' - - declare -g DATABASE_ALREADY_EXISTS - if [ -d "$DATADIR/mysql" ]; then - DATABASE_ALREADY_EXISTS='true' - fi -} - -# Execute sql script, passed via stdin -# usage: docker_process_sql [--dont-use-mysql-root-password] [mysql-cli-args] -# ie: docker_process_sql --database=mydb <<<'INSERT ...' -# ie: docker_process_sql --dont-use-mysql-root-password --database=mydb /dev/null - - docker_init_database_dir "$@" - - mysql_note "Starting temporary server" - docker_temp_server_start "$@" - mysql_note "Temporary server started." - - docker_setup_db - docker_process_init_files /docker-entrypoint-initdb.d/* - - mysql_note "Stopping temporary server" - docker_temp_server_stop - mysql_note "Temporary server stopped" - - echo - mysql_note "MySQL init process done. Ready for start up." - echo - fi - fi - exec "$@" -} - -# If we are sourced from elsewhere, don't perform any further actions -if ! _is_sourced; then - _main "$@" -fi \ No newline at end of file diff --git a/.travis/docker-compose.yml b/.travis/docker-compose.yml deleted file mode 100644 index 284ffb47..00000000 --- a/.travis/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -version: '2' -services: - db: - image: $DB - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --ssl-ca=/etc/sslcert/ca.crt --ssl-cert=/etc/sslcert/server.crt --ssl-key=/etc/sslcert/server.key --bind-address=0.0.0.0 - ports: - - 3305:3306 - volumes: - - $SSLCERT:/etc/sslcert - - $ENTRYPOINT:/docker-entrypoint-initdb.d - environment: - MYSQL_DATABASE: testc - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - MYSQL_INITDB_SKIP_TZINFO: 1 diff --git a/.travis/gen-ssl.sh b/.travis/gen-ssl.sh deleted file mode 100755 index 01c8fce0..00000000 --- a/.travis/gen-ssl.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/bash -set -e - -log () { - echo "$@" 1>&2 -} - -print_error () { - echo "$@" 1>&2 - exit 1 -} - -print_usage () { - print_error "Usage: gen-ssl-cert-key " -} - -gen_cert_subject () { - local fqdn="$1" - [[ "${fqdn}" != "" ]] || print_error "FQDN cannot be blank" - echo "/C=XX/ST=X/O=X/localityName=X/CN=${fqdn}/organizationalUnitName=X/emailAddress=X/" -} - -main () { - local fqdn="$1" - local sslDir="$2" - [[ "${fqdn}" != "" ]] || print_usage - [[ -d "${sslDir}" ]] || print_error "Directory does not exist: ${sslDir}" - - local caCertFile="${sslDir}/ca.crt" - local caKeyFile="${sslDir}/ca.key" - local certFile="${sslDir}/server.crt" - local keyFile="${sslDir}/server.key" - local csrFile="${sslDir}/csrFile.key" - local clientCertFile="${sslDir}/client.crt" - local clientKeyFile="${sslDir}/client.key" - local clientKeystoreFile="${sslDir}/client-keystore.p12" - local pcks12FullKeystoreFile="${sslDir}/fullclient-keystore.p12" - local clientReqFile="${sslDir}/clientReqFile.key" - - log "Generating CA key" - openssl genrsa -out "${caKeyFile}" 2048 - - log "Generating CA certificate" - openssl req \ - -sha1 \ - -new \ - -x509 \ - -nodes \ - -days 3650 \ - -subj "$(gen_cert_subject ca.example.com)" \ - -key "${caKeyFile}" \ - -out "${caCertFile}" - - log "Generating private key" - openssl genrsa -out "${keyFile}" 2048 - - log "Generating certificate signing request" - openssl req \ - -new \ - -batch \ - -sha1 \ - -subj "$(gen_cert_subject "$fqdn")" \ - -set_serial 01 \ - -key "${keyFile}" \ - -out "${csrFile}" \ - -nodes - - log "Generating X509 certificate" - openssl x509 \ - -req \ - -sha1 \ - -set_serial 01 \ - -CA "${caCertFile}" \ - -CAkey "${caKeyFile}" \ - -days 3650 \ - -in "${csrFile}" \ - -signkey "${keyFile}" \ - -out "${certFile}" - - log "Generating client certificate" - openssl req \ - -batch \ - -newkey rsa:2048 \ - -days 3600 \ - -subj "$(gen_cert_subject "$fqdn")" \ - -nodes \ - -keyout "${clientKeyFile}" \ - -out "${clientReqFile}" - - openssl x509 \ - -req \ - -in "${clientReqFile}" \ - -days 3600 \ - -CA "${caCertFile}" \ - -CAkey "${caKeyFile}" \ - -set_serial 01 \ - -out "${clientCertFile}" - - # Now generate a keystore with the client cert & key - log "Generating client keystore" - openssl pkcs12 \ - -export \ - -in "${clientCertFile}" \ - -inkey "${clientKeyFile}" \ - -out "${clientKeystoreFile}" \ - -name "mysqlAlias" \ - -passout pass:kspass - - # Now generate a full keystore with the client cert & key + trust certificates - log "Generating full client keystore" - openssl pkcs12 \ - -export \ - -in "${clientCertFile}" \ - -inkey "${clientKeyFile}" \ - -out "${pcks12FullKeystoreFile}" \ - -name "mysqlAlias" \ - -passout pass:kspass - - # Clean up CSR file: - rm "$csrFile" - rm "$clientReqFile" - - log "Generated key file and certificate in: ${sslDir}" - ls -l "${sslDir}" -} - -main "$@" - diff --git a/.travis/maxscale-compose.yml b/.travis/maxscale-compose.yml deleted file mode 100644 index b8d1c265..00000000 --- a/.travis/maxscale-compose.yml +++ /dev/null @@ -1,36 +0,0 @@ -version: '2.1' -services: - db: - image: $DB - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --ssl-ca=/etc/sslcert/ca.crt --ssl-cert=/etc/sslcert/server.crt --ssl-key=/etc/sslcert/server.key --bind-address=0.0.0.0 - ports: - - 3305:3306 - volumes: - - $SSLCERT:/etc/sslcert - - $ENTRYPOINT:/docker-entrypoint-initdb.d - environment: - MYSQL_DATABASE: testc - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - healthcheck: - test: ["CMD", "mysql", "--protocol=tcp", "-ubob", "-h127.0.0.1"] - timeout: 50s - retries: 10 - interval: 5s - - maxscale: - depends_on: - db: - condition: service_healthy - links: - - "db:database" - ports: - - 4006:4006 - - 4008:4008 - - 4009:4009 - volumes: - - $SSLCERT:/etc/sslcert - build: - context: . - dockerfile: maxscale/Dockerfile - args: - MAXSCALE_VERSION: $MAXSCALE_VERSION diff --git a/.travis/maxscale/Dockerfile b/.travis/maxscale/Dockerfile deleted file mode 100644 index 0a60b4e7..00000000 --- a/.travis/maxscale/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM centos:7 - -ARG MAXSCALE_VERSION -ENV MAXSCALE_VERSION ${MAXSCALE_VERSION:-2.5.3} - -COPY maxscale/mariadb.repo /etc/yum.repos.d/ - -RUN rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB \ - && yum -y install https://downloads.mariadb.com/MaxScale/${MAXSCALE_VERSION}/centos/7/x86_64/maxscale-${MAXSCALE_VERSION}-2.rhel.7.x86_64.rpm \ - && yum -y update - -RUN yum -y install maxscale-${MAXSCALE_VERSION} MariaDB-client \ - && yum clean all \ - && rm -rf /tmp/* - -COPY maxscale/docker-entrypoint.sh / -COPY maxscale/maxscale.cnf /etc/ -RUN chmod 777 /etc/maxscale.cnf -RUN chmod 777 /docker-entrypoint.sh - - -EXPOSE 4006 4007 4008 - -ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file diff --git a/.travis/maxscale/docker-entrypoint.sh b/.travis/maxscale/docker-entrypoint.sh deleted file mode 100644 index 1f2d02c9..00000000 --- a/.travis/maxscale/docker-entrypoint.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash - -set -e - -echo 'creating configuration done' - -sleep 15 - -################################################################################################# -# wait for db availability for 60s -################################################################################################# -mysql=( mysql --protocol=tcp -ubob -hdb --port=3306 ) -for i in {60..0}; do - if echo 'use test2' | "${mysql[@]}" &> /dev/null; then - break - fi - echo 'DB init process in progress...' - sleep 1 -done - -echo 'use test2' | "${mysql[@]}" -if [ "$i" = 0 ]; then - echo 'DB init process failed.' - exit 1 -fi - -echo 'maxscale launching ...' - -tail -n 500 /etc/maxscale.cnf - -/usr/bin/maxscale --user=root --nodaemon - -cd /var/log/maxscale -ls -lrt -tail -n 500 /var/log/maxscale/maxscale.log diff --git a/.travis/maxscale/mariadb.repo b/.travis/maxscale/mariadb.repo deleted file mode 100644 index 055f3b5c..00000000 --- a/.travis/maxscale/mariadb.repo +++ /dev/null @@ -1,7 +0,0 @@ -# MariaDB 10.2 CentOS repository list - created 2017-06-05 08:06 UTC -# http://downloads.mariadb.org/mariadb/repositories/ -[mariadb] -name = MariaDB -baseurl = http://yum.mariadb.org/10.2/centos7-amd64 -gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB -gpgcheck=1 \ No newline at end of file diff --git a/.travis/maxscale/maxscale.cnf b/.travis/maxscale/maxscale.cnf deleted file mode 100644 index 8a85c9e8..00000000 --- a/.travis/maxscale/maxscale.cnf +++ /dev/null @@ -1,121 +0,0 @@ -# MaxScale documentation: -# https://mariadb.com/kb/en/mariadb-maxscale-24/ - -# Global parameters -# -# Complete list of configuration options: -# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-configuration-guide/ - -[maxscale] -threads=auto - -# Server definitions -# -# Set the address of the server to the network -# address of a MariaDB server. -# - -[server2] -type=server -address=database -port=3306 -protocol=MariaDBBackend -ssl=true -ssl_ca_cert=/etc/sslcert/server.crt -ssl_cert=/etc/sslcert/client.crt -ssl_key=/etc/sslcert/client.key - - -[server1] -type=server -address=db -port=3306 -protocol=MariaDBBackend - - -# Monitor for the servers -# -# This will keep MaxScale aware of the state of the servers. -# MariaDB Monitor documentation: -# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-monitor/ - -[MariaDB-Monitor] -type=monitor -module=mariadbmon -servers=server1 -user=boby -password=hey -monitor_interval=2000 - -[MariaDB-Monitor2] -type=monitor -module=mariadbmon -servers=server2 -user=boby -password=hey -monitor_interval=2000 - -# Service definitions -# -# Service Definition for a read-only service and -# a read/write splitting service. -# - -# ReadConnRoute documentation: -# https://mariadb.com/kb/en/mariadb-maxscale-24-readconnroute/ - -[Read-Only-Service] -type=service -router=readconnroute -servers=server1 -user=boby -password=hey -router_options=slave - -# ReadWriteSplit documentation: -# https://mariadb.com/kb/en/mariadb-maxscale-24-readwritesplit/ - -[Read-Write-Service] -type=service -router=readwritesplit -servers=server1 -version_string=10.5.99-MariaDB-maxScale -user=boby -password=hey - -[Read-Write-Service2] -type=service -router=readwritesplit -version_string=10.5.99-MariaDB-maxScale -servers=server2 -user=boby -password=hey - -# Listener definitions for the services -# -# These listeners represent the ports the -# services will listen on. -# - -[Read-Only-Listener] -type=listener -service=Read-Only-Service -protocol=MariaDBClient -port=4008 - -[Read-Write-Listener] -type=listener -service=Read-Write-Service -protocol=MariaDBClient -port=4006 - - -[Read-Write-Listener2] -type=listener -service=Read-Write-Service2 -protocol=MariaDBClient -port=4009 -ssl=true -ssl_ca_cert=/etc/sslcert/ca.crt -ssl_cert=/etc/sslcert/server.crt -ssl_key=/etc/sslcert/server.key diff --git a/.travis/script.sh b/.travis/script.sh deleted file mode 100644 index 105d3136..00000000 --- a/.travis/script.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/bash - -set -x -set -e - -################################################################################################################### -# test different type of configuration -################################################################################################################### -export MYSQL_TEST_TRAVIS=1 - -if [ -n "$SKYSQL" ] || [ -n "$SKYSQL_HA" ]; then - if [ -n "$SKYSQL" ]; then - ################################################################################################################### - # test SKYSQL - ################################################################################################################### - if [ -z "$SKYSQL_HOST" ] ; then - echo "No SkySQL configuration found !" - exit 0 - fi - - export MYSQL_TEST_USER=$SKYSQL_USER - export MYSQL_TEST_HOST=$SKYSQL_HOST - export MYSQL_TEST_PASSWD=$SKYSQL_PASSWORD - export MYSQL_TEST_PORT=$SKYSQL_PORT - export MYSQL_TEST_DATABASE=testc - export MYSQL_TEST_TLS=1 - - else - - ################################################################################################################### - # test SKYSQL with replication - ################################################################################################################### - if [ -z "$SKYSQL_HA" ] ; then - echo "No SkySQL HA configuration found !" - exit 0 - fi - - export MYSQL_TEST_USER=$SKYSQL_HA_USER - export MYSQL_TEST_HOST=$SKYSQL_HA_HOST - export MYSQL_TEST_PASSWD=$SKYSQL_HA_PASSWORD - export MYSQL_TEST_PORT=$SKYSQL_HA_PORT - export MYSQL_TEST_DATABASE=testc - export MYSQL_TEST_TLS=1 - fi - -else - - export COMPOSE_FILE=.travis/docker-compose.yml - export MYSQL_TEST_HOST=mariadb.example.com - export MYSQL_TEST_DB=testc - export MYSQL_TEST_USER=bob - export MYSQL_TEST_PORT=3305 - - export MARIADB_PLUGIN_DIR=$PWD - - if [ -n "$MAXSCALE_VERSION" ] ; then - # maxscale ports: - # - non ssl: 4006 - # - ssl: 4009 - export MYSQL_TEST_PORT=4006 - export MYSQL_TEST_SSL_PORT=4009 - export COMPOSE_FILE=.travis/maxscale-compose.yml - docker-compose -f ${COMPOSE_FILE} build - fi - - mysql=( mysql --protocol=TCP -u${MYSQL_TEST_USER} -h${MYSQL_TEST_HOST} --port=${MYSQL_TEST_PORT} ${MYSQL_TEST_DB}) - - ################################################################################################################### - # launch docker server and maxscale - ################################################################################################################### - docker-compose -f ${COMPOSE_FILE} up -d - - ################################################################################################################### - # wait for docker initialisation - ################################################################################################################### - - for i in {30..0}; do - if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then - break - fi - echo 'data server still not active' - sleep 2 - done - - if [ "$i" = 0 ]; then - if echo 'SELECT 1' | "${mysql[@]}" ; then - break - fi - - docker-compose -f ${COMPOSE_FILE} logs - if [ -n "$MAXSCALE_VERSION" ] ; then - docker-compose -f ${COMPOSE_FILE} exec maxscale tail -n 500 /var/log/maxscale/maxscale.log - fi - echo >&2 'data server init process failed.' - exit 1 - fi - - #list ssl certificates - ls -lrt ${SSLCERT} - -fi - -#build C connector -cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=OPENSSL -DCERT_PATH=${SSLCERT} -make - -## list ciphers -openssl ciphers -v - -################################################################################################################### -# run test suite -################################################################################################################### -echo "Running tests" - -cd unittest/libmariadb - -ctest -V - diff --git a/.travis/server-replace-submodule.sh b/.travis/server-replace-submodule.sh deleted file mode 100644 index 6ce53baf..00000000 --- a/.travis/server-replace-submodule.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# get latest server -git clone -b ${SERVER_BRANCH} https://github.com/mariadb/server ../workdir-server - -cd ../workdir-server -# don't pull in submodules. We want the latest C/C as libmariadb -# build latest server with latest C/C as libmariadb -# skip to build some storage engines to speed up the build -cmake -DPLUGIN_MROONGA=NO -DPLUGIN_ROCKSDB=NO -DPLUGIN_SPIDER=NO -DPLUGIN_TOKUDB=NO -cd libmariadb -git checkout ${TRAVIS_COMMIT} -cd .. -git add libmariadb -make -j9 - -cd mysql-test/ -./mysql-test-run.pl --suite=main ${TEST_OPTION} --parallel=auto --skip-test=session_tracker_last_gtid diff --git a/.travis/sql/dbinit.sql b/.travis/sql/dbinit.sql deleted file mode 100644 index eb1ad6d1..00000000 --- a/.travis/sql/dbinit.sql +++ /dev/null @@ -1,13 +0,0 @@ -CREATE USER 'bob'@'localhost'; -GRANT ALL ON *.* TO 'bob'@'localhost' with grant option; - -CREATE USER 'bob'@'%'; -GRANT ALL ON *.* TO 'bob'@'%' with grant option; - -CREATE USER 'boby'@'%' identified by 'hey'; -GRANT ALL ON *.* TO 'boby'@'%' identified by 'hey' with grant option; - -CREATE USER 'boby'@'localhost' identified by 'hey'; -GRANT ALL ON *.* TO 'boby'@'localhost' identified by 'hey' with grant option; - -CREATE DATABASE test2; \ No newline at end of file diff --git a/appveyor-download.bat b/appveyor-download.bat new file mode 100644 index 00000000..5cc2dbbb --- /dev/null +++ b/appveyor-download.bat @@ -0,0 +1,16 @@ +@echo off +set archive=http://ftp.hosteurope.de/mirror/archive.mariadb.org//mariadb-%DB%/winx64-packages/mariadb-%DB%-winx64.msi +set last=http://mirror.i3d.net/pub/mariadb//mariadb-%DB%/winx64-packages/mariadb-%DB%-winx64.msi + +curl -fLsS -o server.msi %archive% + +if %ERRORLEVEL% == 0 goto end + +curl -fLsS -o server.msi %last% +if %ERRORLEVEL% == 0 goto end + +echo Failure Reason Given is %errorlevel% +exit /b %errorlevel% + +:end +echo "File found". diff --git a/appveyor.yml b/appveyor.yml index 9363286c..5486a7ed 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,16 +4,16 @@ branches: - 3.1 environment: matrix: - - DB: '10.2.37' + - DB: '10.2.38' APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 CMAKE_PARAM: 'Visual Studio 15 2017 Win64' - - DB: '10.3.28' + - DB: '10.3.29' APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 CMAKE_PARAM: 'Visual Studio 15 2017 Win64' - - DB: '10.4.18' + - DB: '10.4.19' APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 CMAKE_PARAM: 'Visual Studio 15 2017 Win64' - - DB: '10.5.9' + - DB: '10.5.10' APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 CMAKE_PARAM: 'Visual Studio 15 2017 Win64' @@ -21,15 +21,14 @@ environment: configuration: RelWithDebInfo clone_folder: c:\projects\mariadb-connector-c before_build: + - cmd: appveyor-download.bat + - cmd: msiexec /i server.msi INSTALLDIR=c:\projects\server SERVICENAME=mariadb ALLOWREMOTEROOTACCESS=true /qn + - cmd: "\"c:\\projects\\server\\bin\\mysql.exe\" -e \"create database testc\" --user=root" - cmd: set MYSQL_TEST_USER=root - cmd: set MYSQL_TEST_HOST=127.0.0.1 - cmd: set MYSQL_TEST_PASSWD= - cmd: set MYSQL_TEST_PORT=3306 - cmd: set MYSQL_TEST_DB=testc - - cmd: set archive=http://mariadb.mirrors.ovh.net/MariaDB/mariadb-%DB%/winx64-packages/mariadb-%DB%-winx64.msi - - cmd: curl -fsS -o server.msi %archive% - - cmd: msiexec /i server.msi INSTALLDIR=c:\projects\server SERVICENAME=mariadb ALLOWREMOTEROOTACCESS=true /qn - - cmd: "\"c:\\projects\\server\\bin\\mysql.exe\" -e \"create database testc\" --user=root" - cmd: cmake -G "%CMAKE_PARAM%" -DCMAKE_BUILD_TYPE=RelWithDebInfo build: project: mariadb-connector-c.sln diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 6dabd69c..00000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,233 +0,0 @@ -resources: - containers: - - - container: ubuntu-1804 - image: ubuntu:18.04 - options: "--name ubuntu-1804 --add-host=mariadb.example.com:127.0.0.1 -v /usr/bin/docker:/tmp/docker:ro" - -jobs: - - - job: SSLFiles - displayName: 'Creating SSL Files' - pool: - vmImage: 'ubuntu-16.04' - container: $[ variables['containerImage'] ] - steps: - - script: | - java --version - mkdir tmp - chmod 777 .travis/gen-ssl.sh - .travis/gen-ssl.sh mariadb.example.com tmp - cp -R tmp $BUILD_ARTIFACTSTAGINGDIRECTORY - displayName: 'create SSL certificates' - - - task: PublishPipelineArtifact@0 - inputs: - targetPath: '$(Build.ArtifactStagingDirectory)' - artifactName: ssl_certs - - - job: windowsTest - displayName: 'test windows' - pool: - vmImage: 'windows-2019' - dependsOn: - - SSLFiles - steps: - - task: DownloadPipelineArtifact@2 - displayName: 'Download SSL files' - inputs: - artifactName: ssl_certs - targetPath: $(System.DefaultWorkingDirectory) - - - task: DownloadPipelineArtifact@2 - displayName: 'Download 10.4 server' - inputs: - source: 'specific' - project: '550599d3-6165-4abd-8c86-e3f7e53a1847' - artifact: 'Windows' - pipeline: 3 - runVersion: 'latestFromBranch' - runBranch: 'refs/heads/10.4-enterprise' - downloadPath: $(System.DefaultWorkingDirectory) - - - script: | - for /f %%a in ('dir /B $(System.DefaultWorkingDirectory)\win_build\mariadb-enterprise-10.*-winx64.msi') do set servername=$(System.DefaultWorkingDirectory)\win_build\%%a - echo %servername% - msiexec /i %servername% INSTALLDIR=c:\projects\server SERVICENAME=mariadb ALLOWREMOTEROOTACCESS=true /qn - c:\projects\server\bin\mysql.exe -e "create database testc" --user=root - c:\projects\server\bin\mysql.exe -e "GRANT ALL on *.* to 'someUser'@'%' identified by 'Passw@rd2' with grant option;" --user=root - displayName: 'install server' - - - script: | - echo 127.0.0.1 mariadb.example.com >> %WINDIR%\System32\Drivers\Etc\Hosts - displayName: 'set hostname' - - - script: | - cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=RelWithDebInfo - cmake --build . --config RelWithDebInfo - displayName: 'build connector' - - - script: | - cd $(System.DefaultWorkingDirectory)\unittest\libmariadb - set MARIADB_PLUGIN_DIR=$(System.DefaultWorkingDirectory)\plugins\lib\RelWithDebInfo - ctest -V - if %ERRORLEVEL% EQU 0 ( - echo Success - ) else ( - echo exit code is %errorlevel% - exit /b %errorlevel% - ) - displayName: 'run tests' - env: - MYSQL_TEST_HOST: "mariadb.example.com" - MYSQL_TEST_USER: 'someUser' - MYSQL_TEST_PASSWD: 'Passw@rd2' - MYSQL_TEST_DB: 'testc' - MYSQL_TEST_PORT: 3306 - TEST_SSL_CA_FILE: "$(System.DefaultWorkingDirectory)/tmp/server.crt" - TEST_SSL_CLIENT_KEY_FILE: "$(System.DefaultWorkingDirectory)/tmp/client.key" - TEST_SSL_CLIENT_CERT_FILE: "$(System.DefaultWorkingDirectory)/tmp/client.crt" - TEST_SSL_CLIENT_KEYSTORE_FILE: "$(System.DefaultWorkingDirectory)/tmp/client-keystore.p12" - - - job: RunInContainer - pool: - vmImage: 'ubuntu-16.04' - displayName: 'test ubuntu bionic' - dependsOn: - - SSLFiles - strategy: - matrix: - ubuntu-1804: - containerImage: ubuntu-1804 - containerName: bionic - - container: $[variables['containerImage']] - - steps: - - - task: DownloadPipelineArtifact@2 - inputs: - artifactName: ssl_certs - targetPath: $(System.DefaultWorkingDirectory) - - - script: /tmp/docker exec -t -u 0 $(containerImage) sh -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" -y install sudo" - displayName: Set up sudo - - - task: DownloadPipelineArtifact@2 - displayName: 'Download 10.4 enterprise server artifact files' - inputs: - source: 'specific' - project: '550599d3-6165-4abd-8c86-e3f7e53a1847' - artifact: '$(containerImage)' - pipeline: 3 - runVersion: 'latestFromBranch' - runBranch: 'refs/heads/10.4-enterprise' - downloadPath: $(System.DefaultWorkingDirectory) - - - task: DownloadPipelineArtifact@2 - displayName: 'Download galera server artifact files' - inputs: - source: 'specific' - project: '550599d3-6165-4abd-8c86-e3f7e53a1847' - artifact: $(containerImage) - runVersion: 'latestFromBranch' - pipeline: 2 - runBranch: 'refs/heads/es-mariadb-4.x' - downloadPath: $(System.DefaultWorkingDirectory) - - - - script: | - tar xf mariadb-enterprise* - - sudo ln -fs /usr/share/zoneinfo/UTC /etc/localtime - - sudo apt-get update && sudo apt-get install -y --no-install-recommends apt-transport-https ca-certificates tzdata pwgen - export DEBIAN_FRONTEND="noninteractive" - sudo debconf-set-selections <<< "mariadb-server-10.4 mysql-server/root_password password P4ssw@rd" - sudo debconf-set-selections <<< "mariadb-server-10.4 mysql-server/root_password_again password P4ssw@rd" - sudo apt-get update -y - sudo apt-get install --allow-unauthenticated -f -y libssl-dev libaio1 libaio-dev libxml2 libcurl4 curl libc-dev linux-libc-dev libc-dev-bin libdbi-perl rsync socat libnuma1 zlib1g-dev libreadline5 libjemalloc1 libsnappy1v5 libcrack2 gawk lsof psmisc perl libreadline5 - - cd mariadb-enterprise*/ - sudo groupadd mysql - sudo useradd -g mysql mysql - - export PROJ_PATH=`pwd` - echo $PROJ_PATH - - cat <> my.cnf - [mysqld] - port=3306 - max_allowed_packet=16M - datadir=$PROJ_PATH/data - socket=/tmp/mysql.sock - user=mysql - ssl-ca=$(System.DefaultWorkingDirectory)/tmp/ca.crt - ssl-cert=$(System.DefaultWorkingDirectory)/tmp/server.crt - ssl-key=$(System.DefaultWorkingDirectory)/tmp/server.key - EOT - - sudo chown mysql $PROJ_PATH/my.cnf - sudo tail -n 5000 $PROJ_PATH/my.cnf - - sudo chmod 777 $PROJ_PATH - sudo ln -s $PROJ_PATH /usr/local/mysql - - sudo ./scripts/mysql_install_db --defaults-file=$PROJ_PATH/my.cnf --user=mysql - sudo chown -R root . - sudo chown -R mysql data - - export PATH=$PATH:$PROJ_PATH/bin/ - - env: - WORKING_DIR: $(System.DefaultWorkingDirectory) - displayName: 'install server' - - - script: | - sudo apt-get install -f -y make cmake - cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_SSL=OPENSSL -DCERT_PATH=$(System.DefaultWorkingDirectory)/tmp - make - displayName: 'Build' - - - script: | - cd mariadb-enterprise*/ - sudo ./bin/mysqld --defaults-file=./my.cnf & - - for i in {30..0}; do - if sudo ./bin/mysql -e "SELECT 1" &> /dev/null; then - echo 'MySQL connected...' - break - fi - echo 'MySQL init process in progress...' - sleep 1 - done - if [ "$i" = 0 ]; then - echo >&2 'MySQL init process failed.' - sudo ./bin/mysql -e "SELECT 1" - exit 1 - fi - - sudo ./bin/mysql -e "CREATE USER 'someUser'@'%' identified by 'Passw@rd2';" - sudo ./bin/mysql -e "GRANT ALL on *.* to 'someUser'@'%' identified by 'Passw@rd2' with grant option;" - sudo ./bin/mysql -e "CREATE DATABASE testc;" - - echo "Running tests" - cd ../unittest/libmariadb - ctest -V - if [ $? -ne 0 ]; then - exit 1 - fi - cd $(System.DefaultWorkingDirectory)/mariadb-enterprise*/ - sudo ./bin/mysqladmin shutdown - env: - MYSQL_TEST_HOST: mariadb.example.com - MYSQL_TEST_DB: testc - MYSQL_TEST_USER: 'someUser' - MYSQL_TEST_PORT: 3306 - MYSQL_TEST_TRAVIS: 1 - MYSQL_TEST_PASSWD: 'Passw@rd2' - TEST_SSL_CA_FILE: "$(System.DefaultWorkingDirectory)/tmp/server.crt" - TEST_SSL_CLIENT_KEY_FILE: "$(System.DefaultWorkingDirectory)/tmp/client.key" - TEST_SSL_CLIENT_CERT_FILE: "$(System.DefaultWorkingDirectory)/tmp/client.crt" - TEST_SSL_CLIENT_KEYSTORE_FILE: "$(System.DefaultWorkingDirectory)/tmp/client-keystore.p12" - displayName: 'run tests' \ No newline at end of file diff --git a/travis.sh b/travis.sh new file mode 100755 index 00000000..dbd95da3 --- /dev/null +++ b/travis.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +set -e + +if [ -n "$server_branch" ] ; then + + ################################################################################################################### + # run server test suite + ################################################################################################################### + echo "run server test suite" + + # change travis localhost to use only 127.0.0.1 + sudo sed -i 's/127\.0\.1\.1 localhost/127.0.0.1 localhost/' /etc/hosts + sudo tail /etc/hosts + + # get latest server + git clone -b ${server_branch} https://github.com/mariadb/server ../workdir-server + + cd ../workdir-server + # don't pull in submodules. We want the latest C/C as libmariadb + # build latest server with latest C/C as libmariadb + # skip to build some storage engines to speed up the build + cmake -DPLUGIN_MROONGA=NO -DPLUGIN_ROCKSDB=NO -DPLUGIN_SPIDER=NO -DPLUGIN_TOKUDB=NO + cd libmariadb + echo "PR:${TRAVIS_PULL_REQUEST} TRAVIS_COMMIT:${TRAVIS_COMMIT}" + if [ -n "$TRAVIS_PULL_REQUEST" ] && [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then + # fetching pull request + echo "fetching PR" + git fetch origin pull/${TRAVIS_PULL_REQUEST}/head:PR_${TRAVIS_PULL_REQUEST} + echo "checkout PR" + git checkout PR_${TRAVIS_PULL_REQUEST} + else + echo "checkout commit" + git checkout ${TRAVIS_COMMIT} + fi + + cd .. + git add libmariadb + make -j9 + + cd mysql-test/ + ./mysql-test-run.pl --suite=main ${TEST_OPTION} --parallel=auto --skip-test=session_tracker_last_gtid + +else + + ################################################################################################################### + # run connector test suite + ################################################################################################################### + echo "run connector test suite" + + cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCERT_PATH=${SSLCERT} + + if [ "$TRAVIS_OS_NAME" = "windows" ] ; then + echo "build from windows" + set MYSQL_TEST_DB=testc + set MYSQL_TEST_TLS=%TEST_REQUIRE_TLS% + set MYSQL_TEST_USER=%TEST_DB_USER% + set MYSQL_TEST_HOST=%TEST_DB_HOST% + set MYSQL_TEST_PASSWD=%TEST_DB_PASSWORD% + set MYSQL_TEST_PORT=%TEST_DB_PORT% + set MYSQL_TEST_TLS=%TEST_REQUIRE_TLS% + cmake --build . --config RelWithDebInfo + else + echo "build from linux" + export MYSQL_TEST_USER=$TEST_DB_USER + export MYSQL_TEST_HOST=$TEST_DB_HOST + export MYSQL_TEST_PASSWD=$TEST_DB_PASSWORD + export MYSQL_TEST_PORT=$TEST_DB_PORT + export MYSQL_TEST_DB=testc + export MYSQL_TEST_TLS=$TEST_REQUIRE_TLS + export SSLCERT=$TEST_DB_SERVER_CERT + export MARIADB_PLUGIN_DIR=$PWD + + echo "MYSQL_TEST_PLUGINDIR=$MYSQL_TEST_PLUGINDIR" + if [ -n "$MYSQL_TEST_SSL_PORT" ] ; then + export MYSQL_TEST_SSL_PORT=$MYSQL_TEST_SSL_PORT + fi + export MYSQL_TEST_TLS=$TEST_REQUIRE_TLS + export SSLCERT=$TEST_DB_SERVER_CERT + if [ -n "$MYSQL_TEST_SSL_PORT" ] ; then + export MYSQL_TEST_SSL_PORT=$MYSQL_TEST_SSL_PORT + fi + make + fi + + ls -lrt + + openssl ciphers -v + cd unittest/libmariadb + ctest -V +fi diff --git a/unittest/libmariadb/charset.c b/unittest/libmariadb/charset.c index 5f84b1d3..ef08e130 100644 --- a/unittest/libmariadb/charset.c +++ b/unittest/libmariadb/charset.c @@ -652,8 +652,12 @@ static int test_bug_54100(MYSQL *mysql) while ((row= mysql_fetch_row(result))) { /* ignore ucs2 */ - if (strcmp(row[0], "ucs2") && strcmp(row[0], "utf16le") && strcmp(row[0], "utf8mb4") && - strcmp(row[0], "utf16") && strcmp(row[0], "utf32")) { + if (strcmp(row[0], "ucs2") + && strcmp(row[0], "utf16le") + && (strcmp(row[0], "utf8mb4") && mariadb_connection(mysql) && mysql_get_server_version(mysql) < 100600) + && (strcmp(row[0], "utf8") && mariadb_connection(mysql) && mysql_get_server_version(mysql) >= 100600) + && strcmp(row[0], "utf16") + && strcmp(row[0], "utf32")) { rc= mysql_set_character_set(mysql, row[0]); check_mysql_rc(rc, mysql); } @@ -782,6 +786,7 @@ static int charset_auto(MYSQL *my __attribute__((unused))) /* check if all server character sets are supported */ static int test_conc223(MYSQL *mysql) { + SKIP_MYSQL(mysql); int rc; MYSQL_RES *res; MYSQL_ROW row; diff --git a/unittest/libmariadb/connection.c b/unittest/libmariadb/connection.c index 62c7aad7..d135f159 100644 --- a/unittest/libmariadb/connection.c +++ b/unittest/libmariadb/connection.c @@ -1633,6 +1633,9 @@ static int test_conc351(MYSQL *unused __attribute__((unused))) diag("Server doesn't support session tracking (cap=%lu)", mysql->server_capabilities); return SKIP; } + rc= mysql_query(mysql, "USE mysql"); + check_mysql_rc(rc, mysql); + FAIL_IF(strcmp(mysql->db, "mysql"), "Expected new schema 'mysql'"); FAIL_IF(mysql_session_track_get_first(mysql, SESSION_TRACK_SCHEMA, &data, &len), "expected session track schema"); @@ -1712,8 +1715,11 @@ static int test_conc366(MYSQL *mysql) return SKIP; } - - sprintf(query, "CREATE OR REPLACE USER 'ede'@'%s' IDENTIFIED VIA ed25519 USING 'vubFBzIrapbfHct1/J72dnUryz5VS7lA6XHH8sIx4TI'", this_host); + if (mysql_get_server_version(mysql) < 100400) { + sprintf(query, "CREATE OR REPLACE USER 'ede'@'%s' IDENTIFIED VIA ed25519 USING '6aW9C7ENlasUfymtfMvMZZtnkCVlcb1ssxOLJ0kj/AA'", this_host); + } else { + sprintf(query, "CREATE OR REPLACE USER 'ede'@'%s' IDENTIFIED VIA ed25519 USING PASSWORD('MySup8%rPassw@ord')", this_host); + } rc= mysql_query(mysql, query); check_mysql_rc(rc, mysql); @@ -1724,7 +1730,7 @@ static int test_conc366(MYSQL *mysql) my= mysql_init(NULL); if (plugindir) mysql_options(my, MYSQL_PLUGIN_DIR, plugindir); - if (!my_test_connect(my, hostname, "ede", "foo", schema, port, socketname, 0)) + if (!my_test_connect(my, hostname, "ede", "MySup8%rPassw@ord", schema, port, socketname, 0)) { diag("Error: %s", mysql_error(my)); return FAIL; @@ -1743,6 +1749,7 @@ static int test_conc366(MYSQL *mysql) static int test_conc392(MYSQL *mysql) { + SKIP_MYSQL(mysql); int rc; const char *data; size_t len; diff --git a/unittest/libmariadb/cursor.c b/unittest/libmariadb/cursor.c index 6eb2fcdc..fd976c08 100644 --- a/unittest/libmariadb/cursor.c +++ b/unittest/libmariadb/cursor.c @@ -283,6 +283,7 @@ static int test_cursors_with_union(MYSQL *mysql) static int test_cursors_with_procedure(MYSQL *mysql) { + SKIP_MYSQL(mysql); const char *queries[]= { "SELECT * FROM t1 procedure analyse()" @@ -1493,19 +1494,16 @@ static int test_bug38486(MYSQL *mysql) int rc; unsigned long type= CURSOR_TYPE_READ_ONLY; - stmt= mysql_stmt_init(mysql); - rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type); - check_stmt_rc(rc, stmt); - stmt_text= "CREATE TABLE t1 (a INT)"; - rc= mysql_stmt_prepare(stmt, SL(stmt_text)); - check_stmt_rc(rc, stmt); - rc= mysql_stmt_execute(stmt); - mysql_stmt_close(stmt); + rc= mysql_query(mysql, "DROP TABLE IF EXISTS t10"); + check_mysql_rc(rc, mysql); + + rc= mysql_query(mysql, "CREATE TABLE t10 (a INT)"); + check_mysql_rc(rc, mysql); stmt= mysql_stmt_init(mysql); rc= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)&type); check_stmt_rc(rc, stmt); - stmt_text= "INSERT INTO t1 VALUES (1)"; + stmt_text= "INSERT INTO t10 VALUES (1)"; rc= mysql_stmt_prepare(stmt, SL(stmt_text)); check_stmt_rc(rc, stmt); rc= mysql_stmt_execute(stmt); diff --git a/unittest/libmariadb/features-10_2.c b/unittest/libmariadb/features-10_2.c index c1228d8e..e09db5aa 100644 --- a/unittest/libmariadb/features-10_2.c +++ b/unittest/libmariadb/features-10_2.c @@ -28,6 +28,9 @@ static int execute_direct(MYSQL *mysql) rc= mariadb_stmt_execute_direct(stmt, "CREATE TABLE t1 (a int)", -1); check_stmt_rc(rc, stmt); + rc= mysql_query(mysql, "FLUSH TABLES"); + check_mysql_rc(rc, mysql); + memset(&bind, 0, sizeof(MYSQL_BIND)); bind.buffer= &i; @@ -43,6 +46,9 @@ static int execute_direct(MYSQL *mysql) rc= mariadb_stmt_execute_direct(stmt, "INSERT INTO t1 VALUES (?)", -1); check_stmt_rc(rc, stmt); + rc= mysql_query(mysql, "START TRANSACTION"); + check_mysql_rc(rc, mysql); + for (i=1; i < 1000; i++) { rc= mysql_stmt_execute(stmt); @@ -58,6 +64,8 @@ static int execute_direct(MYSQL *mysql) FAIL_IF(mysql_num_rows(res) != 1000, "Expected 1000 rows"); mysql_free_result(res); + rc= mysql_query(mysql, "COMMIT"); + check_mysql_rc(rc, mysql); rc= mysql_query(mysql, "DROP TABLE t1"); check_mysql_rc(rc, mysql); diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index 1749bdb0..cde3dcce 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -475,6 +475,9 @@ static int test_wl4166_2(MYSQL *mysql) "alter table t1 change column c_int c_int varchar(11)"); check_mysql_rc(rc, mysql); + rc= mysql_query(mysql, "FLUSH TABLES"); + check_mysql_rc(rc, mysql); + rc= mysql_stmt_execute(stmt); check_stmt_rc(rc, stmt); @@ -509,6 +512,9 @@ static int test_wl4166_2(MYSQL *mysql) rc= mysql_query(mysql, "alter table t1 add column d_int int"); check_mysql_rc(rc, mysql); + rc= mysql_query(mysql, "FLUSH TABLES"); + check_mysql_rc(rc, mysql); + rc= mysql_stmt_execute(stmt); FAIL_IF(!rc, "Error expected"); @@ -769,11 +775,26 @@ static int test_wl4284_1(MYSQL *mysql) static int test_bug49694(MYSQL *mysql) { int rc; + MYSQL_RES *res; + MYSQL_ROW row; int i; FILE *fp; + diag("Load local infile server : %ld", (mysql->server_capabilities & CLIENT_LOCAL_FILES)); + diag("Load local infile client : %ld", (mysql->client_flag & CLIENT_LOCAL_FILES)); + + SKIP_LOAD_INFILE_DISABLE; SKIP_SKYSQL; + rc= mysql_query(mysql, "select @@LOCAL_INFILE"); + check_mysql_rc(rc, mysql); + res= mysql_store_result(mysql); + row= mysql_fetch_row(res); + if (atol(row[0]) == 0) { + diag("Load local infile disable"); + return SKIP; + } + rc= mysql_query(mysql, "DROP TABLE IF EXISTS enclist"); check_mysql_rc(rc, mysql); @@ -803,6 +824,7 @@ static int test_bug49694(MYSQL *mysql) rc= mysql_query(mysql, "DROP TABLE enclist"); check_mysql_rc(rc, mysql); + mysql_free_result(res); return OK; } @@ -810,12 +832,23 @@ static int test_conc49(MYSQL *mysql) { int rc; MYSQL_RES *res; + MYSQL_ROW row; + int i; FILE *fp; SKIP_LOAD_INFILE_DISABLE; SKIP_SKYSQL; + rc= mysql_query(mysql, "select @@LOCAL_INFILE"); + check_mysql_rc(rc, mysql); + res= mysql_store_result(mysql); + row= mysql_fetch_row(res); + if (atol(row[0]) == 0) { + diag("Load local infile disable"); + return SKIP; + } + fp= fopen("./sample.csv", "w"); for (i=1; i < 4; i++) fprintf(fp, "\"%d\", \"%d\", \"%d\"\r\n", i, i, i); @@ -848,6 +881,9 @@ static int test_ldi_path(MYSQL *mysql) rc= mysql_query(mysql, "CREATE TABLE t1 (a int)"); check_mysql_rc(rc, mysql); + rc= mysql_query(mysql, "FLUSH TABLES"); + check_mysql_rc(rc, mysql); + #ifdef _WIN32 rc= mysql_query(mysql, "LOAD DATA LOCAL INFILE 'X:/non_existing_path/data.csv' INTO TABLE t1 " "FIELDS TERMINATED BY '.' LINES TERMINATED BY '\r\n'"); @@ -1028,6 +1064,8 @@ static int test_remote1(MYSQL *mysql) { int rc; SKIP_SKYSQL; + MYSQL_RES *res; + MYSQL_ROW row; remote_plugin= (void *)mysql_client_find_plugin(mysql, "remote_io", MARIADB_CLIENT_REMOTEIO_PLUGIN); if (!remote_plugin) @@ -1037,6 +1075,18 @@ static int test_remote1(MYSQL *mysql) return SKIP; } + SKIP_LOAD_INFILE_DISABLE; + + rc= mysql_query(mysql, "select @@LOCAL_INFILE"); + check_mysql_rc(rc, mysql); + res= mysql_store_result(mysql); + row= mysql_fetch_row(res); + if (atol(row[0]) == 0) { + diag("Load local infile disable"); + return SKIP; + } + mysql_free_result(res); + rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1"); check_mysql_rc(rc, mysql); diff --git a/unittest/libmariadb/my_test.h b/unittest/libmariadb/my_test.h index 27cd2b4f..63df38d5 100644 --- a/unittest/libmariadb/my_test.h +++ b/unittest/libmariadb/my_test.h @@ -73,7 +73,7 @@ if (IS_SKYSQL(hostname)) \ #define SKIP_NOTLS #endif -#define IS_MAXSCALE() (getenv("MAXSCALE_TEST_DISABLE")!=NULL) +#define IS_MAXSCALE() (getenv("srv")!=NULL && (strcmp(getenv("srv"), "maxscale") == 0 || strcmp(getenv("srv"), "skysql-ha") == 0)) #define SKIP_MAXSCALE \ if (IS_MAXSCALE()) \ { \ @@ -496,6 +496,8 @@ MYSQL *test_connect(struct my_tests_st *test) } mysql_options(mysql, MYSQL_REPORT_DATA_TRUNCATION, &truncation_report); mysql_options(mysql, MYSQL_OPT_CONNECT_TIMEOUT, &timeout); + if (plugindir) + mysql_options(mysql, MYSQL_PLUGIN_DIR, plugindir); /* option handling */ if (test && test->options) { @@ -554,7 +556,7 @@ static int reset_connection(MYSQL *mysql) { void get_envvars() { char *envvar; - if (getenv("MYSQL_TEST_TRAVIS")) + if (getenv("TRAVIS_JOB_ID")) travis_test= 1; if (!hostname && (envvar= getenv("MYSQL_TEST_HOST"))) diff --git a/unittest/libmariadb/ps_bugs.c b/unittest/libmariadb/ps_bugs.c index 1779c27d..3e0cfd14 100644 --- a/unittest/libmariadb/ps_bugs.c +++ b/unittest/libmariadb/ps_bugs.c @@ -674,6 +674,7 @@ static int test_bug1500(MYSQL *mysql) static int test_bug15510(MYSQL *mysql) { + SKIP_MYSQL(mysql); MYSQL_STMT *stmt; int rc; const char *query= "select 1 from dual where 1/0"; @@ -2070,7 +2071,7 @@ static int test_bug36004(MYSQL *mysql) int rc, warning_count= 0; MYSQL_STMT *stmt; SKIP_MAXSCALE; - + SKIP_MYSQL(mysql); // don't send expected warnings if (mysql_get_server_version(mysql) < 60000) { diag("Test requires MySQL Server version 6.0 or above"); diff --git a/unittest/libmariadb/view.c b/unittest/libmariadb/view.c index b80112c5..10d6f3ef 100644 --- a/unittest/libmariadb/view.c +++ b/unittest/libmariadb/view.c @@ -426,8 +426,7 @@ static int test_view_insert_fields(MYSQL *mysql) "F7F8 double NOT NULL default '0'," "F8F8 double NOT NULL default '0'," "F9D8 decimal(8,2) NOT NULL default '0.00'," - "PRIMARY KEY (K1C4,K2C4,K3C4,K4N4)) " - "CHARSET=latin1 COLLATE latin1_bin"); + "PRIMARY KEY (K1C4,K2C4,K3C4,K4N4))"); check_mysql_rc(rc, mysql); rc= mysql_query(mysql, "CREATE VIEW v1 AS select sql_no_cache "