UNPKG

8.8 kBtext/coffeescriptView Raw
1#mocha
2e = require 'expect.js'
3fs = require 'fs'
4path = require 'path'
5stream = require 'stream'
6ep = require 'event-pipe'
7
8class mockStream
9 constructor : () -> @chunks = []
10 write : (chunk) ->
11 @chunks.push chunk
12 clean : -> chunks = []
13 toString : (nocolor = true) ->
14 data = ''
15 for chunk in @chunks
16 data += chunk.toString()
17 data
18 toStringNoColor : (nocolor = true) ->
19 data = ''
20 for chunk in @chunks
21 data += chunk.toString()
22 data.replace /\x1b\[\d+m/g, '' # trim ansi color
23
24
25
26
27mock =
28 send : ''
29 headers : {}
30 req :
31 url : '/'
32 headers :
33 'user-agent' : 'mock server'
34 'referer' : 'mock refer'
35 socket :
36 remoteAddress : '127.0.0.1'
37 httpVersionMajor : 1
38 httpVersionMinor : 1
39 method : 'GET'
40 resp :
41 write : (data)-> mock.send += data.toString() if data?
42 end : (data)-> mock.send += data.toString() if data?
43 statusCode : 0
44 setHeader : (name, value) -> mock.headers[name.toLowerCase()] = value
45 getHeader : (name) -> mock.headers[name.toLowerCase()]
46 clean : ->
47 mock.send = ''
48 mock.headers = {}
49 mock.resp.statusCode = 0
50 mock.url = '/'
51mock.resp.headers = mock.headers
52
53describe 'buffer JustLog', ->
54 jl = require '../lib/justlog'
55 {pre: predefined} = require '../lib/pattern'
56 options = stdout = stderr = l = null
57 dir = "#{__dirname}/log_file"
58
59 beforeEach ->
60 mock.clean()
61 jl.config flushTime : 10
62 stdout = new mockStream
63 stderr = new mockStream
64 options =
65 file:
66 path : "[#{dir}/test.txt]"
67 stdio :
68 stdout : stdout
69 stderr : stderr
70 bufferLength : 5
71
72
73 afterEach (done)->
74 jl.end()
75 return done() if not l?
76 l.close ()->
77 setTimeout ->
78 try
79 for file in fs.readdirSync dir
80 fs.unlinkSync "#{dir}/#{file}"
81 fs.rmdirSync dir
82 done()
83 , 100
84 l = null
85
86 describe 'options init', ->
87 it 'check options', (done)->
88 l = new jl bufferLength : 5
89 e(l.options.bufferLength).to.be 5
90 setTimeout done, 100
91 describe 'stdio', ->
92 it 'stdout with default output pattern', (done)->
93 options.file = false
94 l = new jl options
95 l.info 'simple info'
96 l.debug 'simple debug'
97 l.warn 'simple warn'
98 l.error 'simple error'
99 e(stdout.toStringNoColor()).to.match ///
100 ^
101 \d{2}:\d{2}:\d{2}\s
102 INFO\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\sinfo\n
103 \d{2}:\d{2}:\d{2}\s
104 DEBUG\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\sdebug\n
105 $
106 ///
107 e(stderr.toStringNoColor()).to.match ///
108 ^
109 \d{2}:\d{2}:\d{2}\s
110 WARN\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\swarn\n
111 \d{2}:\d{2}:\d{2}\s
112 ERROR\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\serror\n
113 $
114 ///
115 done()
116 it 'stdout with default output pattern', (done)->
117 options.file.level = 0
118 options.stdio.level = jl.INFO | jl.DEBUG
119 l = new jl options
120 l.info 'simple info', 'data2', 123
121 l.debug 'simple debug %s %d %s %j', 'data3', 456, [1, 2, 3], a:1
122 l.warn 'simple warn %s'
123 l.error 'simple error'
124 e(stdout.toStringNoColor()).to.match ///
125 ^
126 \d{2}:\d{2}:\d{2}\s
127 INFO\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\sinfo\sdata2\s123\n
128 \d{2}:\d{2}:\d{2}\s
129 DEBUG\s+(out/test/)?tests/test-bufferlog\.(js|coffee):\d+\ssimple\sdebug\sdata3\s456\s1,2,3\s\{"a":1\}\n
130 $
131 ///
132 e(stderr.toStringNoColor()).to.be ''
133 done()
134 describe 'file', ->
135 it 'write log over buffer length', (done)->
136 options.stdio = false
137 l = new jl options
138 l.warn 'simple warn'
139 l.error 'simple error'
140 l.error 'simple error'
141 l.error 'simple error'
142 l.error 'simple error'
143 e(fs.readFileSync(l.file.path).toString()).to.eql ''
144 e(l.file.stream._buffer.length).to.be 5
145 l.error 'simple error'
146 e(l.file.stream._buffer.length).to.be 0
147 l.close ->
148 e(fs.readFileSync(l.file.path).toString()).to.match ///
149 ^
150 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
151 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\swarn\n
152 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
153 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
154 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
155 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
156 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
157 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
158 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
159 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
160 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
161 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
162 $
163 ///
164 done()
165
166 it 'write log when time out', (done)->
167 options.stdio = false
168 options.duration = 100
169 l = new jl options
170 l.warn 'simple warn'
171 l.error 'simple error'
172 e(fs.readFileSync(l.file.path).toString()).to.eql ''
173 e(l.file.stream._buffer.length).to.be 2
174 setTimeout ->
175 e(fs.readFileSync(l.file.path).toString()).to.match ///
176 ^
177 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
178 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\swarn\n
179 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
180 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
181 $
182 ///
183 l.close done
184 , 300
185
186 it 'write multiple log when time out', (done)->
187 options.stdio = false
188 options.duration = 300
189 l = jl.create options
190 l.warn 'simple warn'
191 l.error 'simple error'
192 options2 =
193 file:
194 path : "[#{dir}/test1.txt]"
195 stdio : false
196 bufferLength : 5
197 duration : 900
198 l2 = jl.create options2
199 l2.warn 'log warn'
200 l2.error 'log error'
201 setTimeout ->
202 e(fs.readFileSync(l.file.path).toString()).to.eql ''
203 e(l.file.stream._buffer.length).to.be 2
204 e(fs.readFileSync(l2.file.path).toString()).to.eql ''
205 e(l2.file.stream._buffer.length).to.be 2
206 , 90
207 setTimeout ->
208 e(fs.readFileSync(l.file.path).toString()).to.match ///
209 ^
210 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
211 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\swarn\n
212 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
213 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
214 $
215 ///
216 e(fs.readFileSync(l2.file.path).toString()).to.eql ''
217 , 600
218 setTimeout ->
219 e(fs.readFileSync(l2.file.path).toString()).to.match ///
220 ^
221 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
222 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\slog\swarn\n
223 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
224 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\slog\serror\n
225 $
226 ///
227 ep([
228 ->
229 l.close @
230 , ->
231 l2.close @
232 ], ->
233 done()
234 ).run()
235 , 1200
236
237 describe 'end', ->
238 it 'close all log inst', (done)->
239 options.stdio = false
240 options.duration = 50
241 l = jl.create options
242 l.warn 'simple warn'
243 l.error 'simple error'
244 options2 =
245 file:
246 path : "[#{dir}/test1.txt]"
247 stdio : false
248 bufferLength : 5
249 duration : 500
250 l2 = jl.create options2
251 l2.warn 'log warn'
252 l2.error 'log error'
253 setTimeout ->
254 e(fs.readFileSync(l.file.path).toString()).to.match ///
255 ^
256 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
257 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\swarn\n
258 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
259 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\ssimple\serror\n
260 $
261 ///
262 e(fs.readFileSync(l2.file.path).toString()).to.eql ''
263 jl.end ->
264 e(fs.readFileSync(l2.file.path).toString()).to.match ///
265 ^
266 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
267 \[WARN\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\slog\swarn\n
268 \d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s
269 \[ERROR\]\s+\((out/test/)?tests/test-bufferlog\.(js|coffee):\d+\)\slog\serror\n
270 $
271 ///
272 done()
273 , 300
274