94 lines
2.1 KiB
Bash
94 lines
2.1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# A script to test Postgres upgrades. WIP.
|
||
|
|
|
||
|
|
set -o errexit
|
||
|
|
set -o nounset
|
||
|
|
set -o xtrace
|
||
|
|
|
||
|
|
from_tag=appsmith/appsmith-ce:v1.28
|
||
|
|
to_tag=appsmith/appsmith-ce:latest
|
||
|
|
|
||
|
|
container_name=appsmith-pg-upgrade-test
|
||
|
|
port=20080
|
||
|
|
|
||
|
|
docker rm -f "$container_name"
|
||
|
|
docker volume rm --force "$container_name"
|
||
|
|
|
||
|
|
# TODO: Add `--pull always` for images that have a manifest?
|
||
|
|
|
||
|
|
docker volume create "$container_name"
|
||
|
|
docker run \
|
||
|
|
--name "$container_name" \
|
||
|
|
--detach \
|
||
|
|
--publish "$port":80 \
|
||
|
|
--volume "$container_name":/appsmith-stacks \
|
||
|
|
"$from_tag"
|
||
|
|
|
||
|
|
wait-for-supervisor() {
|
||
|
|
while ! docker exec "$container_name" test -e /tmp/appsmith/supervisor.sock; do
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
sleep 2
|
||
|
|
}
|
||
|
|
|
||
|
|
wait-for-supervisor
|
||
|
|
|
||
|
|
docker exec "$container_name" bash -exc '
|
||
|
|
supervisorctl status \
|
||
|
|
| awk '\''$1 != "postgres" && $1 != "stdout" {print $1}'\'' \
|
||
|
|
| xargs supervisorctl stop
|
||
|
|
|
||
|
|
# Insert some sample data
|
||
|
|
su postgres -c "psql -h 127.0.0.1 -c \"
|
||
|
|
create table t (id serial, name text);
|
||
|
|
insert into t values (1, '\''one'\'');
|
||
|
|
insert into t values (2, '\''two'\'');
|
||
|
|
insert into t values (3, '\''three'\'');
|
||
|
|
\""
|
||
|
|
|
||
|
|
supervisorctl stop postgres
|
||
|
|
|
||
|
|
cat /appsmith-stacks/data/postgres/main/PG_VERSION
|
||
|
|
'
|
||
|
|
|
||
|
|
docker rm -f "$container_name"
|
||
|
|
|
||
|
|
docker run \
|
||
|
|
--name "$container_name" \
|
||
|
|
--detach \
|
||
|
|
--publish "$port":80 \
|
||
|
|
--volume "$container_name":/appsmith-stacks \
|
||
|
|
"$to_tag"
|
||
|
|
|
||
|
|
wait-for-supervisor
|
||
|
|
|
||
|
|
status=0
|
||
|
|
|
||
|
|
if [[ 14 != "$(docker exec "$container_name" cat /appsmith-stacks/data/postgres/main/PG_VERSION)" ]]; then
|
||
|
|
echo "Version isn't 14"
|
||
|
|
status=1
|
||
|
|
else
|
||
|
|
sample_table_contents="$(su postgres -c 'psql -h 127.0.0.1 -c "select * from t"')"
|
||
|
|
expected_contents=' id | name
|
||
|
|
----+-------
|
||
|
|
1 | one
|
||
|
|
2 | two
|
||
|
|
3 | three
|
||
|
|
(3 rows)'
|
||
|
|
if ! diff <(echo "$expected_contents") <(su postgres -c 'psql -h 127.0.0.1 -c "select * from t"'); then
|
||
|
|
status=1
|
||
|
|
echo "Table contents mismatch. Found this:"
|
||
|
|
su postgres -c 'psql -h 127.0.0.1 -c "select * from t"'
|
||
|
|
echo "Instead of this:"
|
||
|
|
echo "$expected_contents"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
docker exec -it "$container_name" bash
|
||
|
|
|
||
|
|
docker rm --force "$container_name"
|
||
|
|
docker volume rm --force "$container_name"
|
||
|
|
|
||
|
|
exit "$status"
|