mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Move exec and events components to util module
The exec and events components are common components that are used by both runtime and registry. It makes sense to move them into the util package. This also adds some docs to the registry module
This commit is contained in:
@@ -25,6 +25,7 @@ var NR_TEST_UTILS = require("nr-test-utils");
|
||||
var installer = NR_TEST_UTILS.require("@node-red/registry/lib/installer");
|
||||
var registry = NR_TEST_UTILS.require("@node-red/registry/lib/index");
|
||||
var typeRegistry = NR_TEST_UTILS.require("@node-red/registry/lib/registry");
|
||||
const { events, exec, log } = NR_TEST_UTILS.require("@node-red/util");
|
||||
|
||||
describe('nodes/registry/installer', function() {
|
||||
|
||||
@@ -38,21 +39,15 @@ describe('nodes/registry/installer', function() {
|
||||
_: function(msg) { return msg }
|
||||
}
|
||||
|
||||
var execResponse;
|
||||
|
||||
beforeEach(function() {
|
||||
installer.init({log:mockLog, settings:{}, events: new EventEmitter(), exec: {
|
||||
run: function() {
|
||||
return Promise.resolve("");
|
||||
}
|
||||
}});
|
||||
sinon.stub(exec,"run", () => execResponse || Promise.resolve(""))
|
||||
installer.init({})
|
||||
});
|
||||
function initInstaller(execResult) {
|
||||
installer.init({log:mockLog, settings:{}, events: new EventEmitter(), exec: {
|
||||
run: function() {
|
||||
return execResult;
|
||||
}
|
||||
}});
|
||||
}
|
||||
|
||||
afterEach(function() {
|
||||
execResponse = null;
|
||||
if (registry.addModule.restore) {
|
||||
registry.addModule.restore();
|
||||
}
|
||||
@@ -72,7 +67,7 @@ describe('nodes/registry/installer', function() {
|
||||
if (fs.statSync.restore) {
|
||||
fs.statSync.restore();
|
||||
}
|
||||
|
||||
exec.run.restore();
|
||||
});
|
||||
|
||||
describe("installs module", function() {
|
||||
@@ -108,7 +103,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.reject(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
installer.installModule("this_wont_exist").catch(function(err) {
|
||||
err.should.have.property("code",404);
|
||||
done();
|
||||
@@ -122,7 +117,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.reject(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
sinon.stub(typeRegistry,"getModuleInfo", function() {
|
||||
return {
|
||||
version: "0.1.1"
|
||||
@@ -163,7 +158,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.reject(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
installer.installModule("this_wont_exist").then(function() {
|
||||
done(new Error("Unexpected success"));
|
||||
}).catch(err => {
|
||||
@@ -181,7 +176,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.resolve(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
|
||||
var addModule = sinon.stub(registry,"addModule",function(md) {
|
||||
return Promise.resolve(nodeInfo);
|
||||
@@ -226,7 +221,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.resolve(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
installer.installModule(resourcesDir).then(function(info) {
|
||||
info.should.eql(nodeInfo);
|
||||
done();
|
||||
@@ -242,7 +237,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.resolve(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
|
||||
var addModule = sinon.stub(registry,"addModule",function(md) {
|
||||
return Promise.resolve(nodeInfo);
|
||||
@@ -280,7 +275,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.reject(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
|
||||
installer.uninstallModule("this_wont_exist").then(function() {
|
||||
done(new Error("Unexpected success"));
|
||||
@@ -304,7 +299,7 @@ describe('nodes/registry/installer', function() {
|
||||
}
|
||||
var p = Promise.resolve(res);
|
||||
p.catch((err)=>{});
|
||||
initInstaller(p)
|
||||
execResponse = p;
|
||||
|
||||
sinon.stub(fs,"statSync", function(fn) { return {}; });
|
||||
|
||||
|
@@ -53,7 +53,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
}
|
||||
describe("#getNodeFiles",function() {
|
||||
it("Finds all the node files in the resources tree",function(done) {
|
||||
localfilesystem.init({settings:{coreNodesDir:resourcesDir}});
|
||||
localfilesystem.init({coreNodesDir:resourcesDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -68,7 +68,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
done();
|
||||
});
|
||||
it("Includes node files from settings",function(done) {
|
||||
localfilesystem.init({settings:{nodesIncludes:['TestNode1.js'],coreNodesDir:resourcesDir}});
|
||||
localfilesystem.init({nodesIncludes:['TestNode1.js'],coreNodesDir:resourcesDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -78,7 +78,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
done();
|
||||
});
|
||||
it("Excludes node files from settings",function(done) {
|
||||
localfilesystem.init({settings:{nodesExcludes:['TestNode1.js'],coreNodesDir:resourcesDir}});
|
||||
localfilesystem.init({nodesExcludes:['TestNode1.js'],coreNodesDir:resourcesDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -88,7 +88,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
done();
|
||||
});
|
||||
it("Finds nodes in userDir/nodes",function(done) {
|
||||
localfilesystem.init({settings:{userDir:userDir}});
|
||||
localfilesystem.init({userDir:userDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -99,7 +99,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
});
|
||||
|
||||
it("Finds nodes in settings.nodesDir (string)",function(done) {
|
||||
localfilesystem.init({settings:{nodesDir:userDir}});
|
||||
localfilesystem.init({nodesDir:userDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -110,7 +110,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
});
|
||||
it("Finds nodes in settings.nodesDir (string,relative path)",function(done) {
|
||||
var relativeUserDir = path.join("test","unit","@node-red","registry","lib","resources","userDir");
|
||||
localfilesystem.init({settings:{nodesDir:relativeUserDir}});
|
||||
localfilesystem.init({nodesDir:relativeUserDir});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -120,7 +120,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
done();
|
||||
});
|
||||
it("Finds nodes in settings.nodesDir (array)",function(done) {
|
||||
localfilesystem.init({settings:{nodesDir:[userDir]}});
|
||||
localfilesystem.init({nodesDir:[userDir]});
|
||||
var nodeList = localfilesystem.getNodeFiles(true);
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -139,7 +139,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
}
|
||||
return _join.apply(null,arguments);
|
||||
}));
|
||||
localfilesystem.init({settings:{coreNodesDir:moduleDir}});
|
||||
localfilesystem.init({coreNodesDir:moduleDir});
|
||||
var nodeList = localfilesystem.getNodeFiles();
|
||||
nodeList.should.have.a.property("node-red");
|
||||
var nm = nodeList['node-red'];
|
||||
@@ -175,18 +175,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
it("scans icon files in the resources tree",function(done) {
|
||||
var count = 0;
|
||||
localfilesystem.init({
|
||||
|
||||
// events:{emit:function(eventName,dir){
|
||||
// if (count === 0) {
|
||||
// eventName.should.equal("node-icon-dir");
|
||||
// dir.name.should.equal("node-red");
|
||||
// dir.icons.should.be.an.Array();
|
||||
// count = 1;
|
||||
// } else if (count === 1) {
|
||||
// done();
|
||||
// }
|
||||
// }},
|
||||
settings:{coreNodesDir:resourcesDir}
|
||||
coreNodesDir: resourcesDir
|
||||
});
|
||||
var list = localfilesystem.getNodeFiles(true);
|
||||
list.should.have.property("node-red");
|
||||
@@ -201,22 +190,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
it("scans icons dir in library",function(done) {
|
||||
var count = 0;
|
||||
localfilesystem.init({
|
||||
//
|
||||
// events:{emit:function(eventName,dir){
|
||||
// eventName.should.equal("node-icon-dir");
|
||||
// if (count === 0) {
|
||||
// dir.name.should.equal("node-red");
|
||||
// dir.icons.should.be.an.Array();
|
||||
// count = 1;
|
||||
// } else if (count === 1) {
|
||||
// dir.name.should.equal("Library");
|
||||
// dir.icons.should.be.an.Array();
|
||||
// dir.icons.length.should.equal(1);
|
||||
// dir.icons[0].should.be.equal("test_icon.png");
|
||||
// done();
|
||||
// }
|
||||
// }},
|
||||
settings:{userDir:userDir}
|
||||
userDir: userDir
|
||||
});
|
||||
var list = localfilesystem.getNodeFiles(true);
|
||||
list.should.have.property("node-red");
|
||||
@@ -240,7 +214,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
}
|
||||
return _join.apply(null,arguments);
|
||||
}));
|
||||
localfilesystem.init({settings:{coreNodesDir:moduleDir}});
|
||||
localfilesystem.init({coreNodesDir:moduleDir});
|
||||
var nodeModule = localfilesystem.getModuleFiles('TestNodeModule');
|
||||
nodeModule.should.have.a.property('TestNodeModule');
|
||||
nodeModule['TestNodeModule'].should.have.a.property('name','TestNodeModule');
|
||||
@@ -266,7 +240,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
}
|
||||
return _join.apply(null,arguments);
|
||||
}));
|
||||
localfilesystem.init({settings:{coreNodesDir:moduleDir}});
|
||||
localfilesystem.init({coreNodesDir:moduleDir});
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
localfilesystem.getModuleFiles('WontExistModule');
|
||||
@@ -286,14 +260,7 @@ describe("red/nodes/registry/localfilesystem",function() {
|
||||
return _join.apply(null,arguments);
|
||||
}));
|
||||
localfilesystem.init({
|
||||
|
||||
// events:{emit:function(eventName,dir){
|
||||
// eventName.should.equal("node-icon-dir");
|
||||
// dir.name.should.equal("TestNodeModule");
|
||||
// dir.icons.should.be.an.Array();
|
||||
// done();
|
||||
// }},
|
||||
settings:{coreNodesDir:moduleDir}
|
||||
coreNodesDir: moduleDir
|
||||
});
|
||||
var nodeModule = localfilesystem.getModuleFiles('TestNodeModule');
|
||||
nodeModule.should.have.property("TestNodeModule");
|
||||
|
@@ -21,9 +21,7 @@ var path = require("path");
|
||||
var NR_TEST_UTILS = require("nr-test-utils");
|
||||
|
||||
var typeRegistry = NR_TEST_UTILS.require("@node-red/registry/lib/registry");
|
||||
var EventEmitter = require('events');
|
||||
|
||||
var events = new EventEmitter();
|
||||
const { events } = NR_TEST_UTILS.require("@node-red/util");
|
||||
|
||||
describe("red/nodes/registry/registry",function() {
|
||||
|
||||
@@ -84,7 +82,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
describe('#init/load', function() {
|
||||
it('loads initial config', function(done) {
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null,events);
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null);
|
||||
typeRegistry.getNodeList().should.have.lengthOf(0);
|
||||
typeRegistry.load();
|
||||
typeRegistry.getNodeList().should.have.lengthOf(1);
|
||||
@@ -121,7 +119,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
}}
|
||||
};
|
||||
var expected = JSON.parse('{"node-red":{"name":"node-red","nodes":{"sentiment":{"name":"sentiment","types":["sentiment"],"enabled":true,"module":"node-red"},"inject":{"name":"inject","types":["inject"],"enabled":true,"module":"node-red"}}},"testModule":{"name":"testModule","nodes":{"a-module.js":{"name":"a-module.js","types":["example"],"enabled":true,"module":"testModule"}}}}');
|
||||
typeRegistry.init(legacySettings,null,events);
|
||||
typeRegistry.init(legacySettings,null);
|
||||
typeRegistry.load();
|
||||
legacySettings.set.calledOnce.should.be.true();
|
||||
legacySettings.set.args[0][1].should.eql(expected);
|
||||
@@ -133,7 +131,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
describe.skip('#addNodeSet', function() {
|
||||
it('adds a node set for an unknown module', function() {
|
||||
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
|
||||
typeRegistry.getNodeList().should.have.lengthOf(0);
|
||||
typeRegistry.getModuleList().should.eql({});
|
||||
@@ -162,7 +160,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
it('adds a node set to an existing module', function() {
|
||||
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
typeRegistry.getNodeList().should.have.lengthOf(0);
|
||||
typeRegistry.getModuleList().should.eql({});
|
||||
|
||||
@@ -191,7 +189,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
|
||||
it('doesnt add node set types if node set has an error', function() {
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
typeRegistry.getNodeList().should.have.lengthOf(0);
|
||||
typeRegistry.getModuleList().should.eql({});
|
||||
|
||||
@@ -207,7 +205,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
|
||||
it('doesnt add node set if type already exists', function() {
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
typeRegistry.getNodeList().should.have.lengthOf(0);
|
||||
typeRegistry.getModuleList().should.eql({});
|
||||
|
||||
@@ -241,7 +239,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
describe("#enableNodeSet", function() {
|
||||
it('throws error if settings unavailable', function() {
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.enableNodeSet("test-module/test-name");
|
||||
@@ -249,7 +247,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
|
||||
it('throws error if module unknown', function() {
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null,events);
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.enableNodeSet("test-module/unknown");
|
||||
@@ -260,7 +258,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
describe("#disableNodeSet", function() {
|
||||
it('throws error if settings unavailable', function() {
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.disableNodeSet("test-module/test-name");
|
||||
@@ -268,7 +266,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
|
||||
it('throws error if module unknown', function() {
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null,events);
|
||||
typeRegistry.init(settingsWithStorageAndInitialConfig,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.disableNodeSet("test-module/unknown");
|
||||
@@ -279,7 +277,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
describe('#getNodeConfig', function() {
|
||||
it('returns nothing for an unregistered type config', function(done) {
|
||||
typeRegistry.init(settings,null,events);
|
||||
typeRegistry.init(settings,null);
|
||||
var config = typeRegistry.getNodeConfig("imaginary-shark");
|
||||
(config === null).should.be.true();
|
||||
done();
|
||||
@@ -288,7 +286,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
describe('#saveNodeList',function() {
|
||||
it('rejects when settings unavailable',function(done) {
|
||||
typeRegistry.init(stubSettings({},false,{}),null,events);
|
||||
typeRegistry.init(stubSettings({},false,{}),null);
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {"test-name":{module:"test-module",name:"test-name",types:[]}}});
|
||||
typeRegistry.saveNodeList().catch(function(err) {
|
||||
done();
|
||||
@@ -296,7 +294,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
it('saves the list',function(done) {
|
||||
var s = stubSettings({},true,{});
|
||||
typeRegistry.init(s,null,events);
|
||||
typeRegistry.init(s,null);
|
||||
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":testNodeSet1,
|
||||
@@ -325,7 +323,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
describe('#removeModule',function() {
|
||||
it('throws error for unknown module', function() {
|
||||
var s = stubSettings({},true,{});
|
||||
typeRegistry.init(s,null,events);
|
||||
typeRegistry.init(s,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.removeModule("test-module/unknown");
|
||||
@@ -333,7 +331,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
it('throws error for unavaiable settings', function() {
|
||||
var s = stubSettings({},false,{});
|
||||
typeRegistry.init(s,null,events);
|
||||
typeRegistry.init(s,null);
|
||||
/*jshint immed: false */
|
||||
(function(){
|
||||
typeRegistry.removeModule("test-module/unknown");
|
||||
@@ -341,7 +339,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
it('removes a known module', function() {
|
||||
var s = stubSettings({},true,{});
|
||||
typeRegistry.init(s,null,events);
|
||||
typeRegistry.init(s,null);
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":testNodeSet1
|
||||
}});
|
||||
@@ -360,7 +358,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
it('returns node config', function() {
|
||||
typeRegistry.init(settings,{
|
||||
getNodeHelp: function(config) { return "HE"+config.name+"LP" }
|
||||
},events);
|
||||
});
|
||||
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
@@ -389,7 +387,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
describe('#getModuleInfo', function() {
|
||||
it('returns module info', function() {
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
@@ -413,7 +411,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
describe('#getNodeInfo', function() {
|
||||
it('returns node info', function() {
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
@@ -434,7 +432,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
describe('#getFullNodeInfo', function() {
|
||||
it('returns node info', function() {
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
@@ -459,7 +457,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
});
|
||||
describe('#getNodeList', function() {
|
||||
it("returns a filtered list", function() {
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
@@ -526,7 +524,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
it('returns a registered icon' , function() {
|
||||
var testIcon = path.resolve(__dirname+'/resources/userDir/lib/icons/');
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
@@ -558,7 +556,7 @@ describe("red/nodes/registry/registry",function() {
|
||||
|
||||
it('returns an icon list of registered node module', function() {
|
||||
var testIcon = path.resolve(__dirname+'/resources/userDir/lib/icons/');
|
||||
typeRegistry.init(settings,{},events);
|
||||
typeRegistry.init(settings,{});
|
||||
typeRegistry.addModule({name: "test-module",version:"0.0.1",nodes: {
|
||||
"test-name":{
|
||||
id: "test-module/test-name",
|
||||
|
@@ -19,6 +19,7 @@ var sinon = require("sinon");
|
||||
|
||||
var NR_TEST_UTILS = require("nr-test-utils");
|
||||
var comms = NR_TEST_UTILS.require("@node-red/runtime/lib/api/comms");
|
||||
var events = NR_TEST_UTILS.require("@node-red/util/lib/events");
|
||||
|
||||
describe("runtime-api/comms", function() {
|
||||
describe("listens for events", function() {
|
||||
@@ -30,21 +31,19 @@ describe("runtime-api/comms", function() {
|
||||
}
|
||||
var eventHandlers = {};
|
||||
before(function(done) {
|
||||
sinon.stub(events,"removeListener", function() {})
|
||||
sinon.stub(events,"on", function(evt,handler) { eventHandlers[evt] = handler })
|
||||
comms.init({
|
||||
log: {
|
||||
trace: function(){}
|
||||
},
|
||||
events: {
|
||||
removeListener: function() {},
|
||||
on: function(evt,handler) {
|
||||
eventHandlers[evt] = handler;
|
||||
}
|
||||
}
|
||||
})
|
||||
comms.addConnection({client: clientConnection}).then(done);
|
||||
})
|
||||
after(function(done) {
|
||||
comms.removeConnection({client: clientConnection}).then(done);
|
||||
events.removeListener.restore();
|
||||
events.on.restore();
|
||||
})
|
||||
afterEach(function() {
|
||||
messages = [];
|
||||
@@ -98,18 +97,18 @@ describe("runtime-api/comms", function() {
|
||||
}
|
||||
}
|
||||
before(function() {
|
||||
sinon.stub(events,"removeListener", function() {})
|
||||
sinon.stub(events,"on", function(evt,handler) { eventHandlers[evt] = handler })
|
||||
comms.init({
|
||||
log: {
|
||||
trace: function(){}
|
||||
},
|
||||
events: {
|
||||
removeListener: function() {},
|
||||
on: function(evt,handler) {
|
||||
eventHandlers[evt] = handler;
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
after(function() {
|
||||
events.removeListener.restore();
|
||||
events.on.restore();
|
||||
})
|
||||
afterEach(function(done) {
|
||||
comms.removeConnection({client: clientConnection1}).then(function() {
|
||||
comms.removeConnection({client: clientConnection2}).then(done);
|
||||
@@ -178,18 +177,18 @@ describe("runtime-api/comms", function() {
|
||||
}
|
||||
var eventHandlers = {};
|
||||
before(function() {
|
||||
sinon.stub(events,"removeListener", function() {})
|
||||
sinon.stub(events,"on", function(evt,handler) { eventHandlers[evt] = handler })
|
||||
comms.init({
|
||||
log: {
|
||||
trace: function(){}
|
||||
},
|
||||
events: {
|
||||
removeListener: function() {},
|
||||
on: function(evt,handler) {
|
||||
eventHandlers[evt] = handler;
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
after(function() {
|
||||
events.removeListener.restore();
|
||||
events.on.restore();
|
||||
})
|
||||
afterEach(function(done) {
|
||||
messages = [];
|
||||
comms.removeConnection({client: clientConnection}).then(done);
|
||||
|
@@ -22,7 +22,7 @@ var NR_TEST_UTILS = require("nr-test-utils");
|
||||
var flows = NR_TEST_UTILS.require("@node-red/runtime/lib/flows");
|
||||
var RedNode = NR_TEST_UTILS.require("@node-red/runtime/lib/nodes/Node");
|
||||
var RED = NR_TEST_UTILS.require("@node-red/runtime/lib/nodes");
|
||||
var events = NR_TEST_UTILS.require("@node-red/runtime/lib/events");
|
||||
var events = NR_TEST_UTILS.require("@node-red/util/lib/events");
|
||||
var credentials = NR_TEST_UTILS.require("@node-red/runtime/lib/nodes/credentials");
|
||||
var typeRegistry = NR_TEST_UTILS.require("@node-red/registry")
|
||||
var Flow = NR_TEST_UTILS.require("@node-red/runtime/lib/flows/Flow");
|
||||
|
@@ -28,6 +28,7 @@ var settings = NR_TEST_UTILS.require("@node-red/runtime/lib/settings");
|
||||
var util = NR_TEST_UTILS.require("@node-red/util");
|
||||
|
||||
var log = NR_TEST_UTILS.require("@node-red/util").log;
|
||||
var i18n = NR_TEST_UTILS.require("@node-red/util").i18n;
|
||||
|
||||
describe("runtime", function() {
|
||||
afterEach(function() {
|
||||
@@ -43,43 +44,45 @@ describe("runtime", function() {
|
||||
delete process.env.NODE_RED_HOME;
|
||||
});
|
||||
function mockUtil(metrics) {
|
||||
|
||||
return {
|
||||
log:{
|
||||
log: sinon.stub(),
|
||||
warn: sinon.stub(),
|
||||
info: sinon.stub(),
|
||||
trace: sinon.stub(),
|
||||
metric: sinon.stub().returns(!!metrics),
|
||||
_: function() { return "abc"}
|
||||
},
|
||||
i18n: {
|
||||
registerMessageCatalog: function(){
|
||||
return Promise.resolve();
|
||||
}
|
||||
}
|
||||
}
|
||||
sinon.stub(log,"log",function(){})
|
||||
sinon.stub(log,"warn",function(){})
|
||||
sinon.stub(log,"info",function(){})
|
||||
sinon.stub(log,"trace",function(){})
|
||||
sinon.stub(log,"metric",function(){ return !!metrics })
|
||||
sinon.stub(log,"_",function(){ return "abc"})
|
||||
sinon.stub(i18n,"registerMessageCatalog",function(){ return Promise.resolve()})
|
||||
}
|
||||
function unmockUtil() {
|
||||
log.log.restore && log.log.restore();
|
||||
log.warn.restore && log.warn.restore();
|
||||
log.info.restore && log.info.restore();
|
||||
log.trace.restore && log.trace.restore();
|
||||
log.metric.restore && log.metric.restore();
|
||||
log._.restore && log._.restore();
|
||||
i18n.registerMessageCatalog.restore && i18n.registerMessageCatalog.restore();
|
||||
}
|
||||
describe("init", function() {
|
||||
beforeEach(function() {
|
||||
sinon.stub(log,"init",function() {});
|
||||
sinon.stub(settings,"init",function() {});
|
||||
sinon.stub(redNodes,"init",function() {})
|
||||
mockUtil();
|
||||
});
|
||||
afterEach(function() {
|
||||
log.init.restore();
|
||||
settings.init.restore();
|
||||
redNodes.init.restore();
|
||||
unmockUtil();
|
||||
})
|
||||
|
||||
it("initialises components", function() {
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/"},mockUtil());
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/"});
|
||||
settings.init.called.should.be.true();
|
||||
redNodes.init.called.should.be.true();
|
||||
});
|
||||
|
||||
it("returns version", function() {
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/"},mockUtil());
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/"});
|
||||
return runtime.version().then(version => {
|
||||
/^\d+\.\d+\.\d+(-.*)?$/.test(version).should.be.true();
|
||||
});
|
||||
@@ -98,7 +101,6 @@ describe("runtime", function() {
|
||||
var redNodesLoadFlows;
|
||||
var redNodesStartFlows;
|
||||
var redNodesLoadContextsPlugin;
|
||||
var i18nRegisterMessageCatalog;
|
||||
|
||||
beforeEach(function() {
|
||||
storageInit = sinon.stub(storage,"init",function(settings) {return Promise.resolve();});
|
||||
@@ -108,7 +110,7 @@ describe("runtime", function() {
|
||||
redNodesLoadFlows = sinon.stub(redNodes,"loadFlows",function() {return Promise.resolve()});
|
||||
redNodesStartFlows = sinon.stub(redNodes,"startFlows",function() {});
|
||||
redNodesLoadContextsPlugin = sinon.stub(redNodes,"loadContextsPlugin",function() {return Promise.resolve()});
|
||||
i18nRegisterMessageCatalog = sinon.stub(util.i18n,"registerMessageCatalog",function() {return Promise.resolve()});
|
||||
mockUtil();
|
||||
});
|
||||
afterEach(function() {
|
||||
storageInit.restore();
|
||||
@@ -119,7 +121,7 @@ describe("runtime", function() {
|
||||
redNodesLoadFlows.restore();
|
||||
redNodesStartFlows.restore();
|
||||
redNodesLoadContextsPlugin.restore();
|
||||
i18nRegisterMessageCatalog.restore();
|
||||
unmockUtil();
|
||||
});
|
||||
it("reports errored/missing modules",function(done) {
|
||||
redNodesGetNodeList = sinon.stub(redNodes,"getNodeList", function(cb) {
|
||||
@@ -128,8 +130,7 @@ describe("runtime", function() {
|
||||
{ module:"module",enabled:true,loaded:false,types:["typeA","typeB"]} // missing
|
||||
].filter(cb);
|
||||
});
|
||||
var util = mockUtil();
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/", load:function() { return Promise.resolve();}},util);
|
||||
runtime.init({testSettings: true, httpAdminRoot:"/", load:function() { return Promise.resolve();}});
|
||||
// sinon.stub(console,"log");
|
||||
runtime.start().then(function() {
|
||||
// console.log.restore();
|
||||
@@ -139,9 +140,9 @@ describe("runtime", function() {
|
||||
redNodesLoad.calledOnce.should.be.true();
|
||||
redNodesLoadFlows.calledOnce.should.be.true();
|
||||
|
||||
util.log.warn.calledWithMatch("Failed to register 1 node type");
|
||||
util.log.warn.calledWithMatch("Missing node modules");
|
||||
util.log.warn.calledWithMatch(" - module: typeA, typeB");
|
||||
log.warn.calledWithMatch("Failed to register 1 node type");
|
||||
log.warn.calledWithMatch("Missing node modules");
|
||||
log.warn.calledWithMatch(" - module: typeA, typeB");
|
||||
redNodesCleanModuleList.calledOnce.should.be.true();
|
||||
done();
|
||||
} catch(err) {
|
||||
@@ -159,16 +160,15 @@ describe("runtime", function() {
|
||||
].filter(cb);
|
||||
});
|
||||
var serverInstallModule = sinon.stub(redNodes,"installModule",function(name) { return Promise.resolve({nodes:[]});});
|
||||
var util = mockUtil();
|
||||
runtime.init({testSettings: true, autoInstallModules:true, httpAdminRoot:"/", load:function() { return Promise.resolve();}},util);
|
||||
runtime.init({testSettings: true, autoInstallModules:true, httpAdminRoot:"/", load:function() { return Promise.resolve();}});
|
||||
sinon.stub(console,"log");
|
||||
runtime.start().then(function() {
|
||||
console.log.restore();
|
||||
try {
|
||||
util.log.warn.calledWithMatch("Failed to register 2 node types");
|
||||
util.log.warn.calledWithMatch("Missing node modules");
|
||||
util.log.warn.calledWithMatch(" - module: typeA, typeB");
|
||||
util.log.warn.calledWithMatch(" - node-red: typeC, typeD");
|
||||
log.warn.calledWithMatch("Failed to register 2 node types");
|
||||
log.warn.calledWithMatch("Missing node modules");
|
||||
log.warn.calledWithMatch(" - module: typeA, typeB");
|
||||
log.warn.calledWithMatch(" - node-red: typeC, typeD");
|
||||
redNodesCleanModuleList.calledOnce.should.be.false();
|
||||
serverInstallModule.calledOnce.should.be.true();
|
||||
serverInstallModule.calledWithMatch("module");
|
||||
@@ -186,14 +186,13 @@ describe("runtime", function() {
|
||||
{ err:"errored",name:"errName" } // error
|
||||
].filter(cb);
|
||||
});
|
||||
var util = mockUtil();
|
||||
runtime.init({testSettings: true, verbose:true, httpAdminRoot:"/", load:function() { return Promise.resolve();}},util);
|
||||
runtime.init({testSettings: true, verbose:true, httpAdminRoot:"/", load:function() { return Promise.resolve();}});
|
||||
sinon.stub(console,"log");
|
||||
runtime.start().then(function() {
|
||||
console.log.restore();
|
||||
try {
|
||||
util.log.warn.neverCalledWithMatch("Failed to register 1 node type");
|
||||
util.log.warn.calledWithMatch("[errName] errored");
|
||||
log.warn.neverCalledWithMatch("Failed to register 1 node type");
|
||||
log.warn.calledWithMatch("[errName] errored");
|
||||
done();
|
||||
} catch(err) {
|
||||
done(err);
|
||||
@@ -204,21 +203,21 @@ describe("runtime", function() {
|
||||
it("reports runtime metrics",function(done) {
|
||||
var stopFlows = sinon.stub(redNodes,"stopFlows",function() { return Promise.resolve();} );
|
||||
redNodesGetNodeList = sinon.stub(redNodes,"getNodeList", function() {return []});
|
||||
var util = mockUtil(true);
|
||||
unmockUtil();
|
||||
mockUtil(true);
|
||||
runtime.init(
|
||||
{testSettings: true, runtimeMetricInterval:200, httpAdminRoot:"/", load:function() { return Promise.resolve();}},
|
||||
{},
|
||||
undefined,
|
||||
util);
|
||||
undefined);
|
||||
// sinon.stub(console,"log");
|
||||
runtime.start().then(function() {
|
||||
// console.log.restore();
|
||||
setTimeout(function() {
|
||||
try {
|
||||
util.log.log.args.should.have.lengthOf(3);
|
||||
util.log.log.args[0][0].should.have.property("event","runtime.memory.rss");
|
||||
util.log.log.args[1][0].should.have.property("event","runtime.memory.heapTotal");
|
||||
util.log.log.args[2][0].should.have.property("event","runtime.memory.heapUsed");
|
||||
log.log.args.should.have.lengthOf(3);
|
||||
log.log.args[0][0].should.have.property("event","runtime.memory.rss");
|
||||
log.log.args[1][0].should.have.property("event","runtime.memory.heapTotal");
|
||||
log.log.args[2][0].should.have.property("event","runtime.memory.heapUsed");
|
||||
done();
|
||||
} catch(err) {
|
||||
done(err);
|
||||
|
@@ -17,9 +17,9 @@ var should = require("should");
|
||||
|
||||
var NR_TEST_UTILS = require("nr-test-utils");
|
||||
|
||||
describe("runtime/events", function() {
|
||||
describe("@node-red/util/events", function() {
|
||||
it('can be required without errors', function() {
|
||||
NR_TEST_UTILS.require("@node-red/runtime/lib/events");
|
||||
NR_TEST_UTILS.require("@node-red/util/lib/events");
|
||||
});
|
||||
it.skip('more tests needed', function(){})
|
||||
});
|
@@ -16,30 +16,31 @@
|
||||
var should = require("should");
|
||||
var sinon = require("sinon");
|
||||
var path = require("path");
|
||||
var events = require("events");
|
||||
var EventEmitter = require("events").EventEmitter;
|
||||
|
||||
|
||||
var child_process = require('child_process');
|
||||
|
||||
var NR_TEST_UTILS = require("nr-test-utils");
|
||||
|
||||
var exec = NR_TEST_UTILS.require("@node-red/runtime/lib/exec");
|
||||
var events = NR_TEST_UTILS.require("@node-red/util/lib/events");
|
||||
var exec = NR_TEST_UTILS.require("@node-red/util/lib/exec");
|
||||
|
||||
describe("runtime/exec", function() {
|
||||
var logEvents;
|
||||
var mockProcess;
|
||||
const eventLogHandler = function(ev) {
|
||||
logEvents.push(ev);
|
||||
}
|
||||
|
||||
beforeEach(function() {
|
||||
var logEventHandler = new events.EventEmitter();
|
||||
logEvents = [];
|
||||
logEventHandler.on('event-log', function(ev) {
|
||||
logEvents.push(ev);
|
||||
});
|
||||
exec.init({events:logEventHandler});
|
||||
|
||||
mockProcess = new events.EventEmitter();
|
||||
mockProcess.stdout = new events.EventEmitter();
|
||||
mockProcess.stderr = new events.EventEmitter();
|
||||
logEvents = [];
|
||||
events.on("event-log", eventLogHandler);
|
||||
|
||||
mockProcess = new EventEmitter();
|
||||
mockProcess.stdout = new EventEmitter();
|
||||
mockProcess.stderr = new EventEmitter();
|
||||
sinon.stub(child_process,'spawn',function(command,args,options) {
|
||||
mockProcess._args = {command,args,options};
|
||||
return mockProcess;
|
||||
@@ -47,6 +48,7 @@ describe("runtime/exec", function() {
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
events.removeListener("event-log", eventLogHandler);
|
||||
if (child_process.spawn.restore) {
|
||||
child_process.spawn.restore();
|
||||
}
|
Reference in New Issue
Block a user