postgresql/test/run_upgrade_test
2020-03-24 11:16:16 +01:00

97 lines
2.3 KiB
Bash
Executable file

#! /bin/bash
set -e
. test/pg-test-lib.sh
ADMIN_PASSWORD=redhat
STEPS=( "$@" )
quote_args ()
{
quote_args_result=
local space=
for arg; do
quote_args_result+="$space$(printf "%q" "$arg")"
space=' '
done
}
quote_args_print ()
{
quote_args "$@"
echo "$quote_args_result"
}
# background_container IMAGE DOCKER_ARGS CMD
background_container ()
{
CID=$(eval "docker run -d $2 $1 $3")
test -n "$CID"
}
# run_server DATADIR IMAGE_ID DOCKER_ARGS
run_server ()
{
local datadir=$1
local image_id=$2
local docker_args=$(quote_args_print -e POSTGRESQL_ADMIN_PASSWORD="$ADMIN_PASSWORD")
docker_args+=' '$(quote_args_print -v "$datadir:/var/lib/pgsql/data:Z")
docker_args+=" $3"
background_container "$image_id" "$docker_args"
}
# init_datadir IMAGE_ID dataspec
# ------------------------------
init_datadir ()
{
local image_id=$1
DATADIR=$(mktemp -d)
setfacl -m u:26:rwx "$DATADIR"
run_server "$DATADIR" "$image_id"
wait_for_postgres "$CID"
eval "data_$2_create"
eval "data_$2_check"
docker stop "$CID" >/dev/null
docker rm -f "$CID" >/dev/null
}
# check_upgrade_path {hardlink|copy} dataspec
assert_upgrade_succeeds ()
{
info "Initializing datadir with $VERSION_FROM PostgreSQL"
local INIT_IMAGE=$(get_image_id "$VERSION_FROM")
local dataspec=$2
init_datadir "$INIT_IMAGE" "$dataspec"
info "Running upgrade '$1/$dataspec'"
for upgrade_to in "${UPGRADE_PATH[@]}"; do
info "Upgrading to $upgrade_to"
UPGRADE_IMAGE=$(get_image_id "$upgrade_to")
run_server "$DATADIR" "$UPGRADE_IMAGE" "-e POSTGRESQL_UPGRADE=$1"
wait_for_postgres "$CID"
eval "data_${dataspec}_check"
debug "the upgrading container of version '$upgrade_to' responded"
docker stop "$CID" >/dev/null
docker rm -f "$CID" >/dev/null
run_server "$DATADIR" "$UPGRADE_IMAGE"
wait_for_postgres "$CID"
eval "data_${dataspec}_check"
debug "restarted server of version '$upgrade_to' responded"
docker stop "$CID" >/dev/null
docker rm -f "$CID" >/dev/null
done
}
VERSION_FROM=$1 ; shift
UPGRADE_PATH=( "$@" )
for data in empty pagila; do
assert_upgrade_succeeds hardlink "$data"
assert_upgrade_succeeds copy "$data"
done