59 lines
1.9 KiB
Bash
Executable File
59 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# A basic test to ensure Docker images are built correctly.
|
|
# Build a wrapper around the compute, start all services and runs a simple SQL query.
|
|
# Repeats the process for all currenly supported Postgres versions.
|
|
|
|
# Implicitly accepts `REPOSITORY` and `TAG` env vars that are passed into the compose file
|
|
# Their defaults point at DockerHub `neondatabase/neon:latest` image.`,
|
|
# to verify custom image builds (e.g pre-published ones).
|
|
|
|
set -eux -o pipefail
|
|
|
|
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
COMPOSE_FILE=$SCRIPT_DIR/docker-compose.yml
|
|
|
|
COMPUTE_CONTAINER_NAME=docker-compose-compute-1
|
|
SQL="CREATE TABLE t(key int primary key, value text); insert into t values(1,1); select * from t;"
|
|
PSQL_OPTION="-h localhost -U cloud_admin -p 55433 -c '$SQL' postgres"
|
|
|
|
cleanup() {
|
|
echo "show container information"
|
|
docker ps
|
|
docker compose -f $COMPOSE_FILE logs
|
|
echo "stop containers..."
|
|
docker compose -f $COMPOSE_FILE down
|
|
}
|
|
|
|
echo "clean up containers if exists"
|
|
cleanup
|
|
|
|
for pg_version in 14 15 16; do
|
|
echo "start containers (pg_version=$pg_version)."
|
|
PG_VERSION=$pg_version docker compose -f $COMPOSE_FILE up --build -d
|
|
|
|
echo "wait until the compute is ready. timeout after 60s. "
|
|
cnt=0
|
|
while sleep 1; do
|
|
# check timeout
|
|
cnt=`expr $cnt + 1`
|
|
if [ $cnt -gt 60 ]; then
|
|
echo "timeout before the compute is ready."
|
|
cleanup
|
|
exit 1
|
|
fi
|
|
|
|
# check if the compute is ready
|
|
set +o pipefail
|
|
result=`docker compose -f $COMPOSE_FILE logs "compute_is_ready" | grep "accepting connections" | wc -l`
|
|
set -o pipefail
|
|
if [ $result -eq 1 ]; then
|
|
echo "OK. The compute is ready to connect."
|
|
echo "execute simple queries."
|
|
docker exec $COMPUTE_CONTAINER_NAME /bin/bash -c "psql $PSQL_OPTION"
|
|
cleanup
|
|
break
|
|
fi
|
|
done
|
|
done
|