summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>2017-02-06 02:14:06 +0100
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>2017-02-06 21:40:05 +0000
commitf5cad47909cfdbb1cacdb71ce1f2c62bf1737dfc (patch)
treed10e21d773a5cf2a108ca3acc0e286172e76885e
parent9f467231d91051557866a3585e5c257b705f35b1 (diff)
downloadpsycopg2-f5cad47909cfdbb1cacdb71ce1f2c62bf1737dfc.tar.gz
Run the test suite with postgres versions not available on travis
-rwxr-xr-xscripts/travis_prepare.sh131
-rwxr-xr-xscripts/travis_test.sh70
2 files changed, 157 insertions, 44 deletions
diff --git a/scripts/travis_prepare.sh b/scripts/travis_prepare.sh
index 2b1e12e..6deb3ef 100755
--- a/scripts/travis_prepare.sh
+++ b/scripts/travis_prepare.sh
@@ -1,60 +1,131 @@
#!/bin/bash
-set -e
+set -e -x
# Prepare the test databases in Travis CI.
+#
# The script should be run with sudo.
# The script is not idempotent: it assumes the machine in a clean state
# and is designed for a sudo-enabled Trusty environment.
+#
+# The variables TEST_PAST, TEST_FUTURE, DONT_TEST_PRESENT can be used to test
+# against unsupported Postgres versions and skip tests with supported ones.
+#
+# The variables can be set in the travis configuration
+# (https://travis-ci.org/psycopg/psycopg2/settings)
set_param () {
# Set a parameter in a postgresql.conf file
- version=$1
- param=$2
- value=$3
+ param=$1
+ value=$2
- sed -i "s/^\s*#\?\s*$param.*/$param = $value/" \
- "/etc/postgresql/$version/psycopg/postgresql.conf"
+ sed -i "s/^\s*#\?\s*$param.*/$param = $value/" "$DATADIR/postgresql.conf"
}
create () {
- version=$1
- port=$2
- dbname=psycopg2_test
+ export VERSION=$1
+ export PACKAGE=${2:-$VERSION}
- pg_createcluster -p $port --start-conf manual $version psycopg
+ # Version as number: 9.6 -> 906
+ export VERNUM=$(( $(echo $VERSION \
+ | sed 's/\(.\+\)\.\(.\+\)/100 * \1 + \2/') ))
+
+ # Port number: 9.6 -> 50906
+ export PORT=$(( 50000 + $VERNUM ))
+
+ export DATADIR="/var/lib/postgresql/$PACKAGE/psycopg"
+ export PGDIR="/usr/lib/postgresql/$PACKAGE"
+ export PGBIN="$PGDIR/bin"
+
+ # install postgres versions not available on the image
+ if (( "$VERNUM" < 902 || "$VERNUM" > 906 )); then
+ wget -O - http://initd.org/psycopg/tarballs/postgresql/postgresql-${PACKAGE}.tar.bz2 \
+ | sudo tar xjf - -C /usr/lib/postgresql
+ fi
+
+ sudo -u postgres "$PGBIN/initdb" -D "$DATADIR"
+
+ set_param port "$PORT"
+ if (( "$VERNUM" >= 800 )); then
+ set_param listen_addresses "'*'"
+ else
+ set_param tcpip_socket true
+ fi
# for two-phase commit testing
- set_param "$version" max_prepared_transactions 10
+ if (( "$VERNUM" >= 801 )); then set_param max_prepared_transactions 10; fi
# for replication testing
- set_param "$version" max_wal_senders 5
- set_param "$version" max_replication_slots 5
- if [ "$version" == "9.2" -o "$version" == "9.3" ]
- then
- set_param "$version" wal_level hot_standby
+ if (( "$VERNUM" >= 900 )); then set_param max_wal_senders 5; fi
+ if (( "$VERNUM" >= 904 )); then set_param max_replication_slots 5; fi
+
+ if (( "$VERNUM" >= 904 )); then
+ set_param wal_level logical
+ elif (( "$VERNUM" >= 900 )); then
+ set_param wal_level hot_standby
+ fi
+
+ if (( "$VERNUM" >= 900 )); then
+ echo "host replication travis 0.0.0.0/0 trust" >> "$DATADIR/pg_hba.conf"
+ fi
+
+ # start the server, wait for start
+ sudo -u postgres "$PGBIN/pg_ctl" -w -l /dev/null -D "$DATADIR" start
+
+ # create the test database
+ DBNAME=psycopg2_test
+ CONNINFO="user=postgres host=localhost port=$PORT dbname=template1"
+
+ if (( "$VERNUM" >= 901 )); then
+ psql -c "create user travis createdb createrole replication" "$CONNINFO"
+ elif (( "$VERNUM" >= 801 )); then
+ psql -c "create user travis createdb createrole" "$CONNINFO"
else
- set_param "$version" wal_level logical
+ psql -c "create user travis createdb createuser" "$CONNINFO"
fi
- echo "local replication travis trust" \
- >> "/etc/postgresql/$version/psycopg/pg_hba.conf"
+ psql -c "create database $DBNAME with owner travis" "$CONNINFO"
+ # configure global objects on the test database
+ CONNINFO="user=postgres host=localhost port=$PORT dbname=$DBNAME"
- pg_ctlcluster "$version" psycopg start
+ if (( "$VERNUM" >= 901 )); then
+ psql -c "create extension hstore" "$CONNINFO"
+ elif (( "$VERNUM" >= 803 )); then
+ psql -f "$PGDIR/share/contrib/hstore.sql" "$CONNINFO"
+ fi
- sudo -u postgres psql -c "create user travis replication" "port=$port"
- sudo -u postgres psql -c "create database $dbname" "port=$port"
- sudo -u postgres psql -c "grant create on database $dbname to travis" "port=$port"
- sudo -u postgres psql -c "create extension hstore" "port=$port dbname=$dbname"
+ if (( "$VERNUM" == 901 )); then
+ psql -c "create extension json" "$CONNINFO"
+ fi
}
-
# Would give a permission denied error in the travis build dir
cd /
-create 9.6 54396
-create 9.5 54395
-create 9.4 54394
-create 9.3 54393
-create 9.2 54392
+# Postgres versions supported by Travis CI
+if [[ -z "$DONT_TEST_PRESENT" ]]; then
+ create 9.6
+ create 9.5
+ create 9.4
+ create 9.3
+ create 9.2
+fi
+
+# Unsupported postgres versions that we still support
+# Images built by https://github.com/psycopg/psycopg2-wheels/tree/build-dinosaurs
+if [[ -n "$TEST_PAST" ]]; then
+ create 7.4
+ create 8.0
+ create 8.1
+ create 8.2
+ create 8.3
+ create 8.4
+ create 9.0
+ create 9.1
+fi
+
+# Postgres built from master
+if [[ -n "$TEST_FUTURE" ]]; then
+ create 10.0 10-master
+fi
diff --git a/scripts/travis_test.sh b/scripts/travis_test.sh
index 0c60b93..5daa9ba 100755
--- a/scripts/travis_test.sh
+++ b/scripts/travis_test.sh
@@ -2,29 +2,71 @@
# Run the tests in all the databases
# The script is designed for a Trusty environment.
+#
+# The variables TEST_PAST, TEST_FUTURE, DONT_TEST_PRESENT can be used to test
+# against unsupported Postgres versions and skip tests with supported ones.
+#
+# The variables TEST_VERBOSE enables verbose test log.
+#
+# The variables can be set in the travis configuration
+# (https://travis-ci.org/psycopg/psycopg2/settings)
-set -e
+set -e -x
run_test () {
- version=$1
- port=$2
- dbname=psycopg2_test
+ VERSION=$1
+ DBNAME=psycopg2_test
+ if [[ -n "$TEST_VERBOSE" ]]; then
+ VERBOSE=--verbose
+ else
+ VERBOSE=
+ fi
- printf "\n\nRunning tests against PostgreSQL $version\n\n"
- export PSYCOPG2_TESTDB=$dbname
+ # Port number: 9.6 -> 50906
+ port=$(( 50000 + $(echo $VERSION \
+ | sed 's/\(.\+\)\.\(.\+\)/100 * \1 + \2/') ))
+
+ printf "\n\nRunning tests against PostgreSQL $VERSION (port $port)\n\n"
+ export PSYCOPG2_TESTDB=$DBNAME
+ export PSYCOPG2_TESTDB_HOST=localhost
export PSYCOPG2_TESTDB_PORT=$port
export PSYCOPG2_TESTDB_USER=travis
export PSYCOPG2_TEST_REPL_DSN=
unset PSYCOPG2_TEST_GREEN
- python -c "from psycopg2 import tests; tests.unittest.main(defaultTest='tests.test_suite')"
+ python -c \
+ "from psycopg2 import tests; tests.unittest.main(defaultTest='tests.test_suite')" \
+ $VERBOSE
- printf "\n\nRunning tests against PostgreSQL $version (green mode)\n\n"
+ printf "\n\nRunning tests against PostgreSQL $VERSION (green mode)\n\n"
export PSYCOPG2_TEST_GREEN=1
- python -c "from psycopg2 import tests; tests.unittest.main(defaultTest='tests.test_suite')"
+ python -c \
+ "from psycopg2 import tests; tests.unittest.main(defaultTest='tests.test_suite')" \
+ $VERBOSE
}
-run_test 9.6 54396
-run_test 9.5 54395
-run_test 9.4 54394
-run_test 9.3 54393
-run_test 9.2 54392
+# Postgres versions supported by Travis CI
+if [[ -z "$DONT_TEST_PRESENT" ]]; then
+ run_test 9.6
+ run_test 9.5
+ run_test 9.4
+ run_test 9.3
+ run_test 9.2
+fi
+
+# Unsupported postgres versions that we still support
+# Images built by https://github.com/psycopg/psycopg2-wheels/tree/build-dinosaurs
+if [[ -n "$TEST_PAST" ]]; then
+ run_test 7.4
+ run_test 8.0
+ run_test 8.1
+ run_test 8.2
+ run_test 8.3
+ run_test 8.4
+ run_test 9.0
+ run_test 9.1
+fi
+
+# Postgres built from master
+if [[ -n "$TEST_FUTURE" ]]; then
+ run_test 10.0
+fi