97 lines
2.3 KiB
Bash
Executable file
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
|