You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.7 KiB
157 lines
3.7 KiB
'use strict' |
|
|
|
var mqtt = require('..') |
|
var path = require('path') |
|
var abstractClientTests = require('./abstract_client') |
|
var fs = require('fs') |
|
var port = 9899 |
|
var KEY = path.join(__dirname, 'helpers', 'tls-key.pem') |
|
var CERT = path.join(__dirname, 'helpers', 'tls-cert.pem') |
|
var WRONG_CERT = path.join(__dirname, 'helpers', 'wrong-cert.pem') |
|
var Server = require('./server') |
|
|
|
var server = new Server.SecureServer({ |
|
key: fs.readFileSync(KEY), |
|
cert: fs.readFileSync(CERT) |
|
}, function (client) { |
|
client.on('connect', function (packet) { |
|
if (packet.clientId === 'invalid') { |
|
client.connack({returnCode: 2}) |
|
} else { |
|
server.emit('connect', client) |
|
client.connack({returnCode: 0}) |
|
} |
|
}) |
|
|
|
client.on('publish', function (packet) { |
|
setImmediate(function () { |
|
/* jshint -W027 */ |
|
/* eslint default-case:0 */ |
|
switch (packet.qos) { |
|
case 0: |
|
break |
|
case 1: |
|
client.puback(packet) |
|
break |
|
case 2: |
|
client.pubrec(packet) |
|
break |
|
} |
|
/* jshint +W027 */ |
|
}) |
|
}) |
|
|
|
client.on('pubrel', function (packet) { |
|
client.pubcomp(packet) |
|
}) |
|
|
|
client.on('pubrec', function (packet) { |
|
client.pubrel(packet) |
|
}) |
|
|
|
client.on('pubcomp', function () { |
|
// Nothing to be done |
|
}) |
|
|
|
client.on('subscribe', function (packet) { |
|
client.suback({ |
|
messageId: packet.messageId, |
|
granted: packet.subscriptions.map(function (e) { |
|
return e.qos |
|
}) |
|
}) |
|
}) |
|
|
|
client.on('unsubscribe', function (packet) { |
|
client.unsuback(packet) |
|
}) |
|
|
|
client.on('pingreq', function () { |
|
client.pingresp() |
|
}) |
|
}).listen(port) |
|
|
|
describe('MqttSecureClient', function () { |
|
var config = { protocol: 'mqtts', port: port, rejectUnauthorized: false } |
|
abstractClientTests(server, config) |
|
|
|
describe('with secure parameters', function () { |
|
it('should validate successfully the CA', function (done) { |
|
var client = mqtt.connect({ |
|
protocol: 'mqtts', |
|
port: port, |
|
ca: [fs.readFileSync(CERT)], |
|
rejectUnauthorized: true |
|
}) |
|
|
|
client.on('error', function (err) { |
|
done(err) |
|
}) |
|
|
|
server.once('connect', function () { |
|
done() |
|
}) |
|
}) |
|
|
|
it('should validate successfully the CA using URI', function (done) { |
|
var client = mqtt.connect('mqtts://localhost:' + port, { |
|
ca: [fs.readFileSync(CERT)], |
|
rejectUnauthorized: true |
|
}) |
|
|
|
client.on('error', function (err) { |
|
done(err) |
|
}) |
|
|
|
server.once('connect', function () { |
|
done() |
|
}) |
|
}) |
|
|
|
it('should validate successfully the CA using URI with path', function (done) { |
|
var client = mqtt.connect('mqtts://localhost:' + port + '/', { |
|
ca: [fs.readFileSync(CERT)], |
|
rejectUnauthorized: true |
|
}) |
|
|
|
client.on('error', function (err) { |
|
done(err) |
|
}) |
|
|
|
server.once('connect', function () { |
|
done() |
|
}) |
|
}) |
|
|
|
it('should validate unsuccessfully the CA', function (done) { |
|
var client = mqtt.connect({ |
|
protocol: 'mqtts', |
|
port: port, |
|
ca: [fs.readFileSync(WRONG_CERT)], |
|
rejectUnauthorized: true |
|
}) |
|
|
|
client.once('error', function () { |
|
done() |
|
client.end() |
|
client.on('error', function () {}) |
|
}) |
|
}) |
|
|
|
it('should emit close on TLS error', function (done) { |
|
var client = mqtt.connect({ |
|
protocol: 'mqtts', |
|
port: port, |
|
ca: [fs.readFileSync(WRONG_CERT)], |
|
rejectUnauthorized: true |
|
}) |
|
|
|
client.on('error', function () {}) |
|
|
|
// TODO node v0.8.x emits multiple close events |
|
client.once('close', function () { |
|
done() |
|
}) |
|
}) |
|
}) |
|
})
|
|
|