generated from nginx/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathlogger.test.ts
111 lines (94 loc) · 2.75 KB
/
logger.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import assert from 'assert'
import { describe, it } from 'mocha'
import { LogLevel, Logger } from '../src/logger'
describe('Logger', () => {
it('adds a prefix', () => {
const ngx = new FakeNGX()
const log = new Logger('my-module', LogLevel.Info, ngx)
log.info('message')
assert.deepEqual(ngx.logs, [
{ level: ngx.INFO, message: 'njs-acme: [my-module] message' },
])
})
it('omits empty modules from the prefix', () => {
const ngx = new FakeNGX()
const log = new Logger('', LogLevel.Info, ngx)
log.info('message')
assert.deepEqual(ngx.logs, [
{ level: ngx.INFO, message: 'njs-acme: message' },
])
})
it("maps our four log levels to ngx's three log levels", () => {
const ngx = new FakeNGX()
const log = new Logger('t', LogLevel.Debug, ngx)
log.debug('d')
log.info('i')
log.warn('w')
log.error('e')
assert.deepEqual(ngx.logs, [
{ level: ngx.INFO, message: 'njs-acme: [t] d' },
{ level: ngx.INFO, message: 'njs-acme: [t] i' },
{ level: ngx.WARN, message: 'njs-acme: [t] w' },
{ level: ngx.ERR, message: 'njs-acme: [t] e' },
])
})
it('omits logs below the minLevel', () => {
const ngx = new FakeNGX()
const log = new Logger('t', LogLevel.Info, ngx)
log.debug('d')
log.info('i')
log.warn('w')
log.error('e')
assert.deepEqual(ngx.logs, [
{ level: ngx.INFO, message: 'njs-acme: [t] i' },
{ level: ngx.WARN, message: 'njs-acme: [t] w' },
{ level: ngx.ERR, message: 'njs-acme: [t] e' },
])
})
const testCases: Record<string, { args: unknown[]; expected: string }> = {
'multiple args': {
args: ['msg:', 4, true, 'another'],
expected: 'msg: 4 true another',
},
objects: {
args: ['did a thing:', { a: 1, b: 2 }],
expected: 'did a thing: {"a":1,"b":2}',
},
'empty-ish args': {
args: [null, '', undefined],
expected: 'null ',
},
arrays: {
args: ['a:', [1, 2, 3]],
expected: 'a: [1,2,3]',
},
}
for (const [name, testCase] of Object.entries(testCases)) {
it(`stringifies ${name}`, () => {
const ngx = new FakeNGX()
const log = new Logger('t', LogLevel.Info, ngx)
log.info(...testCase.args)
assert.deepEqual(ngx.logs, [
{ level: ngx.INFO, message: `njs-acme: [t] ${testCase.expected}` },
])
})
}
})
/**
* Fake implementation of the logging functions of NGXObject
*/
class FakeNGX {
readonly logs: { level: number; message: NjsStringOrBuffer }[]
readonly INFO: number
readonly WARN: number
readonly ERR: number
constructor() {
this.logs = []
this.INFO = 1
this.WARN = 2
this.ERR = 3
}
log(level: number, message: NjsStringOrBuffer) {
this.logs.push({ level, message })
}
}