diff options
author | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2017-02-06 02:14:06 +0100 |
---|---|---|
committer | Daniele Varrazzo <daniele.varrazzo@gmail.com> | 2017-02-06 21:40:05 +0000 |
commit | f5cad47909cfdbb1cacdb71ce1f2c62bf1737dfc (patch) | |
tree | d10e21d773a5cf2a108ca3acc0e286172e76885e | |
parent | 9f467231d91051557866a3585e5c257b705f35b1 (diff) | |
download | psycopg2-f5cad47909cfdbb1cacdb71ce1f2c62bf1737dfc.tar.gz |
Run the test suite with postgres versions not available on travis
-rwxr-xr-x | scripts/travis_prepare.sh | 131 | ||||
-rwxr-xr-x | scripts/travis_test.sh | 70 |
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 |