summaryrefslogtreecommitdiffstats
path: root/dgbuilder/test/nodes/core/core/58-debug_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'dgbuilder/test/nodes/core/core/58-debug_spec.js')
-rw-r--r--dgbuilder/test/nodes/core/core/58-debug_spec.js298
1 files changed, 298 insertions, 0 deletions
diff --git a/dgbuilder/test/nodes/core/core/58-debug_spec.js b/dgbuilder/test/nodes/core/core/58-debug_spec.js
new file mode 100644
index 00000000..f83fc2ca
--- /dev/null
+++ b/dgbuilder/test/nodes/core/core/58-debug_spec.js
@@ -0,0 +1,298 @@
+/**
+ * Copyright 2014 IBM Corp.
+ *
+ * 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 should = require("should");
+var debugNode = require("../../../../nodes/core/core/58-debug.js");
+var helper = require("../../helper.js");
+var WebSocket = require('ws');
+
+describe('debug node', function() {
+
+ before(function(done) {
+ helper.startServer(done);
+ });
+
+ afterEach(function() {
+ helper.unload();
+ });
+
+
+ it('should be loaded', function(done) {
+ var flow = [{id:"n1", type:"debug", name: "Debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ n1.should.have.property('name', 'Debug');
+ done();
+ });
+ });
+
+ it('should publish on input', function(done) {
+ var flow = [{id:"n1", type:"debug", name: "Debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload:"test"});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",name:"Debug",msg:"test"}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish to console', function(done) {
+ var flow = [{id:"n1", type:"debug", console: "true" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ var count = 0;
+ n1.on('log', function(msg) {
+ msg.should.eql({level:'log',id:'n1',type:'debug',msg:'test'});
+ count++;
+ if (count == 2) {
+ done();
+ }
+ });
+ websocket_test(function() {
+ n1.emit("input", {payload:"test"});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",msg:"test"}
+ });
+ count++;
+ }, function() {
+ if (count == 2) {
+ done();
+ }
+ });
+ });
+ });
+
+ it('should publish complete message', function(done) {
+ var flow = [{id:"n1", type:"debug", complete: "true" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload:"test"});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{id:"n1",msg:'(Object) {\n "payload": "test"\n}'}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish an Error', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: new Error("oops")});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",msg:"Error: oops"}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish a boolean', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: true});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",msg: '(boolean) true'}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish with no payload', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",msg: '(undefined)'}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish an object', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: {type:'foo'}});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{id:"n1",msg:'(Object) {\n "type": "foo"\n}'}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish an array', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: [0,1,2,3]});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{id:"n1",msg: '(Array) [\n 0,\n 1,\n 2,\n 3\n]'}
+ });
+ }, done);
+ });
+ });
+
+ it('should publish an object with circular references', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ var o = { name: 'bar' };
+ o.o = o;
+ n1.emit("input", {payload: o});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{
+ id:"n1",
+ msg:'(Object) {\n "name": "bar",\n "o": "[circular]"\n}'
+ }
+ });
+ }, done);
+ });
+ });
+
+ it('should truncated a long message', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: Array(1002).join("X")});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{
+ id:"n1",
+ msg: Array(1001).join("X")+' ....'
+ }
+ });
+ }, done);
+ });
+ });
+
+ it('should convert Buffer to hex', function(done) {
+ var flow = [{id:"n1", type:"debug" }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload: new Buffer('HELLO', 'utf8')});
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",
+ data:{
+ id:"n1",
+ msg: '(Buffer) 48454c4c4f',
+ }
+ });
+ }, done);
+ });
+ });
+
+ it('should publish when active', function(done) {
+ var flow = [{id:"n1", type:"debug", active: false }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function() {
+ n1.emit("input", {payload:"message 1"});
+ helper.request()
+ .post('/debug/n1/enable')
+ .expect(200).end(function(err) {
+ if (err) { return done(err); }
+ n1.emit("input", {payload:"message 2"});
+ });
+ }, function(msg) {
+ JSON.parse(msg).should.eql({
+ topic:"debug",data:{id:"n1",msg:"message 2"}
+ });
+ }, done);
+ });
+ });
+
+ it('should not publish when inactive', function(done) {
+ var flow = [{id:"n1", type:"debug", active: true }];
+ helper.load(debugNode, flow, function() {
+ var n1 = helper.getNode("n1");
+ websocket_test(function(close) {
+ helper.request()
+ .post('/debug/n1/disable')
+ .expect(201).end(function(err) {
+ if (err) {
+ close();
+ return done(err);
+ }
+ n1.emit("input", {payload:"message"});
+ setTimeout(function() {
+ close();
+ done();
+ }, 200);
+ });
+ }, function(msg) {
+ should.fail(null,null,"unexpected message");
+ }, function() {});
+ });
+ });
+
+ describe('post', function() {
+ it('should return 404 on invalid state', function(done) {
+ var flow = [{id:"n1", type:"debug", active: true }];
+ helper.load(debugNode, flow, function() {
+ helper.request()
+ .post('/debug/n1/foobar')
+ .expect(404).end(done);
+ });
+ });
+
+ it('should return 404 on invalid node', function(done) {
+ helper.request()
+ .post('/debug/n99/enable')
+ .expect(404).end(done);
+ });
+ });
+
+});
+
+function websocket_test(open_callback, message_callback, done_callback) {
+ var ws = new WebSocket(helper.url() + "/comms");
+ var close_callback = function() { ws.close(); };
+ ws.on('open', function() { open_callback(close_callback); });
+ ws.on('message', function(msg) {
+ message_callback(msg, close_callback);
+ ws.close();
+ done_callback();
+ });
+}