diff --git a/lib/client.js b/lib/client.js index f1917ef1..7202f421 100644 --- a/lib/client.js +++ b/lib/client.js @@ -67,11 +67,16 @@ p.connect = function() { }); }; + p.pulseQueryQueue = function() { - if(this.readyForQuery===true && this.queryQueue.length > 0) { - this.readyForQuery = false; - var query = this.queryQueue.shift(); - query.submit(this.connection); + if(this.readyForQuery===true) { + if(this.queryQueue.length > 0) { + this.readyForQuery = false; + var query = this.queryQueue.shift(); + query.submit(this.connection); + } else { + this.emit('drain'); + } } }; diff --git a/test/unit/client/query-queue-tests.js b/test/unit/client/query-queue-tests.js new file mode 100644 index 00000000..29600b38 --- /dev/null +++ b/test/unit/client/query-queue-tests.js @@ -0,0 +1,49 @@ +var helper = require(__dirname + '/test-helper'); +var con = new Connection({stream: "NO"}); +var client = new Client({connection:con}); + + +con.connect = function() { + con.emit('connect'); +}; +con.query = function() { +}; +client.connect(); + +var raisedDrain = false; +client.on('drain', function() { + raisedDrain = true; +}); + +client.query("hello"); +client.query("sup"); +client.query('boom'); + +test("with pending queries", function() { + test("does not emit drain", function() { + assert.equal(raisedDrain, false); + }); +}); + +test("after some queries executed", function() { + con.emit('readyForQuery'); + test("does not emit drain", function() { + assert.equal(raisedDrain, false); + }); +}); + +test("when all queries are sent", function() { + con.emit('readyForQuery'); + con.emit('readyForQuery'); + test("does not emit drain", function() { + assert.equal(raisedDrain, false); + }); +}); + +test("after last query finishes", function() { + con.emit('readyForQuery'); + test("emits drain", function() { + assert.ok(raisedDrain); + }); +}); +