Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions dev/docker/db-testing/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
32 changes: 32 additions & 0 deletions dev/docker/db-testing/readme.md
Original file line number Diff line number Diff line change
@@ -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
```
4 changes: 1 addition & 3 deletions dev/docker/db-testing/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@
BRANCH=${1:-development}

# Build the container with a known name
docker build --build-arg BRANCH="$BRANCH" -t bookstack:db-testing .
docker build --no-cache --build-arg BRANCH="$BRANCH" -t bookstack:db-testing .
if [ $? -eq 1 ]; then
echo "Failed to build app container for testing"
exit 1
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"
Expand Down
8 changes: 4 additions & 4 deletions tests/Uploads/ImageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -720,15 +720,15 @@ public function test_gif_thumbnail_generation()
$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()
Expand Down