diff --git a/test/nodes/core/network/21-mqtt_spec.js b/test/nodes/core/network/21-mqtt_spec.js index 655cc9c73..44154a802 100644 --- a/test/nodes/core/network/21-mqtt_spec.js +++ b/test/nodes/core/network/21-mqtt_spec.js @@ -27,7 +27,7 @@ describe('MQTT Nodes', function () { } catch (error) { } }); - it('should be loaded and have default values', function (done) { + it('should be loaded and have default values (MQTT V4)', function (done) { this.timeout = 2000; const { flow, nodes } = buildBasicMQTTSendRecvFlow({ id: "mqtt.broker", name: "mqtt_broker", autoConnect: false }, { id: "mqtt.in", topic: "in_topic" }, { id: "mqtt.out", topic: "out_topic" }); helper.load(mqttNodes, flow, function () { @@ -61,6 +61,52 @@ describe('MQTT Nodes', function () { mqttBroker.options.clientId.should.containEql('nodered_'); mqttBroker.options.should.have.property('keepalive').type("number"); mqttBroker.options.should.have.property('reconnectPeriod').type("number"); + //as this is not a v5 connection, ensure v5 properties are not present + mqttBroker.options.should.not.have.property('protocolVersion', 5); + mqttBroker.options.should.not.have.property('properties'); + done(); + } catch (error) { + done(error) + } + }); + }); + it('should be loaded and have default values (MQTT V5)', function (done) { + this.timeout = 2000; + const { flow, nodes } = buildBasicMQTTSendRecvFlow({ id: "mqtt.broker", name: "mqtt_broker", autoConnect: false, cleansession: false, clientid: 'clientid', keepalive: 35, sessionExpiry: '6000', protocolVersion: '5', userProps: {"prop": "val"}}, { id: "mqtt.in", topic: "in_topic" }, { id: "mqtt.out", topic: "out_topic" }); + helper.load(mqttNodes, flow, function () { + try { + const mqttIn = helper.getNode("mqtt.in"); + const mqttOut = helper.getNode("mqtt.out"); + const mqttBroker = helper.getNode("mqtt.broker"); + + should(mqttIn).be.type("object", "mqtt in node should be an object") + mqttIn.should.have.property('broker', nodes.mqtt_broker.id); //should be the id of the broker node + mqttIn.should.have.property('datatype', 'utf8'); //default: 'utf8' + mqttIn.should.have.property('isDynamic', false); //default: false + mqttIn.should.have.property('inputs', 0); //default: 0 + mqttIn.should.have.property('qos', 2); //default: 2 + mqttIn.should.have.property('topic', "in_topic"); + mqttIn.should.have.property('wires', [["helper.node"]]); + + should(mqttOut).be.type("object", "mqtt out node should be an object") + mqttOut.should.have.property('broker', nodes.mqtt_broker.id); //should be the id of the broker node + mqttOut.should.have.property('topic', "out_topic"); + + should(mqttBroker).be.type("object", "mqtt broker node should be an object") + mqttBroker.should.have.property('broker', BROKER_HOST); + mqttBroker.should.have.property('port', BROKER_PORT); + mqttBroker.should.have.property('brokerurl'); + // mqttBroker.should.have.property('autoUnsubscribe', true);//default: true + mqttBroker.should.have.property('autoConnect', false);//Set "autoConnect:false" in brokerOptions + mqttBroker.should.have.property('options'); + mqttBroker.options.should.have.property('clean', false); + mqttBroker.options.should.have.property('clientId', 'clientid'); + mqttBroker.options.should.have.property('keepalive').type("number", 35); + mqttBroker.options.should.have.property('reconnectPeriod').type("number"); + //as this IS a v5 connection, ensure v5 properties are not present + mqttBroker.options.should.have.property('protocolVersion', 5); + mqttBroker.options.should.have.property('properties'); + mqttBroker.options.properties.should.have.property('sessionExpiryInterval'); done(); } catch (error) { done(error) @@ -666,6 +712,7 @@ function buildMQTTBrokerNode(id, name, brokerHost, brokerPort, options) { node.cleansession = String(options.cleansession) == "false" ? false : true; node.autoUnsubscribe = String(options.autoUnsubscribe) == "false" ? false : true; node.autoConnect = String(options.autoConnect) == "false" ? false : true; + node.sessionExpiry = options.sessionExpiry ? options.sessionExpiry : undefined; if (options.birthTopic) { node.birthTopic = options.birthTopic;