Fixes an event handler leak.

Includes a test. Also includes async as a devDependency.
This commit is contained in:
Dan Robinson
2014-03-28 01:17:05 -07:00
parent 22da85448e
commit d649905dbb
3 changed files with 49 additions and 16 deletions

View File

@@ -1,20 +1,21 @@
var assert = require('assert')
var gonna = require('gonna')
var concat = require('concat-stream')
var _ = require('lodash')
var async = require('async')
var concat = require('concat-stream')
var pg = require('pg.js')
var copy = require('../').to
var client = function() {
var client = new pg.Client()
client.connect()
return client
}
var testRange = function(top) {
var client = function() {
var client = new pg.Client()
client.connect()
return client
}
var fromClient = client()
var copy = require('../').to
var txt = 'COPY (SELECT * from generate_series(0, ' + (top - 1) + ')) TO STDOUT'
var stream = fromClient.query(copy(txt))
@@ -32,3 +33,27 @@ var testRange = function(top) {
}
testRange(10000)
var testLeak = function(rounds) {
var fromClient = client()
var txt = 'COPY (SELECT 10) TO STDOUT'
var runStream = function(num, callback) {
var stream = fromClient.query(copy(txt))
stream.on('data', function(data) {
// Just throw away the data.
})
stream.on('end', callback)
stream.on('error', callback)
}
async.timesSeries(rounds, runStream, function(err) {
assert.equal(err, null)
assert.equal(fromClient.connection.stream.listeners('data').length, 1)
assert.equal(fromClient.connection.stream.listeners('end').length, 2)
assert.equal(fromClient.connection.stream.listeners('close').length, 0)
fromClient.end()
})
}
testLeak(5)