diff --git a/test/acceptance/batch/batch-limits.test.js b/test/acceptance/batch/batch-limits.test.js index f015787e..5d46872c 100644 --- a/test/acceptance/batch/batch-limits.test.js +++ b/test/acceptance/batch/batch-limits.test.js @@ -5,6 +5,7 @@ var BatchTestClient = require('../../support/batch-test-client'); var JobStatus = require('../../../batch/job_status'); var redisUtils = require('../../support/redis_utils'); var metadataBackend = require('cartodb-redis')({ pool: redisUtils.getPool() }); +const db_utils = require('../../support/db_utils'); describe('batch query statement_timeout limit', function() { @@ -14,13 +15,14 @@ describe('batch query statement_timeout limit', function() { global.settings.batch_query_timeout = 15000; metadataBackend.redisCmd(5, 'HMSET', ['limits:batch:vizzuality', 'timeout', 100], done); }); - + before(db_utils.resetPgBouncerConnections); after(function(done) { global.settings.batch_query_timeout = this.batchQueryTimeout; redisUtils.clean('limits:batch:*', function() { this.batchTestClient.drain(done); }.bind(this)); }); + after(db_utils.resetPgBouncerConnections); function jobPayload(query) { return { diff --git a/test/acceptance/export/timeout.js b/test/acceptance/export/timeout.js index 0a927acc..2cc5a558 100644 --- a/test/acceptance/export/timeout.js +++ b/test/acceptance/export/timeout.js @@ -4,9 +4,13 @@ require('../../support/assert'); var assert = require('assert'); var querystring = require('querystring'); +const db_utils = require('../../support/db_utils'); describe('timeout', function () { describe('export database', function () { + before(db_utils.resetPgBouncerConnections); + after(db_utils.resetPgBouncerConnections); + const databaseTimeoutQuery = ` select ST_SetSRID(ST_Point(0, 0), 4326) as the_geom, diff --git a/test/prepare_db.sh b/test/prepare_db.sh index 4536482a..a162dadb 100755 --- a/test/prepare_db.sh +++ b/test/prepare_db.sh @@ -70,6 +70,7 @@ if test x"$PREPARE_PGSQL" = xyes; then echo "preparing postgres..." echo "PostgreSQL server version: `psql -A -t -c 'select version()'`" + echo "PAUSE; RESUME;" | psql -p 6432 pgbouncer # make sure there are no connections pgbouncer -> test_db dropdb ${TEST_DB} # 2> /dev/null # error expected if doesn't exist, but not otherwise createdb -Ttemplate_postgis -EUTF8 ${TEST_DB} || die "Could not create test database" psql -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";' ${TEST_DB} diff --git a/test/run_tests.sh b/test/run_tests.sh index c3f2cb67..354efa07 100755 --- a/test/run_tests.sh +++ b/test/run_tests.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # To make output dates deterministic export TZ='Europe/Rome' diff --git a/test/support/db_utils.js b/test/support/db_utils.js new file mode 100644 index 00000000..decfc9fc --- /dev/null +++ b/test/support/db_utils.js @@ -0,0 +1,36 @@ +'use strict'; + +const { Client } = require('pg'); + +const dbConfig = { + db_user: process.env.PGUSER || 'postgres', + db_host: global.settings.db_host, + db_port: global.settings.db_port, + db_batch_port: global.settings.db_batch_port +}; + +module.exports.resetPgBouncerConnections = function (callback) { + // We assume there's no pgbouncer if db_port === db_batch_port + if (dbConfig.db_port === dbConfig.db_batch_port) { + return callback(); + } + + const client = new Client({ + database: 'pgbouncer', + user: dbConfig.db_user, + host: dbConfig.db_host, + port: dbConfig.db_port + }); + + // We just chain a PAUSE followed by a RESUME to reset internal pool connections of PgBouncer + client.connect(); + client.query('PAUSE', err => { + if (err) { + return callback(err); + } + client.query('RESUME', err => { + client.end(); + return callback(err); + }); + }); +};