From b8a316895fef015422df28906878a83b230b3610 Mon Sep 17 00:00:00 2001 From: Drazen Patekar Date: Mon, 8 Feb 2016 22:32:30 +0100 Subject: [PATCH 1/2] fixed unsubscribe handler exception --- lib/handlers/unsubscribe.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/handlers/unsubscribe.js b/lib/handlers/unsubscribe.js index bfaa7332..f99d0a1e 100644 --- a/lib/handlers/unsubscribe.js +++ b/lib/handlers/unsubscribe.js @@ -37,14 +37,16 @@ function actualUnsubscribe (client, packet, done) { function doUnsubscribe (sub, done) { var client = this.client var broker = client.broker - var func = client.subscriptions[sub].func - - delete client.subscriptions[sub] - - broker.unsubscribe( - sub, - func, - done) + if (client.subscriptions[sub]) { + var func = client.subscriptions[sub].func + delete client.subscriptions[sub] + broker.unsubscribe( + sub, + func, + done) + } else { + done() + } } function completeUnsubscribe (err) { From 81328f1747d7d5bff3307686615f45ea05199ae6 Mon Sep 17 00:00:00 2001 From: Drazen Patekar Date: Tue, 9 Feb 2016 12:54:06 +0100 Subject: [PATCH 2/2] Added unsubscribe unit test. --- test/basic.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/basic.js b/test/basic.js index c20e1a2c..d622db31 100644 --- a/test/basic.js +++ b/test/basic.js @@ -156,6 +156,29 @@ test('unsubscribe', function (t) { }) }) +test('unsubscribe without subscribe', function (t) { + t.plan(1) + + var s = noError(connect(setup()), t) + + s.inStream.write({ + cmd: 'unsubscribe', + messageId: 43, + unsubscriptions: ['hello'] + }) + + s.outStream.once('data', function (packet) { + t.deepEqual(packet, { + cmd: 'unsuback', + messageId: 43, + dup: false, + length: 2, + qos: 0, + retain: false + }, 'packet matches') + }) +}) + test('unsubscribe on disconnect', function (t) { var s = noError(connect(setup()), t)