From aa645ce47af249f2c6959682a1fdabff38652136 Mon Sep 17 00:00:00 2001 From: Stefan Lau Date: Sun, 18 May 2014 11:21:28 +0200 Subject: [PATCH] #50: Try to close connections correctly --- lib/modules/miners/bfgminer.js | 3 +++ test/specs/lib/modules/miners/bfgminerSpec.js | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/modules/miners/bfgminer.js b/lib/modules/miners/bfgminer.js index 171750e..89c312b 100644 --- a/lib/modules/miners/bfgminer.js +++ b/lib/modules/miners/bfgminer.js @@ -75,6 +75,7 @@ module.exports = Module.extend({ host: self.config.host, port: self.config.port }, function () { + socket.setTimeout(30000); socket.on('data', function (rawData) { data += rawData.toString(); }); @@ -82,6 +83,7 @@ module.exports = Module.extend({ socket.removeAllListeners(); if (!errored) { try { + socket.end(); resolve(JSON.parse(data.replace('\x00', ''))); } catch (e) { reject(e); @@ -96,6 +98,7 @@ module.exports = Module.extend({ socket.on('error', function (err) { socket.removeAllListeners(); + socket.destroy(); errored = true; reject(err); }); diff --git a/test/specs/lib/modules/miners/bfgminerSpec.js b/test/specs/lib/modules/miners/bfgminerSpec.js index a3c347e..b0e94cf 100644 --- a/test/specs/lib/modules/miners/bfgminerSpec.js +++ b/test/specs/lib/modules/miners/bfgminerSpec.js @@ -207,6 +207,9 @@ describe('modules/miners/bfgminer', function () { netEmitter.options = options; + netEmitter.destroy = sinon.stub(); + netEmitter.end = sinon.stub(); + netEmitter.setTimeout = sinon.stub(); netEmitter.write = function (written) { var packet1, packet2; @@ -252,13 +255,16 @@ describe('modules/miners/bfgminer', function () { { config: config }, 'some command', 'some parameters' - )).to.eventually.deep.equal(response).notify(function () { + )).to.eventually.deep.equal(response).notify(function (e) { expect(netEmitter.options).to.deep.equal(config); expect(netEmitter.written).to.deep.equal({ command: 'some command', parameter: 'some parameters' }); - done(); + expect(netEmitter.setTimeout).to.have.been.calledOnce; + expect(netEmitter.setTimeout).to.have.been.calledWith(30000); + expect(netEmitter.end).to.have.been.calledOnce; + done(e); }); }); @@ -267,7 +273,10 @@ describe('modules/miners/bfgminer', function () { expect(BfgAdapter.prototype.sendCommand.call({ config: config - }, 'some command')).to.be.rejectedWith('Unexpected token I').notify(done); + }, 'some command')).to.be.rejectedWith('Unexpected token I').notify(function (e) { + expect(netEmitter.end).to.have.been.calledOnce; + done(e); + }); }); it('should callback with an error when an error occurs on connection', function (done) { @@ -275,7 +284,10 @@ describe('modules/miners/bfgminer', function () { expect(BfgAdapter.prototype.sendCommand.call({ config: config - }, 'some command')).to.be.rejectedWith('Error on connection').notify(done); + }, 'some command')).to.be.rejectedWith('Error on connection').notify(function (e) { + expect(netEmitter.destroy).to.have.been.calledOnce; + done(e); + }); }); it('should callback with an error when an error occurs on transmission', function (done) { @@ -283,7 +295,10 @@ describe('modules/miners/bfgminer', function () { expect(BfgAdapter.prototype.sendCommand.call({ config: config - }, 'some command')).to.be.rejectedWith('Error on transmission').notify(done); + }, 'some command')).to.be.rejectedWith('Error on transmission').notify(function (e) { + expect(netEmitter.destroy).to.have.been.calledOnce; + done(e); + }); }); });