diff -cNr cvs/pgsql/src/test/regress/expected/privileges.out cvs.build/pgsql/src/test/regress/expected/privileges.out *** cvs/pgsql/src/test/regress/expected/privileges.out 2006-01-23 23:52:37.000000000 +0100 --- cvs.build/pgsql/src/test/regress/expected/privileges.out 2006-06-19 10:40:42.000000000 +0200 *************** *** 1,6 **** --- 1,15 ---- -- -- Test access privileges -- + -- Prevent NOTICEs whether or not the role existed + SET client_min_messages TO 'warning'; + DROP ROLE IF EXISTS regressgroup1; + DROP ROLE IF EXISTS regressgroup2; + DROP ROLE IF EXISTS regressuser1; + DROP ROLE IF EXISTS regressuser2; + DROP ROLE IF EXISTS regressuser3; + DROP ROLE IF EXISTS regressuser4; + SET client_min_messages TO 'notice'; CREATE USER regressuser1; CREATE USER regressuser2; CREATE USER regressuser3; diff -cNr cvs/pgsql/src/test/regress/GNUmakefile cvs.build/pgsql/src/test/regress/GNUmakefile *** cvs/pgsql/src/test/regress/GNUmakefile 2006-03-24 08:11:21.000000000 +0100 --- cvs.build/pgsql/src/test/regress/GNUmakefile 2006-06-19 11:03:02.000000000 +0200 *************** *** 40,48 **** # Build regression test driver ! all: pg_regress ! pg_regress: pg_regress.sh GNUmakefile $(top_builddir)/src/Makefile.global sed -e 's,@bindir@,$(bindir),g' \ -e 's,@libdir@,$(libdir),g' \ -e 's,@pkglibdir@,$(pkglibdir),g' \ --- 40,48 ---- # Build regression test driver ! all: pg_regress.sh ! pg_regress.inc.sh: pg_regress.inc.sh.in GNUmakefile $(top_builddir)/src/Makefile.global sed -e 's,@bindir@,$(bindir),g' \ -e 's,@libdir@,$(libdir),g' \ -e 's,@pkglibdir@,$(pkglibdir),g' \ *************** *** 53,65 **** -e 's/@enable_shared@/$(enable_shared)/g' \ -e 's/@GCC@/$(GCC)/g' \ $< >$@ - chmod a+x $@ ! install: pg_regress ! $(INSTALL_SCRIPT) pg_regress '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress' uninstall: ! rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress' # Build dynamically-loaded object file for CREATE FUNCTION ... LANGUAGE C. --- 53,66 ---- -e 's/@enable_shared@/$(enable_shared)/g' \ -e 's/@GCC@/$(GCC)/g' \ $< >$@ ! pg_regress.sh: pg_regress.inc.sh ! ! install: pg_regress.sh ! $(INSTALL_SCRIPT) pg_regress.sh '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress.sh' uninstall: ! rm -f '$(DESTDIR)$(pgxsdir)/$(subdir)/pg_regress.sh' # Build dynamically-loaded object file for CREATE FUNCTION ... LANGUAGE C. *************** *** 143,159 **** check: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) installcheck: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress --schedule=$(srcdir)/serial_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) installcheck-parallel: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) # old interfaces follow... --- 144,160 ---- check: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress.sh --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) installcheck: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress.sh --schedule=$(srcdir)/serial_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) installcheck-parallel: all -rm -rf ./testtablespace mkdir ./testtablespace ! $(SHELL) ./pg_regress.sh --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) # old interfaces follow... *************** *** 163,172 **** runtest-parallel: installcheck-parallel bigtest: ! $(SHELL) ./pg_regress --schedule=$(srcdir)/serial_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) numeric_big bigcheck: ! $(SHELL) ./pg_regress --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) numeric_big ## --- 164,173 ---- runtest-parallel: installcheck-parallel bigtest: ! $(SHELL) ./pg_regress.sh --schedule=$(srcdir)/serial_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE) numeric_big bigcheck: ! $(SHELL) ./pg_regress.sh --temp-install --top-builddir=$(top_builddir) --temp-port=$(TEMP_PORT) --schedule=$(srcdir)/parallel_schedule --multibyte=$(MULTIBYTE) --load-language=plpgsql $(MAXCONNOPT) $(NOLOCALE) numeric_big ## *************** *** 177,183 **** # things built by `all' target rm -f $(NAME)$(DLSUFFIX) $(OBJS) $(MAKE) -C $(contribdir)/spi clean ! rm -f $(output_files) $(input_files) pg_regress # things created by various check targets rm -rf testtablespace rm -rf results tmp_check log --- 178,184 ---- # things built by `all' target rm -f $(NAME)$(DLSUFFIX) $(OBJS) $(MAKE) -C $(contribdir)/spi clean ! rm -f $(output_files) $(input_files) pg_regress.inc.sh # things created by various check targets rm -rf testtablespace rm -rf results tmp_check log diff -cNr cvs/pgsql/src/test/regress/pg_regress.inc.sh.in cvs.build/pgsql/src/test/regress/pg_regress.inc.sh.in *** cvs/pgsql/src/test/regress/pg_regress.inc.sh.in 1970-01-01 01:00:00.000000000 +0100 --- cvs.build/pgsql/src/test/regress/pg_regress.inc.sh.in 2006-06-19 10:45:47.000000000 +0200 *************** *** 0 **** --- 1,587 ---- + message(){ + _dashes='==============' # 14 + _spaces=' ' # 38 + _msg=`echo "$1$_spaces" | cut -c 1-38` + echo "$_dashes $_msg $_dashes" + } + + build_help(){ + help="\ + PostgreSQL regression test driver + + Usage: $me [options...] [extra tests...] + + Options: + --dbname=DB use database DB (default \`regression') + --debug turn on debug mode in programs that are run + --inputdir=DIR take input files from DIR (default \`.') + --load-language=lang load the named language before running the + tests; can appear multiple times + --max-connections=N maximum number of concurrent connections + (default is 0 meaning unlimited) + --multibyte=ENCODING use ENCODING as the multibyte encoding, and + also run a test by the same name + --outputdir=DIR place output files in DIR (default \`.') + --temp-install[=DIR] create a temporary installation (in DIR) + --no-locale use C locale + $1 + Options for \`temp-install' mode: + --top-builddir=DIR (relative) path to top level build directory + --temp-port=PORT port number to start temp postmaster on + --listen-on-tcp listen on the tcp port as well + + Options for using an existing installation: + --host=HOST use postmaster running on HOST + --port=PORT use postmaster running at PORT + --user=USER connect as USER + + The exit status is 0 if all tests passed, 1 if some tests failed, and 2 + if the tests could not be run for some reason. + + Report bugs to ." + } + + init_vars(){ + : ${TMPDIR=/tmp} + TMPFILE=$TMPDIR/pg_regress.$$ + + # ---------- + # Initialize default settings + # ---------- + + : ${inputdir=.} + : ${outputdir=.} + + libdir='@libdir@' + bindir='@bindir@' + datadir='@datadir@' + host_platform='@host_tuple@' + enable_shared='@enable_shared@' + GCC=@GCC@ + VERSION=@VERSION@ + + if [ "$GCC" = yes ]; then + compiler=gcc + else + compiler=cc + fi + + unset mode + unset schedule + unset debug + unset nolocale + unset top_builddir + unset temp_install + unset multibyte + + dbname=regression + hostname=localhost + maxconnections=0 + temp_port=65432 + load_langs="" + listen_on_tcp=no + + : ${GMAKE='@GMAKE@'} + } + + parse_general_options(){ + # ---------- + # Parse command line options + # ---------- + + while [ "$#" -gt 0 ] + do + case $1 in + --help|-\?) + echo "$help" + exit 0;; + --version) + echo "pg_regress (PostgreSQL $VERSION)" + exit 0;; + --dbname=*) + dbname=`expr "x$1" : "x--dbname=\(.*\)"` + shift;; + --debug) + debug=yes + shift;; + --inputdir=*) + inputdir=`expr "x$1" : "x--inputdir=\(.*\)"` + shift;; + --listen-on-tcp) + listen_on_tcp=yes + shift;; + --load-language=*) + lang=`expr "x$1" : "x--load-language=\(.*\)"` + load_langs="$load_langs $lang" + unset lang + shift;; + --multibyte=*) + multibyte=`expr "x$1" : "x--multibyte=\(.*\)"` + shift;; + --no-locale) + nolocale=yes + shift;; + --temp-install) + temp_install=./tmp_check + shift;; + --temp-install=*) + temp_install=`expr "x$1" : "x--temp-install=\(.*\)"` + shift;; + --max-connections=*) + maxconnections=`expr "x$1" : "x--max-connections=\(.*\)"` + shift;; + --outputdir=*) + outputdir=`expr "x$1" : "x--outputdir=\(.*\)"` + shift;; + --top-builddir=*) + top_builddir=`expr "x$1" : "x--top-builddir=\(.*\)"` + shift;; + --temp-port=*) + temp_port=`expr "x$1" : "x--temp-port=\(.*\)"` + shift;; + --host=*) + PGHOST=`expr "x$1" : "x--host=\(.*\)"` + export PGHOST + unset PGHOSTADDR + shift;; + --port=*) + PGPORT=`expr "x$1" : "x--port=\(.*\)"` + export PGPORT + shift;; + --user=*) + PGUSER=`expr "x$1" : "x--user=\(.*\)"` + export PGUSER + shift;; + -*) + # on error, this will not return but exit + parse_special_options "$1" + shift;; + *) + extra_tests="$extra_tests $1" + shift;; + esac + done + } + + + + setup_environment_variables(){ + + # This function has two parts. Part 1 sets/unsets environment variables + # independently of what options the script receives. + # Part 2 later sets environment variables with respect to the + # options given. + + # ======= + # PART 1: Options independent stuff goes here + # ======= + + + # ---------- + # Unset locale settings + # ---------- + + unset LC_COLLATE LC_CTYPE LC_MONETARY LC_MESSAGES LC_NUMERIC LC_TIME LC_ALL LANG LANGUAGE + + # On Windows the default locale may not be English, so force it + case $host_platform in + *-*-cygwin*|*-*-mingw32*) + LANG=en + export LANG + ;; + esac + + # ---------- + # On some platforms we can't use Unix sockets. + # ---------- + + case $host_platform in + *-*-cygwin* | *-*-mingw32*) + listen_on_tcp=yes + esac + + # ---------- + # Set up diff to ignore horizontal white space differences. + # ---------- + + case $host_platform in + *-*-sco3.2v5*) + DIFFFLAGS=-b;; + *) + DIFFFLAGS=-w;; + esac + + # ---------- + # Check for echo -n vs echo \c + # ---------- + + if echo '\c' | grep c >/dev/null 2>&1; then + ECHO_N='echo -n' + ECHO_C='' + else + ECHO_N='echo' + ECHO_C='\c' + fi + + # ---------- + # Set up SQL shell for the test. + # ---------- + + psql_test_options="-a -q -X $psql_options" + + + + # ======= + # PART 2: Options dependent stuff goes here + # ======= + + LOGDIR=$outputdir/log + + # ---------- + # warn of Cygwin likely failure if maxconnections = 0 + # and we are running parallel tests + # ---------- + + case $host_platform in + *-*-cygwin*) + case "$schedule" in + *parallel_schedule*) + if [ $maxconnections -eq 0 ] ; then + echo Using unlimited parallel connections is likely to fail or hang on Cygwin. + echo Try \"$me --max-connections=n\" or \"gmake MAX_CONNECTIONS=n check\" + echo with n = 5 or 10 if this happens. + echo + fi + ;; + esac + ;; + esac + + # ---------- + # Set up multibyte environment + # ---------- + + if [ -n "$multibyte" ]; then + PGCLIENTENCODING=$multibyte + export PGCLIENTENCODING + encoding_opt="-E $multibyte" + else + unset PGCLIENTENCODING + fi + } + + do_temp_install(){ + if echo x"$temp_install" | grep -v '^x/' >/dev/null 2>&1; then + temp_install="`pwd`/$temp_install" + fi + + bindir=$temp_install/install/$bindir + libdir=$temp_install/install/$libdir + datadir=$temp_install/install/$datadir + PGDATA=$temp_install/data + + if [ "$unix_sockets" = no ]; then + PGHOST=$hostname + export PGHOST + unset PGHOSTADDR + else + unset PGHOST + unset PGHOSTADDR + fi + + # since Makefile isn't very bright, check for out-of-range temp_port + if [ "$temp_port" -ge 1024 -a "$temp_port" -le 65535 ] ; then + PGPORT=$temp_port + else + PGPORT=65432 + fi + export PGPORT + + # Get rid of environment stuff that might cause psql to misbehave + # while contacting our temp installation + unset PGDATABASE PGUSER PGSERVICE PGSSLMODE PGREQUIRESSL PGCONNECT_TIMEOUT + + # ---------- + # Set up shared library paths, needed by psql and pg_encoding + # (if you run multibyte). LD_LIBRARY_PATH covers many platforms. + # DYLD_LIBRARY_PATH works on Darwin, and maybe other Mach-based systems. + # Feel free to account for others as well. + # ---------- + + if [ -n "$LD_LIBRARY_PATH" ]; then + LD_LIBRARY_PATH="$libdir:$LD_LIBRARY_PATH" + else + LD_LIBRARY_PATH=$libdir + fi + export LD_LIBRARY_PATH + + if [ -n "$DYLD_LIBRARY_PATH" ]; then + DYLD_LIBRARY_PATH="$libdir:$DYLD_LIBRARY_PATH" + else + DYLD_LIBRARY_PATH=$libdir + fi + export DYLD_LIBRARY_PATH + + # ---------- + # Windows needs shared libraries in PATH. (Only those linked into + # executables, not dlopen'ed ones) + # ---------- + case $host_platform in + *-*-cygwin*|*-*-mingw32*) + PATH=$libdir:$PATH + export PATH + ;; + esac + + if [ -d "$temp_install" ]; then + message "removing existing temp installation" + rm -rf "$temp_install" + fi + + message "creating temporary installation" + if [ ! -d "$LOGDIR" ]; then + mkdir -p "$LOGDIR" || { (exit 2); exit; } + fi + $GMAKE -C "$top_builddir" DESTDIR="$temp_install/install" install with_perl=no with_python=no >"$LOGDIR/install.log" 2>&1 + + if [ $? -ne 0 ] + then + echo + echo "$me: installation failed" + echo "Examine $LOGDIR/install.log for the reason." + echo + (exit 2); exit + fi + + message "initializing database system" + [ "$debug" = yes ] && initdb_options="--debug" + [ "$nolocale" = yes ] && initdb_options="$initdb_options --no-locale" + "$bindir/initdb" -D "$PGDATA" -L "$datadir" --noclean $initdb_options >"$LOGDIR/initdb.log" 2>&1 + + if [ $? -ne 0 ] + then + echo + echo "$me: initdb failed" + echo "Examine $LOGDIR/initdb.log for the reason." + echo + (exit 2); exit + fi + + + # ---------- + # Start postmaster + # ---------- + + message "starting postmaster" + [ "$debug" = yes ] && postmaster_options="$postmaster_options -d 5" + if [ "$listen_on_tcp" = yes ]; then + postmaster_options="$postmaster_options -c listen_addresses=$hostname" + else + postmaster_options="$postmaster_options -c listen_addresses=" + fi + "$bindir/postmaster" -D "$PGDATA" -F $postmaster_options >"$LOGDIR/postmaster.log" 2>&1 & + postmaster_pid=$! + + # Wait till postmaster is able to accept connections (normally only + # a second or so, but Cygwin is reportedly *much* slower). Don't + # wait forever, however. + i=0 + max=60 + until "$bindir/psql" -X $psql_options postgres /dev/null + do + i=`expr $i + 1` + if [ $i -ge $max ] + then + break + fi + if kill -0 $postmaster_pid >/dev/null 2>&1 + then + : still starting up + else + break + fi + sleep 1 + done + + if kill -0 $postmaster_pid >/dev/null 2>&1 + then + echo "running on port $PGPORT with pid $postmaster_pid" + else + echo + echo "$me: postmaster did not start" + echo "Examine $LOGDIR/postmaster.log for the reason." + echo + (exit 2); exit + fi + } + + dont_temp_install(){ + # ---------- + # Windows needs shared libraries in PATH. (Only those linked into + # executables, not dlopen'ed ones) + # ---------- + case $host_platform in + *-*-cygwin*|*-*-mingw32*) + PATH=$libdir:$PATH + export PATH + ;; + esac + + if [ -n "$PGPORT" ]; then + port_info="port $PGPORT" + else + port_info="default port" + fi + + if [ -n "$PGHOST" ]; then + echo "(using postmaster on $PGHOST, $port_info)" + else + if [ "$unix_sockets" = no ]; then + echo "(using postmaster on localhost, $port_info)" + else + echo "(using postmaster on Unix socket, $port_info)" + fi + fi + + message "dropping database \"$dbname\"" + "$bindir/dropdb" $psql_options "$dbname" + # errors can be ignored + } + + setup_client_environment_variables(){ + PGTZ='PST8PDT'; export PGTZ + PGDATESTYLE='Postgres, MDY'; export PGDATESTYLE + } + + # ---------- + # Exit trap to remove temp file and shut down postmaster + # ---------- + + # Note: There are some stupid shells (even among recent ones) that + # ignore the argument to exit (as in `exit 1') if there is an exit + # trap. The trap (and thus the shell script) will then always exit + # with the result of the last shell command before the `exit'. Hence + # we have to write `(exit x); exit' below this point. + + exit_trap(){ + savestatus=$1 + if [ -n "$postmaster_pid" ]; then + kill -2 "$postmaster_pid" + wait "$postmaster_pid" + unset postmaster_pid + fi + rm -f "$TMPFILE" && exit $savestatus + } + + sig_trap() { + savestatus=$1 + echo; echo "caught signal" + if [ -n "$postmaster_pid" ]; then + echo "signalling fast shutdown to postmaster with pid $postmaster_pid" + kill -2 "$postmaster_pid" + wait "$postmaster_pid" + unset postmaster_pid + fi + (exit $savestatus); exit + } + + setup_database(){ + # this receives the name of the database to set up as its argument + "$bindir/psql" -q -X $psql_options -c "\ + alter database \"$1\" set lc_messages to 'C'; + alter database \"$1\" set lc_monetary to 'C'; + alter database \"$1\" set lc_numeric to 'C'; + alter database \"$1\" set lc_time to 'C';" "$1" + if [ $? -ne 0 ]; then + echo "$me: could not set database default locales" + (exit 2); exit + fi + + # ---------- + # Install any requested PL languages + # ---------- + + if [ "$enable_shared" = yes ]; then + for lang in xyzzy $load_langs ; do + if [ "$lang" != "xyzzy" ]; then + message "installing $lang" + "$bindir/createlang" $psql_options $lang "$1" + if [ $? -ne 0 ] && [ $? -ne 2 ]; then + echo "$me: createlang $lang failed" + (exit 2); exit + fi + fi + done + fi + } + + create_database(){ + # ---------- + # We use template0 so that any installation-local cruft in template1 + # will not mess up the tests. + # ---------- + + message "creating database \"$1\"" + "$bindir/createdb" $encoding_opt $psql_options --template template0 "$1" + if [ $? -ne 0 ]; then + echo "$me: createdb failed" + (exit 2); exit + fi + + setup_database "$1" + } + + postmaster_shutdown(){ + # ---------- + # Server shutdown + # ---------- + + if [ -n "$postmaster_pid" ]; then + message "shutting down postmaster" + "$bindir/pg_ctl" -s -D "$PGDATA" stop + wait "$postmaster_pid" + unset postmaster_pid + fi + } + + evaluate(){ + # ---------- + # Evaluation + # ---------- + + count_total=`cat "$result_summary_file" | grep '\.\.\.' | wc -l | sed 's/ //g'` + count_ok=`cat "$result_summary_file" | grep '\.\.\. ok' | wc -l | sed 's/ //g'` + count_failed=`cat "$result_summary_file" | grep '\.\.\. FAILED' | wc -l | sed 's/ //g'` + count_ignored=`cat "$result_summary_file" | grep '\.\.\. failed (ignored)' | wc -l | sed 's/ //g'` + + echo + if [ $count_total -eq $count_ok ]; then + msg="All $count_total tests passed." + result=0 + elif [ $count_failed -eq 0 ]; then + msg="$count_ok of $count_total tests passed, $count_ignored failed test(s) ignored." + result=0 + elif [ $count_ignored -eq 0 ]; then + msg="$count_failed of $count_total tests failed." + result=1 + else + msg="`expr $count_failed + $count_ignored` of $count_total tests failed, $count_ignored of these failures ignored." + result=1 + fi + + dashes=`echo " $msg " | sed 's/./=/g'` + echo "$dashes" + echo " $msg " + echo "$dashes" + echo + + if [ -s "$diff_file" ]; then + echo "The differences that caused some tests to fail can be viewed in the" + echo "file \`$diff_file'. A copy of the test summary that you see" + echo "above is saved in the file \`$result_summary_file'." + echo + else + rm -f "$diff_file" "$result_summary_file" + fi + } + diff -cNr cvs/pgsql/src/test/regress/pg_regress.sh cvs.build/pgsql/src/test/regress/pg_regress.sh *** cvs/pgsql/src/test/regress/pg_regress.sh 2006-01-05 04:01:38.000000000 +0100 --- cvs.build/pgsql/src/test/regress/pg_regress.sh 2006-06-19 11:39:50.000000000 +0200 *************** *** 2,290 **** # $PostgreSQL: pgsql/src/test/regress/pg_regress.sh,v 1.64 2006/01/05 03:01:38 momjian Exp $ me=`basename $0` - : ${TMPDIR=/tmp} - TMPFILE=$TMPDIR/pg_regress.$$ ! help="\ ! PostgreSQL regression test driver ! Usage: $me [options...] [extra tests...] ! ! Options: ! --dbname=DB use database DB (default \`regression') ! --debug turn on debug mode in programs that are run ! --inputdir=DIR take input files from DIR (default \`.') ! --load-language=lang load the named language before running the ! tests; can appear multiple times ! --max-connections=N maximum number of concurrent connections ! (default is 0 meaning unlimited) ! --multibyte=ENCODING use ENCODING as the multibyte encoding, and ! also run a test by the same name ! --outputdir=DIR place output files in DIR (default \`.') --schedule=FILE use test ordering schedule from FILE (may be used multiple times to concatenate) ! --temp-install[=DIR] create a temporary installation (in DIR) ! --no-locale use C locale ! ! Options for \`temp-install' mode: ! --top-builddir=DIR (relative) path to top level build directory ! --temp-port=PORT port number to start temp postmaster on ! ! Options for using an existing installation: ! --host=HOST use postmaster running on HOST ! --port=PORT use postmaster running at PORT ! --user=USER connect as USER ! ! The exit status is 0 if all tests passed, 1 if some tests failed, and 2 ! if the tests could not be run for some reason. ! ! Report bugs to ." ! ! ! message(){ ! _dashes='==============' # 14 ! _spaces=' ' # 38 ! _msg=`echo "$1$_spaces" | cut -c 1-38` ! echo "$_dashes $_msg $_dashes" ! } ! ! ! # ---------- ! # Unset locale settings ! # ---------- ! ! unset LC_COLLATE LC_CTYPE LC_MONETARY LC_MESSAGES LC_NUMERIC LC_TIME LC_ALL LANG LANGUAGE ! ! # On Windows the default locale may not be English, so force it ! case $host_platform in ! *-*-cygwin*|*-*-mingw32*) ! LANG=en ! export LANG ! ;; ! esac ! ! ! # ---------- ! # Check for echo -n vs echo \c ! # ---------- ! ! if echo '\c' | grep c >/dev/null 2>&1; then ! ECHO_N='echo -n' ! ECHO_C='' ! else ! ECHO_N='echo' ! ECHO_C='\c' ! fi ! ! ! # ---------- ! # Initialize default settings ! # ---------- ! : ${inputdir=.} ! : ${outputdir=.} ! libdir='@libdir@' ! bindir='@bindir@' ! datadir='@datadir@' ! host_platform='@host_tuple@' ! enable_shared='@enable_shared@' ! GCC=@GCC@ ! ! if [ "$GCC" = yes ]; then ! compiler=gcc ! else ! compiler=cc ! fi ! ! unset mode ! unset schedule ! unset debug ! unset nolocale ! unset top_builddir ! unset temp_install ! unset multibyte ! ! dbname=regression ! hostname=localhost ! maxconnections=0 ! temp_port=65432 ! load_langs="" ! ! : ${GMAKE='@GMAKE@'} ! ! ! # ---------- ! # Parse command line options ! # ---------- ! ! while [ "$#" -gt 0 ] ! do case $1 in - --help|-\?) - echo "$help" - exit 0;; - --version) - echo "pg_regress (PostgreSQL @VERSION@)" - exit 0;; - --dbname=*) - dbname=`expr "x$1" : "x--dbname=\(.*\)"` - shift;; - --debug) - debug=yes - shift;; - --inputdir=*) - inputdir=`expr "x$1" : "x--inputdir=\(.*\)"` - shift;; - --load-language=*) - lang=`expr "x$1" : "x--load-language=\(.*\)"` - load_langs="$load_langs $lang" - unset lang - shift;; - --multibyte=*) - multibyte=`expr "x$1" : "x--multibyte=\(.*\)"` - shift;; - --no-locale) - nolocale=yes - shift;; - --temp-install) - temp_install=./tmp_check - shift;; - --temp-install=*) - temp_install=`expr "x$1" : "x--temp-install=\(.*\)"` - shift;; - --max-connections=*) - maxconnections=`expr "x$1" : "x--max-connections=\(.*\)"` - shift;; - --outputdir=*) - outputdir=`expr "x$1" : "x--outputdir=\(.*\)"` - shift;; --schedule=*) foo=`expr "x$1" : "x--schedule=\(.*\)"` schedule="$schedule $foo" ! shift;; ! --top-builddir=*) ! top_builddir=`expr "x$1" : "x--top-builddir=\(.*\)"` ! shift;; ! --temp-port=*) ! temp_port=`expr "x$1" : "x--temp-port=\(.*\)"` ! shift;; ! --host=*) ! PGHOST=`expr "x$1" : "x--host=\(.*\)"` ! export PGHOST ! unset PGHOSTADDR ! shift;; ! --port=*) ! PGPORT=`expr "x$1" : "x--port=\(.*\)"` ! export PGPORT ! shift;; ! --user=*) ! PGUSER=`expr "x$1" : "x--user=\(.*\)"` ! export PGUSER ! shift;; -*) echo "$me: invalid argument $1" 1>&2 exit 2;; - *) - extra_tests="$extra_tests $1" - shift;; esac ! done ! ! # ---------- ! # warn of Cygwin likely failure if maxconnections = 0 ! # and we are running parallel tests ! # ---------- ! ! case $host_platform in ! *-*-cygwin*) ! case "$schedule" in ! *parallel_schedule*) ! if [ $maxconnections -eq 0 ] ; then ! echo Using unlimited parallel connections is likely to fail or hang on Cygwin. ! echo Try \"$me --max-connections=n\" or \"gmake MAX_CONNECTIONS=n check\" ! echo with n = 5 or 10 if this happens. ! echo ! fi ! ;; ! esac ! ;; ! esac ! ! ! # ---------- ! # On some platforms we can't use Unix sockets. ! # ---------- ! case $host_platform in ! *-*-cygwin* | *-*-mingw32*) ! unix_sockets=no;; ! *) ! unix_sockets=yes;; ! esac # ---------- ! # Set up diff to ignore horizontal white space differences. # ---------- ! case $host_platform in ! *-*-sco3.2v5*) ! DIFFFLAGS=-b;; ! *) ! DIFFFLAGS=-w;; ! esac ! ! ! # ---------- ! # Set backend timezone and datestyle explicitly ! # ! # To pass the horology test in its current form, the postmaster must be ! # started with PGDATESTYLE=ISO, while the frontend must be started with ! # PGDATESTYLE=Postgres. We set the postmaster values here and change ! # to the frontend settings after the postmaster has been started. ! # ---------- ! ! PGTZ='PST8PDT'; export PGTZ ! PGDATESTYLE='ISO, MDY'; export PGDATESTYLE # ---------- ! # Exit trap to remove temp file and shut down postmaster # ---------- ! # Note: There are some stupid shells (even among recent ones) that ! # ignore the argument to exit (as in `exit 1') if there is an exit ! # trap. The trap (and thus the shell script) will then always exit ! # with the result of the last shell command before the `exit'. Hence ! # we have to write `(exit x); exit' below this point. ! ! exit_trap(){ ! savestatus=$1 ! if [ -n "$postmaster_pid" ]; then ! kill -2 "$postmaster_pid" ! wait "$postmaster_pid" ! unset postmaster_pid ! fi ! rm -f "$TMPFILE" && exit $savestatus ! } ! ! trap 'exit_trap $?' 0 ! ! sig_trap() { ! savestatus=$1 ! echo; echo "caught signal" ! if [ -n "$postmaster_pid" ]; then ! echo "signalling fast shutdown to postmaster with pid $postmaster_pid" ! kill -2 "$postmaster_pid" ! wait "$postmaster_pid" ! unset postmaster_pid ! fi ! (exit $savestatus); exit ! } ! ! trap 'sig_trap $?' 1 2 13 15 ! # ---------- # Scan resultmap file to find which platform-specific expected files to use. --- 2,58 ---- # $PostgreSQL: pgsql/src/test/regress/pg_regress.sh,v 1.64 2006/01/05 03:01:38 momjian Exp $ me=`basename $0` ! . pg_regress.inc.sh ! special_regress_options="\ --schedule=FILE use test ordering schedule from FILE (may be used multiple times to concatenate) ! " ! build_help "$special_regress_options" ! init_vars ! parse_special_options(){ case $1 in --schedule=*) foo=`expr "x$1" : "x--schedule=\(.*\)"` schedule="$schedule $foo" ! return 0;; -*) echo "$me: invalid argument $1" 1>&2 exit 2;; esac ! } + # this will call parse_special_options from above + parse_general_options $* # ---------- ! # Set up the environment variables (some of them depend on the options) # ---------- + setup_environment_variables ! # see the comment at the defintion of exit_trap() on why we have to write ! # `(exit x); exit' from now on ! trap 'exit_trap $?' 0 ! trap 'sig_trap $?' 1 2 13 15 + if [ x"$temp_install" != x"" ] + then + do_temp_install + else + dont_temp_install + fi # ---------- ! # Postmaster is started, now we can change some environment variables for the ! # client # ---------- ! setup_client_environment_variables + create_database "$dbname" # ---------- # Scan resultmap file to find which platform-specific expected files to use. *************** *** 321,590 **** rm -f $TMPFILE - LOGDIR=$outputdir/log - - if [ x"$temp_install" != x"" ] - then - if echo x"$temp_install" | grep -v '^x/' >/dev/null 2>&1; then - temp_install="`pwd`/$temp_install" - fi - - bindir=$temp_install/install/$bindir - libdir=$temp_install/install/$libdir - datadir=$temp_install/install/$datadir - PGDATA=$temp_install/data - - if [ "$unix_sockets" = no ]; then - PGHOST=$hostname - export PGHOST - unset PGHOSTADDR - else - unset PGHOST - unset PGHOSTADDR - fi - - # since Makefile isn't very bright, check for out-of-range temp_port - if [ "$temp_port" -ge 1024 -a "$temp_port" -le 65535 ] ; then - PGPORT=$temp_port - else - PGPORT=65432 - fi - export PGPORT - - # Get rid of environment stuff that might cause psql to misbehave - # while contacting our temp installation - unset PGDATABASE PGUSER PGSERVICE PGSSLMODE PGREQUIRESSL PGCONNECT_TIMEOUT - - # ---------- - # Set up shared library paths, needed by psql and pg_encoding - # (if you run multibyte). LD_LIBRARY_PATH covers many platforms. - # DYLD_LIBRARY_PATH works on Darwin, and maybe other Mach-based systems. - # Feel free to account for others as well. - # ---------- - - if [ -n "$LD_LIBRARY_PATH" ]; then - LD_LIBRARY_PATH="$libdir:$LD_LIBRARY_PATH" - else - LD_LIBRARY_PATH=$libdir - fi - export LD_LIBRARY_PATH - - if [ -n "$DYLD_LIBRARY_PATH" ]; then - DYLD_LIBRARY_PATH="$libdir:$DYLD_LIBRARY_PATH" - else - DYLD_LIBRARY_PATH=$libdir - fi - export DYLD_LIBRARY_PATH - - # ---------- - # Windows needs shared libraries in PATH. (Only those linked into - # executables, not dlopen'ed ones) - # ---------- - case $host_platform in - *-*-cygwin*|*-*-mingw32*) - PATH=$libdir:$PATH - export PATH - ;; - esac - - if [ -d "$temp_install" ]; then - message "removing existing temp installation" - rm -rf "$temp_install" - fi - - message "creating temporary installation" - if [ ! -d "$LOGDIR" ]; then - mkdir -p "$LOGDIR" || { (exit 2); exit; } - fi - $GMAKE -C "$top_builddir" DESTDIR="$temp_install/install" install with_perl=no with_python=no >"$LOGDIR/install.log" 2>&1 - - if [ $? -ne 0 ] - then - echo - echo "$me: installation failed" - echo "Examine $LOGDIR/install.log for the reason." - echo - (exit 2); exit - fi - - message "initializing database system" - [ "$debug" = yes ] && initdb_options="--debug" - [ "$nolocale" = yes ] && initdb_options="$initdb_options --no-locale" - "$bindir/initdb" -D "$PGDATA" -L "$datadir" --noclean $initdb_options >"$LOGDIR/initdb.log" 2>&1 - - if [ $? -ne 0 ] - then - echo - echo "$me: initdb failed" - echo "Examine $LOGDIR/initdb.log for the reason." - echo - (exit 2); exit - fi - - - # ---------- - # Start postmaster - # ---------- - - message "starting postmaster" - [ "$debug" = yes ] && postmaster_options="$postmaster_options -d 5" - if [ "$unix_sockets" = no ]; then - postmaster_options="$postmaster_options -c listen_addresses=$hostname" - else - postmaster_options="$postmaster_options -c listen_addresses=" - fi - "$bindir/postmaster" -D "$PGDATA" -F $postmaster_options >"$LOGDIR/postmaster.log" 2>&1 & - postmaster_pid=$! - - # Wait till postmaster is able to accept connections (normally only - # a second or so, but Cygwin is reportedly *much* slower). Don't - # wait forever, however. - i=0 - max=60 - until "$bindir/psql" -X $psql_options postgres /dev/null - do - i=`expr $i + 1` - if [ $i -ge $max ] - then - break - fi - if kill -0 $postmaster_pid >/dev/null 2>&1 - then - : still starting up - else - break - fi - sleep 1 - done - - if kill -0 $postmaster_pid >/dev/null 2>&1 - then - echo "running on port $PGPORT with pid $postmaster_pid" - else - echo - echo "$me: postmaster did not start" - echo "Examine $LOGDIR/postmaster.log for the reason." - echo - (exit 2); exit - fi - - else # not temp-install - - # ---------- - # Windows needs shared libraries in PATH. (Only those linked into - # executables, not dlopen'ed ones) - # ---------- - case $host_platform in - *-*-cygwin*|*-*-mingw32*) - PATH=$libdir:$PATH - export PATH - ;; - esac - - if [ -n "$PGPORT" ]; then - port_info="port $PGPORT" - else - port_info="default port" - fi - - if [ -n "$PGHOST" ]; then - echo "(using postmaster on $PGHOST, $port_info)" - else - if [ "$unix_sockets" = no ]; then - echo "(using postmaster on localhost, $port_info)" - else - echo "(using postmaster on Unix socket, $port_info)" - fi - fi - - message "dropping database \"$dbname\"" - "$bindir/dropdb" $psql_options "$dbname" - # errors can be ignored - fi - - - # ---------- - # Set up SQL shell for the test. - # ---------- - - psql_test_options="-a -q -X $psql_options" - - - # ---------- - # Set frontend timezone and datestyle explicitly - # ---------- - - PGTZ='PST8PDT'; export PGTZ - PGDATESTYLE='Postgres, MDY'; export PGDATESTYLE - - - # ---------- - # Set up multibyte environment - # ---------- - - if [ -n "$multibyte" ]; then - PGCLIENTENCODING=$multibyte - export PGCLIENTENCODING - encoding_opt="-E $multibyte" - else - unset PGCLIENTENCODING - fi - - - # ---------- - # Create the regression database - # We use template0 so that any installation-local cruft in template1 - # will not mess up the tests. - # ---------- - - message "creating database \"$dbname\"" - "$bindir/createdb" $encoding_opt $psql_options --template template0 "$dbname" - if [ $? -ne 0 ]; then - echo "$me: createdb failed" - (exit 2); exit - fi - - "$bindir/psql" -q -X $psql_options -c "\ - alter database \"$dbname\" set lc_messages to 'C'; - alter database \"$dbname\" set lc_monetary to 'C'; - alter database \"$dbname\" set lc_numeric to 'C'; - alter database \"$dbname\" set lc_time to 'C';" "$dbname" - if [ $? -ne 0 ]; then - echo "$me: could not set database default locales" - (exit 2); exit - fi - - - # ---------- - # Remove regressuser* and regressgroup* user accounts. - # ---------- - - message "dropping regression test user accounts" - "$bindir/psql" -q -X $psql_options -c 'DROP GROUP regressgroup1; DROP GROUP regressgroup2; DROP USER regressuser1, regressuser2, regressuser3, regressuser4;' $dbname 2>/dev/null - if [ $? -eq 2 ]; then - echo "$me: could not drop user accounts" - (exit 2); exit - fi - - - # ---------- - # Install any requested PL languages - # ---------- - - if [ "$enable_shared" = yes ]; then - for lang in xyzzy $load_langs ; do - if [ "$lang" != "xyzzy" ]; then - message "installing $lang" - "$bindir/createlang" $psql_options $lang $dbname - if [ $? -ne 0 ] && [ $? -ne 2 ]; then - echo "$me: createlang $lang failed" - (exit 2); exit - fi - fi - done - fi - - # ---------- # Let's go # ---------- --- 89,94 ---- *************** *** 732,789 **** [ $? -ne 0 ] && exit ! # ---------- ! # Server shutdown ! # ---------- ! ! if [ -n "$postmaster_pid" ]; then ! message "shutting down postmaster" ! "$bindir/pg_ctl" -s -D "$PGDATA" stop ! wait "$postmaster_pid" ! unset postmaster_pid ! fi ! ! rm -f "$TMPFILE" ! ! ! # ---------- ! # Evaluation ! # ---------- ! ! count_total=`cat "$result_summary_file" | grep '\.\.\.' | wc -l | sed 's/ //g'` ! count_ok=`cat "$result_summary_file" | grep '\.\.\. ok' | wc -l | sed 's/ //g'` ! count_failed=`cat "$result_summary_file" | grep '\.\.\. FAILED' | wc -l | sed 's/ //g'` ! count_ignored=`cat "$result_summary_file" | grep '\.\.\. failed (ignored)' | wc -l | sed 's/ //g'` ! ! echo ! if [ $count_total -eq $count_ok ]; then ! msg="All $count_total tests passed." ! result=0 ! elif [ $count_failed -eq 0 ]; then ! msg="$count_ok of $count_total tests passed, $count_ignored failed test(s) ignored." ! result=0 ! elif [ $count_ignored -eq 0 ]; then ! msg="$count_failed of $count_total tests failed." ! result=1 ! else ! msg="`expr $count_failed + $count_ignored` of $count_total tests failed, $count_ignored of these failures ignored." ! result=1 ! fi ! ! dashes=`echo " $msg " | sed 's/./=/g'` ! echo "$dashes" ! echo " $msg " ! echo "$dashes" ! echo ! ! if [ -s "$diff_file" ]; then ! echo "The differences that caused some tests to fail can be viewed in the" ! echo "file \`$diff_file'. A copy of the test summary that you see" ! echo "above is saved in the file \`$result_summary_file'." ! echo ! else ! rm -f "$diff_file" "$result_summary_file" ! fi ! (exit $result); exit --- 236,242 ---- [ $? -ne 0 ] && exit ! postmaster_shutdown ! evaluate (exit $result); exit diff -cNr cvs/pgsql/src/test/regress/sql/privileges.sql cvs.build/pgsql/src/test/regress/sql/privileges.sql *** cvs/pgsql/src/test/regress/sql/privileges.sql 2005-08-15 04:40:32.000000000 +0200 --- cvs.build/pgsql/src/test/regress/sql/privileges.sql 2006-06-19 10:37:06.000000000 +0200 *************** *** 2,7 **** --- 2,20 ---- -- Test access privileges -- + -- Prevent NOTICEs whether or not the role existed + SET client_min_messages TO 'warning'; + + DROP ROLE IF EXISTS regressgroup1; + DROP ROLE IF EXISTS regressgroup2; + + DROP ROLE IF EXISTS regressuser1; + DROP ROLE IF EXISTS regressuser2; + DROP ROLE IF EXISTS regressuser3; + DROP ROLE IF EXISTS regressuser4; + + SET client_min_messages TO 'notice'; + CREATE USER regressuser1; CREATE USER regressuser2; CREATE USER regressuser3;