Skip to content

fix: fix end-to-end tests using an incorrect database name #75

fix: fix end-to-end tests using an incorrect database name

fix: fix end-to-end tests using an incorrect database name #75

Workflow file for this run

name: "Backend tests"
on:
push:
branches:
- "master"
- "dev"
workflow_dispatch:
jobs:
run-workspace-tests:
runs-on: ubuntu-latest
name: "Run tests on entire workspace"
timeout-minutes: 60
env:
SQLX_OFFLINE: "true"
steps:
- name: "Prepare environment"
run: |
set -e
sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends build-essential libssl-dev pkg-config
- name: "Checkout repository"
uses: actions/checkout@v4.2.2
- name: "Install stable Rust"
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: "Set up Rust cache"
uses: Swatinem/rust-cache@v2
- name: "Run tests(lib,bins,examples,tests,benches) on full workspace excluding kolomoni_test"
# Excludes the end-to-end testing crate (tested separately).
# This one also doesn't execute doctests due to --all-targets.
run: cargo test --verbose --workspace --exclude kolomoni_test --all-features --all-targets
- name: "Run tests(doc) on full workspace excluding kolomoni_test"
# Excludes the end-to-end testing crate (tested separately).
run: cargo test --verbose --workspace --exclude kolomoni_test --all-features --doc
# The following three invocations purposefully exclude integration tests,
# which are tested in the `run-end-to-end-tests` job below.
- name: "Run tests(lib) on kolomoni_test"
run: cargo test --verbose --package kolomoni_test --all-features --lib
- name: "Run tests(examples) on kolomoni_test"
run: cargo test --verbose --package kolomoni_test --all-features --examples
- name: "Run tests(doc) on kolomoni_test"
run: cargo test --verbose --package kolomoni_test --all-features --doc
run-end-to-end-tests:
runs-on: ubuntu-latest
name: "Run end-to-end tests"
timeout-minutes: 60
env:
SQLX_OFFLINE: "true"
steps:
- name: "Prepare environment"
run: |
set -e
sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends build-essential libssl-dev pkg-config
- name: "Checkout repository"
uses: actions/checkout@v4.2.2
- name: "Install stable Rust"
uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- name: "Set up Rust cache"
uses: Swatinem/rust-cache@v2
- name: "Initialize PostgreSQL database"
# Steps explained:
# - We remove the old test database container and its volume, if present.
# - We spin up a new PostgreSQL docker container and execute our initialization scripts on it.
run: |
set -e
docker stop --time 30 kolomoni-e2e-test-database || true
docker rm --volumes kolomoni-e2e-test-database || true
docker run \
--name kolomoni-e2e-test-database \
--publish 127.0.0.1:5432:5432 \
--env POSTGRES_USER=postgres \
--env POSTGRES_PASSWORD=postgres \
--env POSTGRES_DB=stari_kolomoni \
--rm \
--detach \
postgres:17.2-alpine
- name: "Perform database migrations"
env:
KOLOMONI_MIGRATIONS_DATABASE_URL_PRIVILEGED_USER: "postgres://postgres:postgres@127.0.0.1:5432/stari_kolomoni"
KOLOMONI_MIGRATIONS_DATABASE_URL_NORMAL_USER: "postgres://kolomoni_migrator:kolomoni_migrator@127.0.0.1:5432/stari_kolomoni"
run: |
set -e
echo "Building kolomoni_migrations CLI..."
cargo build --verbose --release --package kolomoni_migrations
echo "Applying all migrations..."
cargo run --verbose --release --package kolomoni_migrations -- up --assume-yes
- name: "Build and start API server"
timeout-minutes: 60
run: |
set -e
echo "Creating log directory."
mkdir -p logs
echo "Building server."
cargo build --verbose --release --features e2e-testing
echo "Starting server in the background."
nohup cargo run --verbose --release --features e2e-testing -- \
--configurationFilePath ./kolomoni_test/assets/configuration.TESTING.toml > logs/server.log 2>&1 &
SERVER_PID=$!
echo "Server is starting in the background with PID $SERVER_PID."
rm -f -- server.pid
echo $SERVER_PID > server.pid
echo "Waiting until ./logs/server.log exists..."
until [ -f ./logs/server.log ]
do
sleep 1
done
echo "File ./logs/server.log exists!"
echo "Waiting until server is ready..."
while true
do
if tail -n1000 ./logs/server.log | grep -q "initialized and running"
then
echo "Server is ready!"
break
fi
if ps -ef | grep "$SERVER_PID" | grep -v "grep" -q
then
:
else
echo "Server process exited without success."
exit 1
fi
sleep 4
done
- name: "Run end-to-end tests"
env:
KOLOMONI_TEST_SERVER_BASE_URL: "http://127.0.0.1:8866"
RUST_BACKTRACE: "1"
RUST_TEST_TIME_INTEGRATION: "300000,1800000"
run: |
cargo test \
--package kolomoni_test \
--verbose \
--no-fail-fast \
--test "end_to_end" \
-- \
--test-threads 1 \
--report-time \
--ensure-time
- name: "Stop API server"
if: ${{ always() }}
run: |
set -e
SERVER_PID=$(<server.pid)
echo "Killing API server with PID $SERVER_PID."
kill -s SIGTERM "$SERVER_PID"
echo "API server killed."
- name: "Echo API server log"
if: ${{ always() }}
run: |
set -e
echo "-- SERVER LOG START --"
cat ./logs/server.log
echo "-- SERVER LOG END --"
- name: "Stop PostgreSQL database"
if: ${{ always() }}
run: |
set -e
echo "Stopping PostgreSQL database container."
docker stop --time 60 kolomoni-e2e-test-database
docker rm --volumes kolomoni-e2e-test-database || true
echo "PostgreSQL database container stopped and removed."