mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Exec node spawn mode should clone messages it reuses
This commit is contained in:
parent
8e7d52e645
commit
f002560616
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright 2013,2015 IBM Corp.
|
* Copyright 2013,2016 IBM Corp.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -61,13 +61,13 @@ module.exports = function(RED) {
|
|||||||
//console.log('[exec] stdout: ' + data);
|
//console.log('[exec] stdout: ' + data);
|
||||||
if (isUtf8(data)) { msg.payload = data.toString(); }
|
if (isUtf8(data)) { msg.payload = data.toString(); }
|
||||||
else { msg.payload = data; }
|
else { msg.payload = data; }
|
||||||
node.send([msg,null,null]);
|
node.send([RED.util.cloneMessage(msg),null,null]);
|
||||||
});
|
});
|
||||||
child.stderr.on('data', function (data) {
|
child.stderr.on('data', function (data) {
|
||||||
//console.log('[exec] stderr: ' + data);
|
//console.log('[exec] stderr: ' + data);
|
||||||
if (isUtf8(data)) { msg.payload = data.toString(); }
|
if (isUtf8(data)) { msg.payload = data.toString(); }
|
||||||
else { msg.payload = new Buffer(data); }
|
else { msg.payload = new Buffer(data); }
|
||||||
node.send([null,msg,null]);
|
node.send([null,RED.util.cloneMessage(msg),null]);
|
||||||
});
|
});
|
||||||
child.on('close', function (code) {
|
child.on('close', function (code) {
|
||||||
//console.log('[exec] result: ' + code);
|
//console.log('[exec] result: ' + code);
|
||||||
@ -78,12 +78,12 @@ module.exports = function(RED) {
|
|||||||
if (code === null) { node.status({fill:"red",shape:"dot",text:"timeout"}); }
|
if (code === null) { node.status({fill:"red",shape:"dot",text:"timeout"}); }
|
||||||
else if (code < 0) { node.status({fill:"red",shape:"dot",text:"rc: "+code}); }
|
else if (code < 0) { node.status({fill:"red",shape:"dot",text:"rc: "+code}); }
|
||||||
else { node.status({fill:"yellow",shape:"dot",text:"rc: "+code}); }
|
else { node.status({fill:"yellow",shape:"dot",text:"rc: "+code}); }
|
||||||
node.send([null,null,msg]);
|
node.send([null,null,RED.util.cloneMessage(msg)]);
|
||||||
});
|
});
|
||||||
child.on('error', function (code) {
|
child.on('error', function (code) {
|
||||||
delete node.activeProcesses[child.pid];
|
delete node.activeProcesses[child.pid];
|
||||||
if (child.tout) { clearTimeout(child.tout); }
|
if (child.tout) { clearTimeout(child.tout); }
|
||||||
node.error(code,msg);
|
node.error(code,RED.util.cloneMessage(msg));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -58,24 +58,42 @@ describe('exec node', function() {
|
|||||||
arg3(null,arg1,arg1.toUpperCase());
|
arg3(null,arg1,arg1.toUpperCase());
|
||||||
});
|
});
|
||||||
|
|
||||||
helper.load(execNode, flow, function() {
|
helper.load(execNode, flow, function() {
|
||||||
var n1 = helper.getNode("n1");
|
var n1 = helper.getNode("n1");
|
||||||
var n2 = helper.getNode("n2");
|
var n2 = helper.getNode("n2");
|
||||||
var n3 = helper.getNode("n3");
|
var n3 = helper.getNode("n3");
|
||||||
var n4 = helper.getNode("n4");
|
var n4 = helper.getNode("n4");
|
||||||
n2.on("input", function(msg) {
|
var received = 0;
|
||||||
//console.log(msg);
|
var messages = [null,null];
|
||||||
msg.should.have.property("payload");
|
var completeTest = function() {
|
||||||
msg.payload.should.be.a.String();
|
received++;
|
||||||
msg.payload.should.equal("echo");
|
if (received < 2) {
|
||||||
});
|
return;
|
||||||
n3.on("input", function(msg) {
|
}
|
||||||
//console.log(msg);
|
try{
|
||||||
msg.should.have.property("payload");
|
var msg = messages[0];
|
||||||
msg.payload.should.be.a.String,
|
msg.should.have.property("payload");
|
||||||
msg.payload.should.equal("ECHO");
|
msg.payload.should.be.a.String();
|
||||||
child_process.exec.restore();
|
msg.payload.should.equal("echo");
|
||||||
done();
|
|
||||||
|
msg = messages[1];
|
||||||
|
msg.should.have.property("payload");
|
||||||
|
msg.payload.should.be.a.String,
|
||||||
|
msg.payload.should.equal("ECHO");
|
||||||
|
child_process.exec.restore();
|
||||||
|
done();
|
||||||
|
} catch(err) {
|
||||||
|
child_process.exec.restore();
|
||||||
|
done(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
n2.on("input", function(msg) {
|
||||||
|
messages[0] = msg;
|
||||||
|
completeTest();
|
||||||
|
});
|
||||||
|
n3.on("input", function(msg) {
|
||||||
|
messages[1] = msg;
|
||||||
|
completeTest();
|
||||||
});
|
});
|
||||||
n1.receive({payload:"and"});
|
n1.receive({payload:"and"});
|
||||||
});
|
});
|
||||||
@ -96,19 +114,39 @@ describe('exec node', function() {
|
|||||||
var n2 = helper.getNode("n2");
|
var n2 = helper.getNode("n2");
|
||||||
var n3 = helper.getNode("n3");
|
var n3 = helper.getNode("n3");
|
||||||
var n4 = helper.getNode("n4");
|
var n4 = helper.getNode("n4");
|
||||||
|
var received = 0;
|
||||||
|
var messages = [null,null];
|
||||||
|
var completeTest = function() {
|
||||||
|
received++;
|
||||||
|
if (received < 2) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
var msg = messages[0];
|
||||||
|
msg.should.have.property("payload");
|
||||||
|
msg.payload.should.be.a.String();
|
||||||
|
msg.payload.should.equal("echo and more");
|
||||||
|
|
||||||
|
msg = messages[1];
|
||||||
|
msg.should.have.property("payload");
|
||||||
|
msg.payload.should.be.a.String();
|
||||||
|
msg.payload.should.equal("ECHO AND MORE");
|
||||||
|
child_process.exec.restore();
|
||||||
|
done();
|
||||||
|
} catch(err) {
|
||||||
|
child_process.exec.restore();
|
||||||
|
done(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
n2.on("input", function(msg) {
|
n2.on("input", function(msg) {
|
||||||
//console.log(msg);
|
messages[0] = msg;
|
||||||
msg.should.have.property("payload");
|
completeTest();
|
||||||
msg.payload.should.be.a.String();
|
|
||||||
msg.payload.should.equal("echo and more");
|
|
||||||
});
|
});
|
||||||
n3.on("input", function(msg) {
|
n3.on("input", function(msg) {
|
||||||
//console.log(msg);
|
messages[1] = msg;
|
||||||
msg.should.have.property("payload");
|
completeTest();
|
||||||
msg.payload.should.be.a.String();
|
|
||||||
msg.payload.should.equal("ECHO AND MORE");
|
|
||||||
child_process.exec.restore();
|
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
n1.receive({payload:"and"});
|
n1.receive({payload:"and"});
|
||||||
});
|
});
|
||||||
@ -252,15 +290,21 @@ describe('exec node', function() {
|
|||||||
var n2 = helper.getNode("n2");
|
var n2 = helper.getNode("n2");
|
||||||
var n3 = helper.getNode("n3");
|
var n3 = helper.getNode("n3");
|
||||||
var n4 = helper.getNode("n4");
|
var n4 = helper.getNode("n4");
|
||||||
n2.on("input", function(msg) {
|
var received = 0;
|
||||||
msg.should.have.property("payload");
|
var messages = [null,null];
|
||||||
msg.payload.should.be.a.String();
|
var completeTest = function() {
|
||||||
msg.payload.should.equal("this now works\n");
|
received++;
|
||||||
});
|
if (received < 2) {
|
||||||
n4.on("input", function(msg) {
|
return;
|
||||||
try {
|
}
|
||||||
|
try{
|
||||||
|
var msg = messages[0];
|
||||||
msg.should.have.property("payload");
|
msg.should.have.property("payload");
|
||||||
|
msg.payload.should.be.a.String();
|
||||||
|
msg.payload.should.equal("this now works\n");
|
||||||
|
|
||||||
|
msg = messages[1];
|
||||||
|
msg.should.have.property("payload");
|
||||||
should.exist(msg.payload);
|
should.exist(msg.payload);
|
||||||
msg.payload.should.be.a.Number();
|
msg.payload.should.be.a.Number();
|
||||||
msg.payload.should.equal(0);
|
msg.payload.should.equal(0);
|
||||||
@ -268,8 +312,18 @@ describe('exec node', function() {
|
|||||||
} catch(err) {
|
} catch(err) {
|
||||||
done(err);
|
done(err);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
n2.on("input", function(msg) {
|
||||||
|
messages[0] = msg;
|
||||||
|
completeTest();
|
||||||
});
|
});
|
||||||
n1.receive({payload:null});
|
n4.on("input", function(msg) {
|
||||||
|
messages[1] = msg;
|
||||||
|
completeTest();
|
||||||
|
});
|
||||||
|
n1.receive({payload:null,fred:123});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user