8000 fix(test): moved console, logger, logstash tests to tap · xcj-coding/log4js-node@e45476f · GitHub
[go: up one dir, main page]

Skip to content

Commit e45476f

Browse files
author
Gareth Jones
committed
fix(test): moved console, logger, logstash tests to tap
1 parent 5918649 commit e45476f

6 files changed

+244
-261
lines changed

test/tap/consoleAppender-test.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
'use strict';
2+
3+
const test = require('tap').test;
4+
const layouts = require('../../lib/layouts');
5+
const sandbox = require('sandboxed-module');
6+
7+
test('log4js console appender', (batch) => {
8+
batch.test('should output to console', (t) => {
9+
const messages = [];
10+
const fakeConsole = {
11+
log: function (msg) {
12+
messages.push(msg);
13+
}
14+
};
15+
const appenderModule = sandbox.require(
16+
'../../lib/appenders/console',
17+
{
18+
globals: {
19+
console: fakeConsole
20+
}
21+
}
22+
);
23+
24+
const appender = appenderModule.appender(layouts.messagePassThroughLayout);
25+
appender({ data: ['blah'] });
26+
27+
t.equal(messages[0], 'blah');
28+
t.end();
29+
});
30+
31+
batch.end();
32+
});

test/tap/logger-test.js

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
'use strict';
2+
3+
const test = require('tap').test;
4+
const levels = require('../../lib/levels');
5+
const loggerModule = require('../../lib/logger');
6+
7+
const Logger = loggerModule.Logger;
8+
9+
test('../../lib/logger', (batch) => {
10+
batch.test('constructor with no parameters', (t) => {
11+
const logger = new Logger();
12+
t.equal(logger.category, Logger.DEFAULT_CATEGORY, 'should use default category');
13+
t.equal(logger.level, levels.TRACE, 'should use TRACE log level');
14+
t.end();
15+
});
16+
17+
batch.test('constructor with category', (t) => {
18+
const logger = new Logger('cheese');
19+
t.equal(logger.category, 'cheese', 'should use category');
20+
t.equal(logger.level, levels.TRACE, 'should use TRACE log level');
21+
t.end();
22+
});
23+
24+
batch.test('constructor with category and level', (t) => {
25+
const logger = new Logger('cheese', 'debug');
26+
t.equal(logger.category, 'cheese', 'should use category');
27+
t.equal(logger.level, levels.DEBUG, 'should use level');
28+
t.end();
29+
});
30+
31+
batch.test('isLevelEnabled', (t) => {
32+
const logger = new Logger('cheese', 'info');
33+
const functions = [
34+
'isTraceEnabled', 'isDebugEnabled', 'isInfoEnabled',
35+
'isWarnEnabled', 'isErrorEnabled', 'isFatalEnabled'
36+
];
37+
t.test('should provide a level enabled function for all levels', (subtest) => {
38+
subtest.plan(functions.length);
39+
functions.forEach((fn) => {
40+
subtest.type(logger[fn], 'function');
41+
});
42+
});
43+
t.test('should return the right values', (subtest) => {
44+
subtest.notOk(logger.isTraceEnabled());
45+
subtest.notOk(logger.isDebugEnabled());
46+
subtest.ok(logger.isInfoEnabled());
47+
subtest.ok(logger.isWarnEnabled());
48+
subtest.ok(logger.isErrorEnabled());
49+
subtest.ok(logger.isFatalEnabled());
50+
subtest.end();
51+
});
52+
t.end();
53+
});
54+
55+
batch.test('should emit log events', (t) => {
56+
const events = [];
57+
const logger = new Logger();
58+
logger.addListener('log', (logEvent) => {
59+
events.push(logEvent);
60+
});
61+
logger.debug('Event 1');
62+
loggerModule.disableAllLogWrites();
63+
logger.debug('Event 2');
64+
loggerModule.enableAllLogWrites();
65+
logger.debug('Event 3');
66+
67+
t.test('when log writes are enabled', (assert) => {
68+
assert.equal(events[0].data[0], 'Event 1');
69+
assert.end();
70+
});
71+
72+
t.test('but not when log writes are disabled', (assert) => {
73+
assert.equal(events.length, 2);
74+
assert.equal(events[1].data[0], 'Event 3');
75+
assert.end();
76+
});
77+
t.end();
78+
});
79+
80+
batch.end();
81+
});

