2 var vows = require('vows')
3 , assert = require('assert')
4 , util = require('util')
5 , EE = require('events').EventEmitter
6 , levels = require('../lib/levels');
8 function MockLogger() {
13 this.log = function(level, message, exception) {
14 that.messages.push({ level: level, message: message });
17 this.isLevelEnabled = function(level) {
18 return level.isGreaterThanOrEqualTo(that.level);
21 this.level = levels.TRACE;
25 function MockRequest(remoteAddr, method, originalUrl) {
27 this.socket = { remoteAddress: remoteAddr };
28 this.originalUrl = originalUrl;
30 this.httpVersionMajor = '5';
31 this.httpVersionMinor = '0';
35 function MockResponse(statusCode) {
37 this.statusCode = statusCode;
39 this.end = function(chunk, encoding) {
43 util.inherits(MockResponse, EE);
45 vows.describe('log4js connect logger').addBatch({
46 'getConnectLoggerModule': {
48 var clm = require('../lib/connect-logger');
52 'should return a "connect logger" factory' : function(clm) {
57 topic: function(clm) {
58 var ml = new MockLogger();
59 var cl = clm.connectLogger(ml, { nolog: "\\.gif" });
60 return {cl: cl, ml: ml};
63 'check unmatch url request': {
65 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif
66 var res = new MockResponse(200);
67 var cb = this.callback;
68 d.cl(req, res, function() { });
69 res.end('chunk', 'encoding');
70 setTimeout(function() {
71 cb(null, d.ml.messages);
74 'check message': function(messages){
75 assert.isArray(messages);
76 assert.equal(messages.length, 1);
77 assert.ok(levels.INFO.isEqualTo(messages[0].level));
78 assert.include(messages[0].message, 'GET');
79 assert.include(messages[0].message, 'http://url');
80 assert.include(messages[0].message, 'my.remote.addr');
81 assert.include(messages[0].message, '200');
86 'check match url request': {
88 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif
89 var res = new MockResponse(200);
90 var cb = this.callback;
91 d.cl(req, res, function() { });
92 res.end('chunk', 'encoding');
93 setTimeout(function() {
94 cb(null, d.ml.messages);
97 'check message': function(messages) {
98 assert.isArray(messages);
99 assert.equal(messages.length, 0);
105 topic: function(clm) {
106 var ml = new MockLogger();
107 var cl = clm.connectLogger(ml, {nolog: "\\.gif|\\.jpe?g"});
108 return {cl: cl, ml: ml};
111 'check unmatch url request (png)': {
113 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif
114 var res = new MockResponse(200);
115 var cb = this.callback;
116 d.cl(req, res, function() { });
117 res.end('chunk', 'encoding');
118 setTimeout(function() {
119 cb(null, d.ml.messages);
122 'check message': function(messages){
123 assert.isArray(messages);
124 assert.equal(messages.length, 1);
125 assert.ok(levels.INFO.isEqualTo(messages[0].level));
126 assert.include(messages[0].message, 'GET');
127 assert.include(messages[0].message, 'http://url');
128 assert.include(messages[0].message, 'my.remote.addr');
129 assert.include(messages[0].message, '200');
134 'check match url request (gif)': {
136 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif
137 var res = new MockResponse(200);
138 var cb = this.callback;
139 d.cl(req, res, function() { });
140 res.end('chunk', 'encoding');
141 setTimeout(function() {
142 cb(null, d.ml.messages);
145 'check message': function(messages) {
146 assert.isArray(messages);
147 assert.equal(messages.length, 0);
150 'check match url request (jpeg)': {
152 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif
153 var res = new MockResponse(200);
154 var cb = this.callback;
155 d.cl(req, res, function() { });
156 res.end('chunk', 'encoding');
157 setTimeout(function() {
158 cb(null, d.ml.messages);
161 'check message': function(messages) {
162 assert.isArray(messages);
163 assert.equal(messages.length, 0);
167 'nolog Array<String>' : {
168 topic: function(clm) {
169 var ml = new MockLogger();
170 var cl = clm.connectLogger(ml, {nolog: ["\\.gif", "\\.jpe?g"]});
171 return {cl: cl, ml: ml};
174 'check unmatch url request (png)': {
176 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif
177 var res = new MockResponse(200);
178 var cb = this.callback;
179 d.cl(req, res, function() { });
180 res.end('chunk', 'encoding');
181 setTimeout(function() {
182 cb(null, d.ml.messages);
185 'check message': function(messages){
186 assert.isArray(messages);
187 assert.equal(messages.length, 1);
188 assert.ok(levels.INFO.isEqualTo(messages[0].level));
189 assert.include(messages[0].message, 'GET');
190 assert.include(messages[0].message, 'http://url');
191 assert.include(messages[0].message, 'my.remote.addr');
192 assert.include(messages[0].message, '200');
197 'check match url request (gif)': {
199 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif
200 var res = new MockResponse(200);
201 var cb = this.callback;
202 d.cl(req, res, function() { });
203 res.end('chunk', 'encoding');
204 setTimeout(function() {
205 cb(null, d.ml.messages);
208 'check message': function(messages) {
209 assert.isArray(messages);
210 assert.equal(messages.length, 0);
214 'check match url request (jpeg)': {
216 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif
217 var res = new MockResponse(200);
218 var cb = this.callback;
219 d.cl(req, res, function() { });
220 res.end('chunk', 'encoding');
221 setTimeout(function() {
222 cb(null, d.ml.messages);
225 'check message': function(messages) {
226 assert.isArray(messages);
227 assert.equal(messages.length, 0);
232 topic: function(clm) {
233 var ml = new MockLogger();
234 var cl = clm.connectLogger(ml, {nolog: /\.gif|\.jpe?g/});
235 return {cl: cl, ml: ml};
238 'check unmatch url request (png)': {
240 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.png'); // not gif
241 var res = new MockResponse(200);
242 var cb = this.callback;
243 d.cl(req, res, function() { });
244 res.end('chunk', 'encoding');
245 setTimeout(function() {
246 cb(null, d.ml.messages);
249 'check message': function(messages){
250 assert.isArray(messages);
251 assert.equal(messages.length, 1);
252 assert.ok(levels.INFO.isEqualTo(messages[0].level));
253 assert.include(messages[0].message, 'GET');
254 assert.include(messages[0].message, 'http://url');
255 assert.include(messages[0].message, 'my.remote.addr');
256 assert.include(messages[0].message, '200');
261 'check match url request (gif)': {
263 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.gif'); // gif
264 var res = new MockResponse(200);
265 var cb = this.callback;
266 d.cl(req, res, function() { });
267 res.end('chunk', 'encoding');
268 setTimeout(function() {
269 cb(null, d.ml.messages);
272 'check message': function(messages) {
273 assert.isArray(messages);
274 assert.equal(messages.length, 0);
278 'check match url request (jpeg)': {
280 var req = new MockRequest('my.remote.addr', 'GET', 'http://url/hoge.jpeg'); // gif
281 var res = new MockResponse(200);
282 var cb = this.callback;
283 d.cl(req, res, function() { });
284 res.end('chunk', 'encoding');
285 setTimeout(function() {
286 cb(null, d.ml.messages);
289 'check message': function(messages) {
290 assert.isArray(messages);
291 assert.equal(messages.length, 0);