diff --git a/dev/docker/db-testing/Dockerfile b/dev/docker/db-testing/Dockerfile index 69b07a2b5..618f5bb82 100644 --- a/dev/docker/db-testing/Dockerfile +++ b/dev/docker/db-testing/Dockerfile @@ -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 index 000000000..89892408e --- /dev/null +++ b/dev/docker/db-testing/readme.md @@ -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 +``` diff --git a/dev/docker/db-testing/run.sh b/dev/docker/db-testing/run.sh index 9898e52ec..265b4f0f9 100755 --- a/dev/docker/db-testing/run.sh +++ b/dev/docker/db-testing/run.sh @@ -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" diff --git a/tests/Uploads/ImageTest.php b/tests/Uploads/ImageTest.php index f36be8702..a11f9601f 100644 --- a/tests/Uploads/ImageTest.php +++ b/tests/Uploads/ImageTest.php @@ -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()