]> BookStack Code Mirror - bookstack/commitdiff
DB Testing: Updated supported DB list, added readme
authorDan Brown <redacted>
Sat, 22 Nov 2025 12:24:36 +0000 (12:24 +0000)
committerDan Brown <redacted>
Sat, 22 Nov 2025 12:24:36 +0000 (12:24 +0000)
Also fixed potentally flaky GIf test to be more accurate with single
frame GIF images.

dev/docker/db-testing/Dockerfile
dev/docker/db-testing/readme.md [new file with mode: 0644]
dev/docker/db-testing/run.sh
tests/Uploads/ImageTest.php

index 69b07a2b5717f3302edd6f8d1123f7514bd21ff2..618f5bb8281215cff07df71030d60de369148b55 100644 (file)
@@ -19,8 +19,8 @@ ARG BRANCH=development
 # Download BookStack & install PHP deps
 RUN mkdir -p /var/www && \
     git clone https://github.com/bookstackapp/bookstack.git --branch "$BRANCH" --single-branch /var/www/bookstack && \
-    cd /var/www/bookstack && \ 
-   wget https://raw.githubusercontent.com/composer/getcomposer.org/f3108f64b4e1c1ce6eb462b159956461592b3e3e/web/installer -O - -q | php -- --quiet --filename=composer && \
+    cd /var/www/bookstack && \
+    wget https://raw.githubusercontent.com/composer/getcomposer.org/f3108f64b4e1c1ce6eb462b159956461592b3e3e/web/installer -O - -q | php -- --quiet --filename=composer && \
     php composer install
 
 # Set the BookStack dir as the default working dir
diff --git a/dev/docker/db-testing/readme.md b/dev/docker/db-testing/readme.md
new file mode 100644 (file)
index 0000000..8989240
--- /dev/null
@@ -0,0 +1,32 @@
+# Database Testing Suite
+
+This docker setup is designed to run BookStack's test suite against each major database version we support
+across MySQL and MariaDB to ensure compatibility and highlight any potential issues before a release.
+This is a fairly slow and heavy process, so is designed to just be run manually before a release which
+makes changes to the database schema, or a release which makes significant changes to database queries.
+
+### Running
+
+Everything is ran via the `run.sh` script. This will:
+
+- Optionally, accept a branch of BookStack to use for testing.
+- Build the docker image from the `Dockerfile`.
+  - This will include a built-in copy of the chosen BookStack branch. 
+- Cycle through each major supported database version:
+  - Migrate and seed the database.
+  - Run the full PHP test suite.
+
+If there's a failure for a database version, the script will prompt if you'd like to continue or stop testing.
+
+This script should be ran from this `db-testing` directory:
+
+```bash
+# Enter this directory
+cd dev/docker/db-testing
+
+# Runs for the 'development' branch by default
+./run.sh
+
+# Run for a specific branch
+./run.sh v25-11
+```
index 9898e52ec4aeb361cd64f30811500b9ceaeb9023..265b4f0f91c9a44227909674cdc190175d3442b8 100755 (executable)
@@ -11,11 +11,9 @@ fi
 
 # List of database containers to test against
 containers=(
-  "mysql:5.7"
   "mysql:8.0"
   "mysql:8.4"
   "mysql:9.5"
-  "mariadb:10.2"
   "mariadb:10.6"
   "mariadb:10.11"
   "mariadb:11.4"
index f36be87023d6df836ebf3646b2228934e73758ce..a11f9601ff07481f5bf829420dc418d2712f6f30 100644 (file)
@@ -720,15 +720,15 @@ class ImageTest extends TestCase
         $galleryFileSize = filesize($galleryThumbPath);
 
         // Basic scan of GIF content to check frame count
-        $originalFrameCount = count(explode("\x00\x21\xF9", file_get_contents($originalFile)));
-        $galleryFrameCount = count(explode("\x00\x21\xF9", file_get_contents($galleryThumbPath)));
+        $originalFrameCount = count(explode("\x00\x21\xF9", file_get_contents($originalFile))) - 1;
+        $galleryFrameCount = count(explode("\x00\x21\xF9", file_get_contents($galleryThumbPath))) - 1;
 
         $this->files->deleteAtRelativePath($relPath);
         $this->files->deleteAtRelativePath($galleryThumbRelPath);
 
         $this->assertNotEquals($originalFileSize, $galleryFileSize);
-        $this->assertEquals(3, $originalFrameCount);
-        $this->assertEquals(1, $galleryFrameCount);
+        $this->assertEquals(2, $originalFrameCount);
+        $this->assertLessThan(2, $galleryFrameCount);
     }
 
     protected function getTestProfileImage()