From 85a9a7961be6fa19d04d0c654c3b3322452e1bb0 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 16 Jun 2014 11:54:59 +0900 Subject: [PATCH 2/3] Extract generic bash initialization process from pg_upgrade Such initialization is useful as well for some other utilities and makes test settings consistent. --- contrib/pg_upgrade/test.sh | 19 ++++++--------- src/test/shell/init_env.sh | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 src/test/shell/init_env.sh diff --git a/contrib/pg_upgrade/test.sh b/contrib/pg_upgrade/test.sh index 7bbd2c7..9184035 100644 --- a/contrib/pg_upgrade/test.sh +++ b/contrib/pg_upgrade/test.sh @@ -9,24 +9,14 @@ # Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group # Portions Copyright (c) 1994, Regents of the University of California -set -e - -: ${MAKE=make} - -# Guard against parallel make issues (see comments in pg_regress.c) -unset MAKEFLAGS -unset MAKELEVEL - -# Establish how the server will listen for connections -testhost=`uname -s` +# Initialize test +. ../../src/test/shell/init_env.sh case $testhost in MINGW*) - LISTEN_ADDRESSES="localhost" PGHOST=""; unset PGHOST ;; *) - LISTEN_ADDRESSES="" # Select a socket directory. The algorithm is from the "configure" # script; the outcome mimics pg_regress.c:make_temp_sockdir(). PGHOST=$PG_REGRESS_SOCK_DIR @@ -102,6 +92,7 @@ logdir=$PWD/log rm -rf "$logdir" mkdir "$logdir" +<<<<<<< HEAD # Clear out any environment vars that might cause libpq to connect to # the wrong postmaster (cf pg_regress.c) # @@ -133,6 +124,10 @@ do PGPORT=`expr $PGPORT + 1` export PGPORT done +======= +# Get a port to run the tests +pg_get_test_port $newsrc +>>>>>>> Extract generic bash initialization process from pg_upgrade # buildfarm may try to override port via EXTRA_REGRESS_OPTS ... EXTRA_REGRESS_OPTS="$EXTRA_REGRESS_OPTS --port=$PGPORT" diff --git a/src/test/shell/init_env.sh b/src/test/shell/init_env.sh new file mode 100644 index 0000000..d37eb69 --- /dev/null +++ b/src/test/shell/init_env.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# src/test/shell/init.sh +# +# Utility initializing environment for tests to be conducted in shell. +# The initialization done here is made to be platform-proof. + +set -e + +: ${MAKE=make} + +# Guard against parallel make issues (see comments in pg_regress.c) +unset MAKEFLAGS +unset MAKELEVEL + +# Set listen_addresses desirably +testhost=`uname -s` +case $testhost in + MINGW*) LISTEN_ADDRESSES="localhost" ;; + *) LISTEN_ADDRESSES="" ;; +esac + +# Clear out any environment vars that might cause libpq to connect to +# the wrong postmaster (cf pg_regress.c) +# +# Some shells, such as NetBSD's, return nonzero from unset if the variable +# is already unset. Since we are operating under 'set e', this causes the +# script to fail. To guard against this, set them all to an empty string first. +PGDATABASE=""; unset PGDATABASE +PGUSER=""; unset PGUSER +PGSERVICE=""; unset PGSERVICE +PGSSLMODE=""; unset PGSSLMODE +PGREQUIRESSL=""; unset PGREQUIRESSL +PGCONNECT_TIMEOUT=""; unset PGCONNECT_TIMEOUT +PGHOST=""; unset PGHOST +PGHOSTADDR=""; unset PGHOSTADDR + +# Select a non-conflicting port number, similarly to pg_regress.c, and +# save its value in PGPORT. Caller should either save or use this value +# for the tests. +pg_get_test_port() +{ + PG_ROOT_DIR=$1 + PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$PG_ROOT_DIR"/src/include/pg_config.h | awk '{print $3}'` + PGPORT=`expr $PG_VERSION_NUM % 16384 + 49152` + export PGPORT + + i=0 + while psql -X postgres /dev/null + do + i=`expr $i + 1` + if [ $i -eq 16 ] + then + echo port $PGPORT apparently in use + exit 1 + fi + PGPORT=`expr $PGPORT + 1` + export PGPORT + done +} -- 2.0.0