Browse Source

Added mariadb container for development environment

Alejandro Celaya 4 years ago
parent
commit
42e84e526e

+ 2 - 0
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",
 

+ 32 - 31
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 [

+ 2 - 0
data/infra/database_maria/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

+ 6 - 0
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

+ 14 - 0
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