summaryrefslogtreecommitdiffstats
path: root/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js')
-rw-r--r--vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js317
1 files changed, 317 insertions, 0 deletions
diff --git a/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js
new file mode 100644
index 00000000..d193e836
--- /dev/null
+++ b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/multiprocess-test.js
@@ -0,0 +1,317 @@
+"use strict";
+var vows = require('vows')
+, sandbox = require('sandboxed-module')
+, assert = require('assert')
+;
+
+function makeFakeNet() {
+ return {
+ logEvents: [],
+ data: [],
+ cbs: {},
+ createConnectionCalled: 0,
+ fakeAppender: function(logEvent) {
+ this.logEvents.push(logEvent);
+ },
+ createConnection: function(port, host) {
+ var fakeNet = this;
+ this.port = port;
+ this.host = host;
+ this.createConnectionCalled += 1;
+ return {
+ on: function(evt, cb) {
+ fakeNet.cbs[evt] = cb;
+ },
+ write: function(data, encoding) {
+ fakeNet.data.push(data);
+ fakeNet.encoding = encoding;
+ },
+ end: function() {
+ fakeNet.closeCalled = true;
+ }
+ };
+ },
+ createServer: function(cb) {
+ var fakeNet = this;
+ cb({
+ remoteAddress: '1.2.3.4',
+ remotePort: '1234',
+ setEncoding: function(encoding) {
+ fakeNet.encoding = encoding;
+ },
+ on: function(event, cb) {
+ fakeNet.cbs[event] = cb;
+ }
+ });
+
+ return {
+ listen: function(port, host) {
+ fakeNet.port = port;
+ fakeNet.host = host;
+ }
+ };
+ }
+ };
+}
+
+vows.describe('Multiprocess Appender').addBatch({
+ 'worker': {
+ topic: function() {
+ var fakeNet = makeFakeNet(),
+ appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet
+ }
+ }
+ ).appender({ mode: 'worker', loggerPort: 1234, loggerHost: 'pants' });
+
+ //don't need a proper log event for the worker tests
+ appender('before connect');
+ fakeNet.cbs.connect();
+ appender('after connect');
+ fakeNet.cbs.close(true);
+ appender('after error, before connect');
+ fakeNet.cbs.connect();
+ appender('after error, after connect');
+ appender(new Error('Error test'));
+
+ return fakeNet;
+ },
+ 'should open a socket to the loggerPort and loggerHost': function(net) {
+ assert.equal(net.port, 1234);
+ assert.equal(net.host, 'pants');
+ },
+ 'should buffer messages written before socket is connected': function(net) {
+ assert.equal(net.data[0], JSON.stringify('before connect'));
+ },
+ 'should write log messages to socket as json strings with a terminator string': function(net) {
+ assert.equal(net.data[0], JSON.stringify('before connect'));
+ assert.equal(net.data[1], '__LOG4JS__');
+ assert.equal(net.data[2], JSON.stringify('after connect'));
+ assert.equal(net.data[3], '__LOG4JS__');
+ assert.equal(net.encoding, 'utf8');
+ },
+ 'should attempt to re-open the socket on error': function(net) {
+ assert.equal(net.data[4], JSON.stringify('after error, before connect'));
+ assert.equal(net.data[5], '__LOG4JS__');
+ assert.equal(net.data[6], JSON.stringify('after error, after connect'));
+ assert.equal(net.data[7], '__LOG4JS__');
+ assert.equal(net.createConnectionCalled, 2);
+ },
+ 'should serialize an Error correctly': function(net) {
+ assert(
+ JSON.parse(net.data[8]).stack,
+ "Expected:\n\n" + net.data[8] + "\n\n to have a 'stack' property"
+ );
+ var actual = JSON.parse(net.data[8]).stack;
+ var expectedRegex = /^Error: Error test/;
+ assert(
+ actual.match(expectedRegex),
+ "Expected: \n\n " + actual + "\n\n to match " + expectedRegex
+ );
+
+ }
+ },
+ 'worker with timeout': {
+ topic: function() {
+ var fakeNet = makeFakeNet(),
+ appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet
+ }
+ }
+ ).appender({ mode: 'worker' });
+
+ //don't need a proper log event for the worker tests
+ appender('before connect');
+ fakeNet.cbs.connect();
+ appender('after connect');
+ fakeNet.cbs.timeout();
+ appender('after timeout, before close');
+ fakeNet.cbs.close();
+ appender('after close, before connect');
+ fakeNet.cbs.connect();
+ appender('after close, after connect');
+
+ return fakeNet;
+ },
+ 'should attempt to re-open the socket': function(net) {
+ //skipping the __LOG4JS__ separators
+ assert.equal(net.data[0], JSON.stringify('before connect'));
+ assert.equal(net.data[2], JSON.stringify('after connect'));
+ assert.equal(net.data[4], JSON.stringify('after timeout, before close'));
+ assert.equal(net.data[6], JSON.stringify('after close, before connect'));
+ assert.equal(net.data[8], JSON.stringify('after close, after connect'));
+ assert.equal(net.createConnectionCalled, 2);
+ }
+ },
+ 'worker defaults': {
+ topic: function() {
+ var fakeNet = makeFakeNet(),
+ appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet
+ }
+ }
+ ).appender({ mode: 'worker' });
+
+ return fakeNet;
+ },
+ 'should open a socket to localhost:5000': function(net) {
+ assert.equal(net.port, 5000);
+ assert.equal(net.host, 'localhost');
+ }
+ },
+ 'master': {
+ topic: function() {
+ var fakeNet = makeFakeNet(),
+ appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet
+ }
+ }
+ ).appender({ mode: 'master',
+ loggerHost: 'server',
+ loggerPort: 1234,
+ actualAppender: fakeNet.fakeAppender.bind(fakeNet)
+ });
+
+ appender('this should be sent to the actual appender directly');
+
+ return fakeNet;
+ },
+ 'should listen for log messages on loggerPort and loggerHost': function(net) {
+ assert.equal(net.port, 1234);
+ assert.equal(net.host, 'server');
+ },
+ 'should return the underlying appender': function(net) {
+ assert.equal(net.logEvents[0], 'this should be sent to the actual appender directly');
+ },
+ 'when a client connects': {
+ topic: function(net) {
+ var logString = JSON.stringify(
+ { level: { level: 10000, levelStr: 'DEBUG' }
+ , data: ['some debug']}
+ ) + '__LOG4JS__';
+
+ net.cbs.data(
+ JSON.stringify(
+ { level: { level: 40000, levelStr: 'ERROR' }
+ , data: ['an error message'] }
+ ) + '__LOG4JS__'
+ );
+ net.cbs.data(logString.substring(0, 10));
+ net.cbs.data(logString.substring(10));
+ net.cbs.data(logString + logString + logString);
+ net.cbs.end(
+ JSON.stringify(
+ { level: { level: 50000, levelStr: 'FATAL' }
+ , data: ["that's all folks"] }
+ ) + '__LOG4JS__'
+ );
+ net.cbs.data('bad message__LOG4JS__');
+ return net;
+ },
+ 'should parse log messages into log events and send to appender': function(net) {
+ assert.equal(net.logEvents[1].level.toString(), 'ERROR');
+ assert.equal(net.logEvents[1].data[0], 'an error message');
+ assert.equal(net.logEvents[1].remoteAddress, '1.2.3.4');
+ assert.equal(net.logEvents[1].remotePort, '1234');
+ },
+ 'should parse log messages split into multiple chunks': function(net) {
+ assert.equal(net.logEvents[2].level.toString(), 'DEBUG');
+ assert.equal(net.logEvents[2].data[0], 'some debug');
+ assert.equal(net.logEvents[2].remoteAddress, '1.2.3.4');
+ assert.equal(net.logEvents[2].remotePort, '1234');
+ },
+ 'should parse multiple log messages in a single chunk': function(net) {
+ assert.equal(net.logEvents[3].data[0], 'some debug');
+ assert.equal(net.logEvents[4].data[0], 'some debug');
+ assert.equal(net.logEvents[5].data[0], 'some debug');
+ },
+ 'should handle log messages sent as part of end event': function(net) {
+ assert.equal(net.logEvents[6].data[0], "that's all folks");
+ },
+ 'should handle unparseable log messages': function(net) {
+ assert.equal(net.logEvents[7].level.toString(), 'ERROR');
+ assert.equal(net.logEvents[7].categoryName, 'log4js');
+ assert.equal(net.logEvents[7].data[0], 'Unable to parse log:');
+ assert.equal(net.logEvents[7].data[1], 'bad message');
+ }
+ }
+ },
+ 'master defaults': {
+ topic: function() {
+ var fakeNet = makeFakeNet(),
+ appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet
+ }
+ }
+ ).appender({ mode: 'master' });
+
+ return fakeNet;
+ },
+ 'should listen for log messages on localhost:5000': function(net) {
+ assert.equal(net.port, 5000);
+ assert.equal(net.host, 'localhost');
+ }
+ }
+}).addBatch({
+ 'configure': {
+ topic: function() {
+ var results = {}
+ , fakeNet = makeFakeNet()
+ , appender = sandbox.require(
+ '../lib/appenders/multiprocess',
+ {
+ requires: {
+ 'net': fakeNet,
+ '../log4js': {
+ loadAppender: function(app) {
+ results.appenderLoaded = app;
+ },
+ appenderMakers: {
+ 'madeupappender': function(config, options) {
+ results.config = config;
+ results.options = options;
+ }
+ }
+ }
+ }
+ }
+ ).configure(
+ {
+ mode: 'master',
+ appender: {
+ type: 'madeupappender',
+ cheese: 'gouda'
+ }
+ },
+ { crackers: 'jacobs' }
+ );
+
+ return results;
+
+ },
+ 'should load underlying appender for master': function(results) {
+ assert.equal(results.appenderLoaded, 'madeupappender');
+ },
+ 'should pass config to underlying appender': function(results) {
+ assert.equal(results.config.cheese, 'gouda');
+ },
+ 'should pass options to underlying appender': function(results) {
+ assert.equal(results.options.crackers, 'jacobs');
+ }
+ }
+}).exportTo(module);