diff --git a/composer.json b/composer.json index 1515cfeb..70643969 100644 --- a/composer.json +++ b/composer.json @@ -118,10 +118,12 @@ "test:db": [ "@test:db:sqlite", "@test:db:mysql", + "@test:db:maria", "@test:db:postgres" ], "test:db:sqlite": "APP_ENV=test phpdbg -qrr vendor/bin/phpunit --order-by=random --colors=always -c phpunit-db.xml --coverage-php build/coverage-db.cov --testdox", "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:api": "bin/test/run-api-tests.sh", diff --git a/config/test/test_config.global.php b/config/test/test_config.global.php index 6da1fa88..4e8ebdaf 100644 --- a/config/test/test_config.global.php +++ b/config/test/test_config.global.php @@ -16,40 +16,41 @@ use function sys_get_temp_dir; $swooleTestingHost = '127.0.0.1'; $swooleTestingPort = 9999; -$buildDbConnection = function () { +$buildDbConnection = function (): array { $driver = env('DB_DRIVER', 'sqlite'); $isCi = env('TRAVIS', false); + $getMysqlHost = function (string $driver) { + return sprintf('shlink_db%s', $driver === 'mysql' ? '' : '_maria'); + }; - switch ($driver) { - case 'sqlite': - return [ - 'driver' => 'pdo_sqlite', - 'path' => sys_get_temp_dir() . '/shlink-tests.db', - ]; - case 'mysql': - return [ - 'driver' => 'pdo_mysql', - 'host' => $isCi ? '127.0.0.1' : 'shlink_db', - 'user' => 'root', - 'password' => $isCi ? '' : 'root', - 'dbname' => 'shlink_test', - 'charset' => 'utf8', - 'driverOptions' => [ - PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', - ], - ]; - case 'postgres': - return [ - 'driver' => 'pdo_pgsql', - 'host' => $isCi ? '127.0.0.1' : 'shlink_db_postgres', - 'user' => 'postgres', - 'password' => $isCi ? '' : 'root', - 'dbname' => 'shlink_test', - 'charset' => 'utf8', - ]; - default: - return []; - } + $driverConfigMap = [ + 'sqlite' => [ + 'driver' => 'pdo_sqlite', + 'path' => sys_get_temp_dir() . '/shlink-tests.db', + ], + 'mysql' => [ + 'driver' => 'pdo_mysql', + 'host' => $isCi ? '127.0.0.1' : $getMysqlHost($driver), + 'user' => 'root', + 'password' => $isCi ? '' : 'root', + 'dbname' => 'shlink_test', + 'charset' => 'utf8', + 'driverOptions' => [ + PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', + ], + ], + 'postgres' => [ + 'driver' => 'pdo_pgsql', + 'host' => $isCi ? '127.0.0.1' : 'shlink_db_postgres', + 'user' => 'postgres', + 'password' => $isCi ? '' : 'root', + 'dbname' => 'shlink_test', + 'charset' => 'utf8', + ], + ]; + $driverConfigMap['maria'] = $driverConfigMap['mysql']; + + return $driverConfigMap[$driver] ?? []; }; return [ diff --git a/data/infra/database_maria/.gitignore b/data/infra/database_maria/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/data/infra/database_maria/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/docker-compose.override.yml.dist b/docker-compose.override.yml.dist index ec9d24da..ea0bee84 100644 --- a/docker-compose.override.yml.dist +++ b/docker-compose.override.yml.dist @@ -24,3 +24,9 @@ services: volumes: - /etc/passwd:/etc/passwd:ro - /etc/group:/etc/group:ro + + shlink_db_maria: + user: 1000:1000 + volumes: + - /etc/passwd:/etc/passwd:ro + - /etc/group:/etc/group:ro diff --git a/docker-compose.yml b/docker-compose.yml index 0f9b12d7..34b9c64e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,6 +24,7 @@ services: links: - shlink_db - shlink_db_postgres + - shlink_db_maria - shlink_redis shlink_swoole: @@ -38,6 +39,7 @@ services: links: - shlink_db - shlink_db_postgres + - shlink_db_maria - shlink_redis shlink_db: @@ -65,6 +67,18 @@ services: POSTGRES_DB: shlink PGDATA: /var/lib/postgresql/data/pgdata + shlink_db_maria: + container_name: shlink_db_maria + image: mariadb:10.2 + ports: + - "3308:3306" + volumes: + - ./:/home/shlink/www + - ./data/infra/database_maria:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: shlink + shlink_redis: container_name: shlink_redis image: redis:5.0-alpine