test/tap/logstashUDP-test.js

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
'use strict';
2+
3+
const test = require('tap').test;
4+
const log4js = require('../../lib/log4js');
5+
const sandbox = require('sandboxed-module');
6+
7+
function setupLogging(category, options) {
8+
const udpSent = {};
9+
10+
const fakeDgram = {
11+
createSocket: function () {
12+
return {
13+
send: function (buffer, offset, length, port, host, callback) {
14+
udpSent.date = new Date();
15+
udpSent.host = host;
16+
udpSent.port = port;
17+
udpSent.length = length;
18+
udpSent.offset = 0;
19+
udpSent.buffer = buffer;
20+
callback(undefined, length);
21+
}
22+
};
23+
}
24+
};
25+
26+
const logstashModule = sandbox.require('../../lib/appenders/logstashUDP', {
27+
singleOnly: true,
28+
requires: {
29+
dgram: fakeDgram
30+
}
31+
});
32+
log4js.clearAppenders();
33+
log4js.addAppender(logstashModule.configure(options), category);
34+
35+
return {
36+
logger: log4js.getLogger(category),
37+
results: udpSent
38+
};
39+
}
40+
41+
test('logstashUDP appender', (batch) => {
42+
batch.test('a UDP packet should be sent', (t) => {
43+
const setup = setupLogging('myCategory', {
44+
host: '127.0.0.1',
45+
port: 10001,
46+
type: 'logstashUDP',
47+
logType: 'myAppType',
48+
category: 'myLogger',
49+
fields: {
50+
field1: 'value1',
51+
field2: 'value2'
52+
},
53+
layout: {
54+
type: 'pattern',
55+
pattern: '%m'
56+
}
57+
});
58+
setup.logger.log('trace', 'Log event #1');
59+
60+
t.equal(setup.results.host, '127.0.0.1');
61+
t.equal(setup.results.port, 10001);
62+
t.equal(setup.results.offset, 0);
63+
64+
const json = JSON.parse(setup.results.buffer.toString());
65+
t.equal(json.type, 'myAppType');
66+
const fields = {
67+
field1: 'value1',
68+
field2: 'value2',
69+
level: 'TRACE',
70+
category: 'myCategory'
71+
};
72+
t.equal(JSON.stringify(json.fields), JSON.stringify(fields));
73+
t.equal(json.message, 'Log event #1');
74+
// Assert timestamp, up to hours resolution.
75+
const date = new Date(json['@timestamp']);
76+
t.equal(
77+
date.toISOString().substring(0, 14),
78+
setup.results.date.toISOString().substring(0, 14)
79+
);
80+
81+
t.end();
82+
});
83+
84+
batch.test('default options', (t) => {
85+
const setup = setupLogging('myLogger', {
86+
host: '127.0.0.1',
87+
port: 10001,
88+
type: 'logstashUDP',
89+
category: 'myLogger',
90+
layout: {
91+
type: 'pattern',
92+
pattern: '%m'
93+
}
94+
});
95+
setup.logger.log('trace', 'Log event #1');
96+
97+
const json = JSON.parse(setup.results.buffer.toString());
98+
t.equal(json.type, 'myLogger');
99+
t.equal(
100+
JSON.stringify(json.fields),
101+
JSON.stringify({ level: 'TRACE', category: 'myLogger' })
102+
);
103+
104+
t.end();
105+
});
106+
107+
batch.test('extra fields should be added to the fields structure', (t) => {
108+
const setup = setupLogging('myLogger', {
109+
host: '127.0.0.1',
110+
port: 10001,
111+
type: 'logstashUDP',
112+
category: 'myLogger',
113+
layout: {
114+
type: 'dummy'
115+
}
116+
});
117+
setup.logger.log('trace', 'Log event #1', { extra1: 'value1', extra2: 'value2' });
118+
119+
const json = JSON.parse(setup.results.buffer.toString());
120+
const fields = {
121+
extra1: 'value1',
122+
extra2: 'value2',
123+
level: 'TRACE',
124+
category: 'myLogger'
125+
};
126+
t.equal(JSON.stringify(json.fields), JSON.stringify(fields));
127+
t.end();
128+
});
129+
130+
batch.end();
131+
});

test/vows/consoleAppender-test.js

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

test/vows/logger-test.js

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

0 commit comments

Comments
 (0)
0