2018-09-04 07:13:34 +02:00
|
|
|
/**
|
|
|
|
* Copyright JS Foundation and other contributors, http://js.foundation
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
**/
|
|
|
|
|
|
|
|
var when = require('when');
|
|
|
|
var should = require("should");
|
|
|
|
var fs = require('fs-extra');
|
|
|
|
|
|
|
|
var helper = require("../../editor_helper");
|
|
|
|
var debugTab = require('../../pageobjects/editor/debugTab_page');
|
|
|
|
var workspace = require('../../pageobjects/editor/workspace_page');
|
|
|
|
var specUtil = require('../../pageobjects/util/spec_util_page');
|
|
|
|
var mqttConfig = require('../../pageobjects/nodes/core/io/10-mqttconfig_page.js');
|
|
|
|
|
|
|
|
var httpNodeRoot = "/api";
|
|
|
|
|
|
|
|
var mqttServer;
|
|
|
|
var mosca = require('mosca');
|
|
|
|
var moscaSettings = {
|
|
|
|
port: 1883,
|
|
|
|
persistence: {
|
|
|
|
// Needs for retaining messages.
|
|
|
|
factory: mosca.persistence.Memory
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// https://cookbook.nodered.org/
|
|
|
|
describe('cookbook', function() {
|
|
|
|
beforeEach(function() {
|
2018-10-23 07:01:23 +02:00
|
|
|
workspace.init();
|
2018-09-04 07:13:34 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
before(function() {
|
|
|
|
browser.call(function() {
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
mqttServer = new mosca.Server(moscaSettings, function() {
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
helper.startServer();
|
|
|
|
});
|
|
|
|
|
|
|
|
after(function() {
|
|
|
|
browser.call(function() {
|
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
|
mqttServer.close(function() {
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
helper.stopServer();
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('MQTT', function() {
|
|
|
|
it('Add an MQTT broker to prepare for UI test', function() {
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttOutNode = workspace.addNode("mqttOut");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
mqttOutNode.edit();
|
|
|
|
mqttConfig.edit();
|
|
|
|
mqttConfig.setServer("localhost");
|
|
|
|
mqttConfig.clickOk();
|
|
|
|
mqttOutNode.clickOk();
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Connect to an MQTT broker', function() {
|
|
|
|
var injectNode = workspace.addNode("inject");
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttOutNode = workspace.addNode("mqttOut");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttInNode = workspace.addNode("mqttIn", 0, 100);
|
|
|
|
var debugNode = workspace.addNode("debug");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
injectNode.edit();
|
|
|
|
injectNode.setPayload("num", 22);
|
|
|
|
injectNode.clickOk();
|
|
|
|
|
|
|
|
mqttOutNode.edit();
|
|
|
|
mqttOutNode.setTopic("sensors/livingroom/temp");
|
|
|
|
mqttOutNode.clickOk();
|
|
|
|
|
|
|
|
injectNode.connect(mqttOutNode);
|
|
|
|
|
|
|
|
mqttInNode.edit();
|
|
|
|
mqttInNode.setTopic("sensors/livingroom/temp");
|
|
|
|
mqttInNode.setQoS("2");
|
|
|
|
mqttInNode.clickOk();
|
|
|
|
|
|
|
|
mqttInNode.connect(debugNode);
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
|
|
|
|
debugTab.open();
|
|
|
|
debugTab.clearMessage();
|
|
|
|
injectNode.clickLeftButton();
|
|
|
|
debugTab.getMessage().should.eql('"22"');
|
|
|
|
});
|
|
|
|
|
|
|
|
// skip this case since it is same as other cases.
|
|
|
|
it.skip('Publish messages to a topic');
|
|
|
|
|
|
|
|
it('Set the topic of a published message', function() {
|
|
|
|
var injectNode = workspace.addNode("inject");
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttOutNode = workspace.addNode("mqttOut");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
injectNode.edit();
|
|
|
|
injectNode.setPayload("num", 22);
|
|
|
|
injectNode.setTopic("sensors/kitchen/temperature");
|
|
|
|
injectNode.clickOk();
|
|
|
|
|
|
|
|
mqttOutNode.edit();
|
|
|
|
mqttOutNode.clickOk();
|
|
|
|
|
|
|
|
injectNode.connect(mqttOutNode);
|
|
|
|
|
|
|
|
// The code for confirmation starts from here.
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttInNode = workspace.addNode("mqttIn", 0, 100);
|
|
|
|
var debugNode = workspace.addNode("debug");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
mqttInNode.edit();
|
|
|
|
mqttInNode.setTopic("sensors/kitchen/temperature");
|
|
|
|
mqttInNode.clickOk();
|
|
|
|
|
|
|
|
mqttInNode.connect(debugNode);
|
|
|
|
// The code for confirmation ends here.
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
|
|
|
|
debugTab.open();
|
|
|
|
debugTab.clearMessage();
|
|
|
|
injectNode.clickLeftButton();
|
|
|
|
debugTab.getMessage().should.eql('"22"');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('Publish a retained message to a topic', function() {
|
|
|
|
var injectNode = workspace.addNode("inject");
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttOutNode = workspace.addNode("mqttOut");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
injectNode.edit();
|
|
|
|
injectNode.setPayload("num", 22);
|
|
|
|
injectNode.clickOk();
|
|
|
|
|
|
|
|
mqttOutNode.edit();
|
|
|
|
mqttOutNode.setTopic("sensors/livingroom/temp");
|
|
|
|
mqttOutNode.setRetain("true");
|
|
|
|
mqttOutNode.clickOk();
|
|
|
|
|
|
|
|
injectNode.connect(mqttOutNode);
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
debugTab.open();
|
|
|
|
injectNode.clickLeftButton();
|
|
|
|
debugTab.clearMessage();
|
|
|
|
|
|
|
|
// The code for confirmation starts from here.
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttInNode = workspace.addNode("mqttIn", 0, 100);
|
|
|
|
var debugNode = workspace.addNode("debug");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
mqttInNode.edit();
|
|
|
|
mqttInNode.setTopic("sensors/livingroom/temp");
|
|
|
|
mqttInNode.clickOk();
|
|
|
|
|
|
|
|
mqttInNode.connect(debugNode);
|
|
|
|
// The code for confirmation ends here.
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
debugTab.open();
|
|
|
|
debugTab.getMessage().should.eql('"22"');
|
|
|
|
});
|
|
|
|
|
|
|
|
// skip this case since it is same as other cases.
|
|
|
|
it.skip('Subscribe to a topic');
|
|
|
|
|
|
|
|
it('Receive a parsed JSON message', function() {
|
|
|
|
var injectNode = workspace.addNode("inject");
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttOutNode = workspace.addNode("mqttOut");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
2018-10-23 07:01:23 +02:00
|
|
|
var mqttInNode = workspace.addNode("mqttIn", 0, 100);
|
|
|
|
var jsonNode = workspace.addNode("json");
|
|
|
|
var debugNode = workspace.addNode("debug");
|
2018-09-04 07:13:34 +02:00
|
|
|
|
|
|
|
injectNode.edit();
|
|
|
|
injectNode.setPayload("json", '{"sensor_id": 1234, "temperature": 13 }');
|
|
|
|
injectNode.clickOk();
|
|
|
|
|
|
|
|
mqttOutNode.edit();
|
|
|
|
mqttOutNode.setTopic("sensors/livingroom/temp");
|
|
|
|
mqttOutNode.clickOk();
|
|
|
|
|
|
|
|
injectNode.connect(mqttOutNode);
|
|
|
|
|
|
|
|
mqttInNode.edit();
|
|
|
|
mqttInNode.setTopic("sensors/#");
|
|
|
|
mqttInNode.setQoS("2");
|
|
|
|
mqttInNode.clickOk();
|
|
|
|
|
|
|
|
jsonNode.edit();
|
|
|
|
jsonNode.setProperty("payload");
|
|
|
|
jsonNode.clickOk();
|
|
|
|
|
|
|
|
mqttInNode.connect(jsonNode);
|
|
|
|
jsonNode.connect(debugNode);
|
|
|
|
|
|
|
|
workspace.deploy();
|
|
|
|
|
|
|
|
debugTab.open();
|
|
|
|
debugTab.clearMessage();
|
|
|
|
injectNode.clickLeftButton();
|
|
|
|
debugTab.getMessage().should.eql(['1234', '13']);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|