8000 fix(test): moved clustered appender test to tap · WebHu/log4js-node@52016b3 · GitHub
[go: up one dir, main page]

Skip to content

Commit 52016b3

Browse files
author
Gareth Jones
committed
fix(test): moved clustered appender test to tap
1 parent 074c04e commit 52016b3

File tree

2 files changed

+147
-163
lines changed

2 files changed

+147
-163
lines changed

test/tap/clusteredAppender-test.js

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

test/vows/clusteredAppender-test.js

Lines changed: 0 additions & 163 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0