Skip to content

Commit caa6517

Browse files
charmanderbrianc
authored andcommitted
Fix disconnection tests for pg-pool 2.0.7 (#1946)
* Require latest pg-pool ^2.0.7 to limit variability of next pg’s installations. * Ignore EPIPE when writing termination message I don’t know why this wasn’t necessary for tests to pass before… * Fix disconnection tests for pg-pool 2.0.7 In pg-pool 2.0.7, checked-out clients became responsible for their own 'error' events. brianc/node-pg-pool#123
1 parent fde5ec5 commit caa6517

File tree

4 files changed

+27
-26
lines changed

4 files changed

+27
-26
lines changed

Diff for: lib/connection.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,8 @@ Connection.prototype.connect = function (port, host) {
6464
})
6565

6666
const reportStreamError = function (error) {
67-
// don't raise ECONNRESET errors - they can & should be ignored
68-
// during disconnect
69-
if (self._ending && error.code === 'ECONNRESET') {
67+
// errors about disconnections should be ignored during disconnect
68+
if (self._ending && (error.code === 'ECONNRESET' || error.code === 'EPIPE')) {
7069
return
7170
}
7271
self.emit('error', error)

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"buffer-writer": "2.0.0",
2323
"packet-reader": "1.0.0",
2424
"pg-connection-string": "0.1.3",
25-
"pg-pool": "^2.0.4",
25+
"pg-pool": "^2.0.7",
2626
"pg-types": "^2.1.0",
2727
"pgpass": "1.x",
2828
"semver": "4.3.2"

Diff for: test/integration/connection-pool/error-tests.js

+16-16
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ suite.test('connecting to invalid port', (cb) => {
88
pool.connect().catch(e => cb())
99
})
1010

11-
suite.test('errors emitted on pool', (cb) => {
11+
suite.test('errors emitted on checked-out clients', (cb) => {
1212
// make pool hold 2 clients
1313
const pool = new pg.Pool({ max: 2 })
1414
// get first client
1515
pool.connect(assert.success(function (client, done) {
16-
client.id = 1
1716
client.query('SELECT NOW()', function () {
1817
pool.connect(assert.success(function (client2, done2) {
19-
client2.id = 2
2018
var pidColName = 'procpid'
2119
helper.versionGTE(client2, 90200, assert.success(function (isGreater) {
2220
var killIdleQuery = 'SELECT pid, (SELECT pg_terminate_backend(pid)) AS killed FROM pg_stat_activity WHERE state = $1'
@@ -26,10 +24,9 @@ suite.test('errors emitted on pool', (cb) => {
2624
params = ['%IDLE%']
2725
}
2826

29-
pool.once('error', (err, brokenClient) => {
30-
assert.ok(err)
31-
assert.ok(brokenClient)
32-
assert.equal(client.id, brokenClient.id)
27+
client.once('error', (err) => {
28+
client.on('error', (err) => {})
29+
done(err)
3330
cb()
3431
})
3532

@@ -57,18 +54,18 @@ suite.test('connection-level errors cause queued queries to fail', (cb) => {
5754
}
5855
}))
5956

60-
pool.once('error', assert.calls((err, brokenClient) => {
61-
assert.equal(client, brokenClient)
57+
client.once('error', assert.calls((err) => {
58+
client.on('error', (err) => {})
6259
}))
6360

6461
client.query('SELECT 1', assert.calls((err) => {
6562
if (helper.args.native) {
66-
assert.ok(err)
63+
assert.equal(err.message, 'terminating connection due to administrator command')
6764
} else {
6865
assert.equal(err.message, 'Connection terminated unexpectedly')
6966
}
7067

71-
done()
68+
done(err)
7269
pool.end()
7370
cb()
7471
}))
@@ -86,13 +83,16 @@ suite.test('connection-level errors cause future queries to fail', (cb) => {
8683
}
8784
}))
8885

89-
pool.once('error', assert.calls((err, brokenClient) => {
90-
assert.equal(client, brokenClient)
91-
86+
client.once('error', assert.calls((err) => {
87+
client.on('error', (err) => {})
9288
client.query('SELECT 1', assert.calls((err) => {
93-
assert.equal(err.message, 'Client has encountered a connection error and is not queryable')
89+
if (helper.args.native) {
90+
assert.equal(err.message, 'terminating connection due to administrator command')
91+
} else {
92+
assert.equal(err.message, 'Client has encountered a connection error and is not queryable')
93+
}
9494

95-
done()
95+
done(err)
9696
pool.end()
9797
cb()
9898
}))

Diff for: test/integration/gh-issues/130-tests.js

+8-6
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@ var exec = require('child_process').exec
55
helper.pg.defaults.poolIdleTimeout = 1000
66

77
const pool = new helper.pg.Pool()
8-
pool.connect(function (err, client) {
8+
pool.connect(function (err, client, done) {
9+
assert.ifError(err)
10+
client.once('error', function (err) {
11+
client.on('error', (err) => {})
12+
done(err)
13+
})
914
client.query('SELECT pg_backend_pid()', function (err, result) {
15+
assert.ifError(err)
1016
var pid = result.rows[0].pg_backend_pid
1117
var psql = 'psql'
1218
if (helper.args.host) psql = psql + ' -h ' + helper.args.host
1319
if (helper.args.port) psql = psql + ' -p ' + helper.args.port
1420
if (helper.args.user) psql = psql + ' -U ' + helper.args.user
1521
exec(psql + ' -c "select pg_terminate_backend(' + pid + ')" template1', assert.calls(function (error, stdout, stderr) {
16-
assert.isNull(error)
22+
assert.ifError(error)
1723
}))
1824
})
1925
})
20-
21-
pool.on('error', function (err, client) {
22-
// swallow errors
23-
})

0 commit comments

Comments
 (0)