123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- 'use strict'
- var fs = require('fs')
- var path = require('path')
- var mqtt = require('../')
- describe('mqtt', function () {
- describe('#connect', function () {
- var sslOpts, sslOpts2
- it('should return an MqttClient when connect is called with mqtt:/ url', function () {
- var c = mqtt.connect('mqtt://localhost:1883')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- it('should throw an error when called with no protocol specified', function () {
- (function () {
- var c = mqtt.connect('foo.bar.com')
- c.end()
- }).should.throw('Missing protocol')
- })
- it('should throw an error when called with no protocol specified - with options', function () {
- (function () {
- var c = mqtt.connect('tcp://foo.bar.com', { protocol: null })
- c.end()
- }).should.throw('Missing protocol')
- })
- it('should return an MqttClient with username option set', function () {
- var c = mqtt.connect('mqtt://user:pass@localhost:1883')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('username', 'user')
- c.options.should.have.property('password', 'pass')
- c.end()
- })
- it('should return an MqttClient with username and password options set', function () {
- var c = mqtt.connect('mqtt://user@localhost:1883')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('username', 'user')
- c.end()
- })
- it('should return an MqttClient with the clientid with random value', function () {
- var c = mqtt.connect('mqtt://user@localhost:1883')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId')
- c.end()
- })
- it('should return an MqttClient with the clientid with empty string', function () {
- var c = mqtt.connect('mqtt://user@localhost:1883?clientId=')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId', '')
- c.end()
- })
- it('should return an MqttClient with the clientid option set', function () {
- var c = mqtt.connect('mqtt://user@localhost:1883?clientId=123')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId', '123')
- c.end()
- })
- it('should return an MqttClient when connect is called with tcp:/ url', function () {
- var c = mqtt.connect('tcp://localhost')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- it('should return an MqttClient with correct host when called with a host and port', function () {
- var c = mqtt.connect('tcp://user:pass@localhost:1883')
- c.options.should.have.property('hostname', 'localhost')
- c.options.should.have.property('port', 1883)
- c.end()
- })
- sslOpts = {
- keyPath: path.join(__dirname, 'helpers', 'private-key.pem'),
- certPath: path.join(__dirname, 'helpers', 'public-cert.pem'),
- caPaths: [path.join(__dirname, 'helpers', 'public-cert.pem')]
- }
- it('should return an MqttClient when connect is called with mqtts:/ url', function () {
- var c = mqtt.connect('mqtts://localhost', sslOpts)
- c.options.should.have.property('protocol', 'mqtts')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- it('should return an MqttClient when connect is called with ssl:/ url', function () {
- var c = mqtt.connect('ssl://localhost', sslOpts)
- c.options.should.have.property('protocol', 'ssl')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- it('should return an MqttClient when connect is called with ws:/ url', function () {
- var c = mqtt.connect('ws://localhost', sslOpts)
- c.options.should.have.property('protocol', 'ws')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- it('should return an MqttClient when connect is called with wss:/ url', function () {
- var c = mqtt.connect('wss://localhost', sslOpts)
- c.options.should.have.property('protocol', 'wss')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- c.end()
- })
- sslOpts2 = {
- key: fs.readFileSync(path.join(__dirname, 'helpers', 'private-key.pem')),
- cert: fs.readFileSync(path.join(__dirname, 'helpers', 'public-cert.pem')),
- ca: [fs.readFileSync(path.join(__dirname, 'helpers', 'public-cert.pem'))]
- }
- it('should throw an error when it is called with cert and key set but no protocol specified', function () {
- // to do rewrite wrap function
- (function () {
- var c = mqtt.connect(sslOpts2)
- c.end()
- }).should.throw('Missing secure protocol key')
- })
- it('should throw an error when it is called with cert and key set and protocol other than allowed: mqtt,mqtts,ws,wss,wxs', function () {
- (function () {
- sslOpts2.protocol = 'UNKNOWNPROTOCOL'
- var c = mqtt.connect(sslOpts2)
- c.end()
- }).should.throw()
- })
- it('should return a MqttClient with mqtts set when connect is called key and cert set and protocol mqtt', function () {
- sslOpts2.protocol = 'mqtt'
- var c = mqtt.connect(sslOpts2)
- c.options.should.have.property('protocol', 'mqtts')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- })
- it('should return a MqttClient with mqtts set when connect is called key and cert set and protocol mqtts', function () {
- sslOpts2.protocol = 'mqtts'
- var c = mqtt.connect(sslOpts2)
- c.options.should.have.property('protocol', 'mqtts')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- })
- it('should return a MqttClient with wss set when connect is called key and cert set and protocol ws', function () {
- sslOpts2.protocol = 'ws'
- var c = mqtt.connect(sslOpts2)
- c.options.should.have.property('protocol', 'wss')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- })
- it('should return a MqttClient with wss set when connect is called key and cert set and protocol wss', function () {
- sslOpts2.protocol = 'wss'
- var c = mqtt.connect(sslOpts2)
- c.options.should.have.property('protocol', 'wss')
- c.on('error', function () {})
- c.should.be.instanceOf(mqtt.MqttClient)
- })
- it('should return an MqttClient with the clientid with option of clientId as empty string', function () {
- var c = mqtt.connect('mqtt://localhost:1883', {
- clientId: ''
- })
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId', '')
- })
- it('should return an MqttClient with the clientid with option of clientId empty', function () {
- var c = mqtt.connect('mqtt://localhost:1883')
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId')
- c.end()
- })
- it('should return an MqttClient with the clientid with option of with specific clientId', function () {
- var c = mqtt.connect('mqtt://localhost:1883', {
- clientId: '123'
- })
- c.should.be.instanceOf(mqtt.MqttClient)
- c.options.should.have.property('clientId', '123')
- c.end()
- })
- })
- })
|