71 lines
2.0 KiB
Bash
Executable File
71 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
IMAGE="synapse-backupper:test"
|
|
|
|
cleanup() {
|
|
docker rm -f sb-pg-test 2>/dev/null || true
|
|
rm -rf tmp-keys tmp-backups tmp-restored
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# 1. Start PostgreSQL
|
|
docker run -d --name sb-pg-test -e POSTGRES_PASSWORD=test postgres:17-alpine
|
|
# Wait for ready
|
|
for i in {1..30}; do
|
|
docker exec sb-pg-test pg_isready -U postgres && break
|
|
sleep 1
|
|
done
|
|
|
|
# 2. Create database
|
|
docker exec sb-pg-test psql -U postgres -c "CREATE DATABASE synapse;"
|
|
|
|
# 3. Create fixture table
|
|
docker exec sb-pg-test psql -U postgres -d synapse -c "CREATE TABLE rooms (id serial PRIMARY KEY, name text); INSERT INTO rooms (name) VALUES ('test1');"
|
|
|
|
# 4. Generate keys
|
|
mkdir -p tmp-keys
|
|
chmod 777 tmp-keys
|
|
docker run --rm -v "$(pwd)/tmp-keys:/keys" "$IMAGE" keygen --type both --out-prefix /keys/test
|
|
|
|
# 5. Run backup
|
|
mkdir -p tmp-backups
|
|
chmod 777 tmp-backups
|
|
docker run --rm --network container:sb-pg-test \
|
|
-v "$(pwd)/tmp-keys:/keys:ro" \
|
|
-v "$(pwd)/tmp-backups:/backups" \
|
|
-e APP_PG_HOST=127.0.0.1 \
|
|
-e APP_PG_USER=postgres \
|
|
-e APP_PG_PASSWORD=test \
|
|
-e APP_PG_DATABASE=synapse \
|
|
-e APP_PQ_PUBLIC_KEY_PATH=/keys/test.pq.pub.pem \
|
|
-e APP_CLASSICAL_PUBLIC_KEY_PATH=/keys/test.classical.pub.pem \
|
|
-e APP_BACKUP_DIR=/backups \
|
|
"$IMAGE" backup
|
|
|
|
# 6. Assert exactly ONE .pqenc file
|
|
PQENC_COUNT=$(ls tmp-backups/*.pqenc 2>/dev/null | wc -l)
|
|
if [ "$PQENC_COUNT" -ne 1 ]; then
|
|
echo "Expected exactly 1 .pqenc file, found $PQENC_COUNT"
|
|
exit 1
|
|
fi
|
|
PQENC_FILE=$(ls tmp-backups/*.pqenc)
|
|
|
|
# 7. Restore
|
|
mkdir -p tmp-restored
|
|
chmod 777 tmp-restored
|
|
docker run --rm \
|
|
-v "$(pwd)/tmp-keys:/keys:ro" \
|
|
-v "$(pwd)/tmp-backups:/backups:ro" \
|
|
-v "$(pwd)/tmp-restored:/out" \
|
|
"$IMAGE" restore \
|
|
--in "/backups/$(basename "$PQENC_FILE")" \
|
|
--privkey-pq /keys/test.pq.priv.pem \
|
|
--privkey-classical /keys/test.classical.priv.pem \
|
|
--out /out/restored.dump
|
|
|
|
# 8. Assert restore dump contains rooms table
|
|
grep -q "CREATE TABLE public.rooms" tmp-restored/restored.dump
|
|
|
|
echo "Integration test PASSED"
|