diff --git a/composer.json b/composer.json index 908b9af3..3f897602 100644 --- a/composer.json +++ b/composer.json @@ -115,7 +115,8 @@ "@test:db:sqlite", "@test:db:mysql", "@test:db:maria", - "@test:db:postgres" + "@test:db:postgres", + "@test:db:ms" ], "test:db:ci": [ "@test:db:sqlite", @@ -126,6 +127,7 @@ "test:db:mysql": "DB_DRIVER=mysql composer test:db:sqlite", "test:db:maria": "DB_DRIVER=maria composer test:db:sqlite", "test:db:postgres": "DB_DRIVER=postgres composer test:db:sqlite", + "test:db:ms": "DB_DRIVER=mssql composer test:db:sqlite", "test:api": "bin/test/run-api-tests.sh", "test:unit:pretty": "phpdbg -qrr vendor/bin/phpunit --order-by=random --colors=always --coverage-html build/coverage", "infect": "infection --threads=4 --min-msi=80 --log-verbosity=default --only-covered", diff --git a/config/test/test_config.global.php b/config/test/test_config.global.php index c4556b8b..fa51c240 100644 --- a/config/test/test_config.global.php +++ b/config/test/test_config.global.php @@ -45,6 +45,13 @@ $buildDbConnection = function (): array { 'dbname' => 'shlink_test', 'charset' => 'utf8', ], + 'mssql' => [ + 'driver' => 'pdo_sqlsrv', + 'host' => $isCi ? '127.0.0.1' : 'shlink_db_ms', + 'user' => 'sa', + 'password' => $isCi ? '' : 'Passw0rd!', + 'dbname' => 'shlink_test', + ], ]; $driverConfigMap['maria'] = $driverConfigMap['mysql']; diff --git a/data/infra/php.Dockerfile b/data/infra/php.Dockerfile index e92cc815..d31ad6f0 100644 --- a/data/infra/php.Dockerfile +++ b/data/infra/php.Dockerfile @@ -65,6 +65,18 @@ RUN docker-php-ext-configure xdebug\ # cleanup RUN rm /tmp/xdebug.tar.gz +# Install sqlsrv driver +RUN wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.1.1-1_amd64.apk && \ + wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.5.1.1-1_amd64.apk && \ + apk add --allow-untrusted msodbcsql17_17.5.1.1-1_amd64.apk && \ + apk add --allow-untrusted mssql-tools_17.5.1.1-1_amd64.apk && \ + apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS unixodbc-dev && \ + pecl install pdo_sqlsrv && \ + docker-php-ext-enable pdo_sqlsrv && \ + apk del .phpize-deps && \ + rm msodbcsql17_17.5.1.1-1_amd64.apk && \ + rm mssql-tools_17.5.1.1-1_amd64.apk + # Install composer RUN php -r "readfile('https://getcomposer.org/installer');" | php RUN chmod +x composer.phar diff --git a/data/infra/swoole.Dockerfile b/data/infra/swoole.Dockerfile index 8bc821d9..bf591ee1 100644 --- a/data/infra/swoole.Dockerfile +++ b/data/infra/swoole.Dockerfile @@ -66,12 +66,17 @@ RUN docker-php-ext-configure inotify\ # cleanup RUN rm /tmp/inotify.tar.gz -# Install swoole -# First line fixes an error when installing pecl extensions. Found in https://github.com/docker-library/php/issues/233 -RUN apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS && \ - pecl install swoole-${SWOOLE_VERSION} && \ - docker-php-ext-enable swoole && \ - apk del .phpize-deps +# Install swoole and mssql driver +RUN wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.5.1.1-1_amd64.apk && \ + wget https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.5.1.1-1_amd64.apk && \ + apk add --allow-untrusted msodbcsql17_17.5.1.1-1_amd64.apk && \ + apk add --allow-untrusted mssql-tools_17.5.1.1-1_amd64.apk && \ + apk add --no-cache --virtual .phpize-deps $PHPIZE_DEPS unixodbc-dev && \ + pecl install swoole-${SWOOLE_VERSION} pdo_sqlsrv && \ + docker-php-ext-enable swoole pdo_sqlsrv && \ + apk del .phpize-deps && \ + rm msodbcsql17_17.5.1.1-1_amd64.apk && \ + rm mssql-tools_17.5.1.1-1_amd64.apk # Install composer RUN php -r "readfile('https://getcomposer.org/installer');" | php diff --git a/docker-compose.yml b/docker-compose.yml index 99cc93fb..b672a05a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,6 +25,7 @@ services: - shlink_db - shlink_db_postgres - shlink_db_maria + - shlink_db_ms - shlink_redis shlink_swoole: @@ -42,7 +43,12 @@ services: - shlink_db - shlink_db_postgres - shlink_db_maria + - shlink_db_ms - shlink_redis + environment: + LANG: en_US.UTF-8 + LANGUAGE: en_US.UTF-8 + LC_ALL: C shlink_db: container_name: shlink_db @@ -82,6 +88,15 @@ services: MYSQL_DATABASE: shlink MYSQL_INITDB_SKIP_TZINFO: 1 + shlink_db_ms: + container_name: shlink_db_ms + image: mcr.microsoft.com/mssql/server:2019-latest + ports: + - "1433:1433" + environment: + ACCEPT_EULA: Y + SA_PASSWORD: "Passw0rd!" + shlink_redis: container_name: shlink_redis image: redis:5.0-alpine