Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / log4js / test / clusteredAppender-test.js
1 "use strict";
2 var assert = require('assert');
3 var vows = require('vows');
4 var layouts = require('../lib/layouts');
5 var sandbox = require('sandboxed-module');
6 var LoggingEvent = require('../lib/logger').LoggingEvent;
7 var cluster = require('cluster');
8
9 vows.describe('log4js cluster appender').addBatch({
10         'when in master mode': {
11                 topic: function() {
12
13                         var registeredClusterEvents = [];
14                         var loggingEvents = [];
15                         var onChildProcessForked;
16                         var onMasterReceiveChildMessage;
17
18                         // Fake cluster module, so no real cluster listeners be really added
19                         var fakeCluster = {
20
21                                 on: function(event, callback) {
22                                         registeredClusterEvents.push(event);
23                                         onChildProcessForked = callback;
24                                 },
25
26                                 isMaster: true,
27                                 isWorker: false,
28
29                         };
30                         var fakeWorker = {
31                                 on: function(event, callback) {
32                                         onMasterReceiveChildMessage = callback;
33                                 },
34                                 process: {
35                                         pid: 123
36                                 },
37                                 id: 'workerid'
38                         };
39
40                         var fakeActualAppender = function(loggingEvent) {
41                                 loggingEvents.push(loggingEvent);
42                         };
43
44                         // Load appender and fake modules in it
45                         var appenderModule = sandbox.require('../lib/appenders/clustered', {
46                                 requires: {
47                                         'cluster': fakeCluster,
48                                 }
49                         });
50
51                         var masterAppender = appenderModule.appender({
52                                 actualAppenders: [fakeActualAppender, fakeActualAppender, fakeActualAppender],
53                                 appenders: [{}, {category: "test"}, {category: "wovs"}]
54                         });
55
56                         // Actual test - log message using masterAppender
57                         masterAppender(new LoggingEvent('wovs', 'Info', ['masterAppender test']));
58
59                         // Simulate a 'fork' event to register the master's message handler on our fake worker.
60                         onChildProcessForked(fakeWorker);
61                         // Simulate a cluster message received by the masterAppender.
62                         var simulatedLoggingEvent = new LoggingEvent(
63                                 'wovs',
64                                 'Error',
65                                 [
66                                         'message deserialization test',
67                                         {stack: 'my wrapped stack'}
68                                 ]
69                         );
70                         onMasterReceiveChildMessage({
71                                 type : '::log-message',
72                                 event : JSON.stringify(simulatedLoggingEvent)
73                         });
74
75                         var returnValue = {
76                                 registeredClusterEvents: registeredClusterEvents,
77                                 loggingEvents: loggingEvents,
78                         };
79
80                         return returnValue;
81                 },
82
83                 "should register 'fork' event listener on 'cluster'": function(topic) {
84                         assert.equal(topic.registeredClusterEvents[0], 'fork');
85                 },
86
87                 "should log using actual appender": function(topic) {
88                         assert.equal(topic.loggingEvents.length, 4);
89                         assert.equal(topic.loggingEvents[0].data[0], 'masterAppender test');
90                         assert.equal(topic.loggingEvents[1].data[0], 'masterAppender test');
91                         assert.equal(topic.loggingEvents[2].data[0], 'message deserialization test');
92                         assert.equal(topic.loggingEvents[2].data[1], 'my wrapped stack');
93                         assert.equal(topic.loggingEvents[3].data[0], 'message deserialization test');
94                         assert.equal(topic.loggingEvents[3].data[1], 'my wrapped stack');
95                 },
96
97         },
98
99         'when in worker mode': {
100
101                 topic: function() {
102
103                         var registeredProcessEvents = [];
104
105                         // Fake cluster module, to fake we're inside a worker process
106                         var fakeCluster = {
107
108                                 isMaster: false,
109                                 isWorker: true,
110
111                         };
112
113                         var fakeProcess = {
114
115                                 send: function(data) {
116                                         registeredProcessEvents.push(data);
117                                 },
118
119                         };
120
121                         // Load appender and fake modules in it
122                         var appenderModule = sandbox.require('../lib/appenders/clustered', {
123                                 requires: {
124                                         'cluster': fakeCluster,
125                                 },
126                                 globals: {
127                                         'process': fakeProcess,
128                                 }
129                         });
130
131                         var workerAppender = appenderModule.appender();
132
133                         // Actual test - log message using masterAppender
134                         workerAppender(new LoggingEvent('wovs', 'Info', ['workerAppender test']));
135                         workerAppender(new LoggingEvent('wovs', 'Info', [new Error('Error test')]));
136
137                         var returnValue = {
138                                 registeredProcessEvents: registeredProcessEvents,
139                         };
140
141                         return returnValue;
142
143                 },
144
145                 "worker appender should call process.send" : function(topic) {
146                         assert.equal(topic.registeredProcessEvents[0].type, '::log-message');
147                         assert.equal(
148                                 JSON.parse(topic.registeredProcessEvents[0].event).data[0],
149                                 "workerAppender test"
150                         );
151                 },
152
153                 "worker should serialize an Error correctly" : function(topic) {
154                         assert.equal(topic.registeredProcessEvents[1].type, '::log-message');
155                         assert(JSON.parse(topic.registeredProcessEvents[1].event).data[0].stack);
156                         var actual = JSON.parse(topic.registeredProcessEvents[1].event).data[0].stack;
157                         var expectedRegex = /^Error: Error test/;
158                         assert(
159                                 actual.match(expectedRegex),
160                                 "Expected: \n\n " + actual + "\n\n to match " + expectedRegex
161                         );
162                 }
163
164         }
165
166 }).exportTo(module);