You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.4 KiB
102 lines
3.4 KiB
/* |
|
* file-maxfiles-test.js: Tests for instances of the File transport setting the max file size, |
|
* and setting a number for max files created. |
|
* maxSize * maxFiles = total storage used by winston. |
|
* |
|
* (C) 2011 Daniel Aristizabal |
|
* MIT LICENSE |
|
* |
|
*/ |
|
|
|
var assert = require('assert'), |
|
exec = require('child_process').exec, |
|
fs = require('fs'), |
|
path = require('path'), |
|
vows = require('vows'), |
|
winston = require('../../lib/winston'), |
|
helpers = require('../helpers'); |
|
|
|
var maxfilesTransport = new winston.transports.File({ |
|
timestamp: false, |
|
json: false, |
|
filename: path.join(__dirname, '..', 'fixtures', 'logs', 'testmaxfiles.log'), |
|
maxsize: 4096, |
|
maxFiles: 3 |
|
}); |
|
|
|
vows.describe('winston/transports/file/maxfiles').addBatch({ |
|
"An instance of the File Transport": { |
|
"when passed a valid filename": { |
|
topic: maxfilesTransport, |
|
"should be a valid transporter": function (transportTest) { |
|
helpers.assertFile(transportTest); |
|
}, |
|
"should set the maxFiles option correctly": function (transportTest) { |
|
assert.isNumber(transportTest.maxFiles); |
|
} |
|
}, |
|
"when delete old test files": { |
|
topic: function () { |
|
exec('rm -rf ' + path.join(__dirname, '..', 'fixtures', 'logs', 'testmaxfiles*'), this.callback); |
|
}, |
|
"and when passed more files than the maxFiles": { |
|
topic: function () { |
|
var that = this, |
|
created = 0; |
|
|
|
function data(ch) { |
|
return new Array(1018).join(String.fromCharCode(65 + ch)); |
|
}; |
|
|
|
function logKbytes(kbytes, txt) { |
|
// |
|
// With no timestamp and at the info level, |
|
// winston adds exactly 7 characters: |
|
// [info](4)[ :](2)[\n](1) |
|
// |
|
for (var i = 0; i < kbytes; i++) { |
|
maxfilesTransport.log('info', data(txt), null, function () { }); |
|
} |
|
} |
|
|
|
maxfilesTransport.on('logged', function () { |
|
if (++created === 6) { |
|
return that.callback(); |
|
} |
|
|
|
logKbytes(4, created); |
|
}); |
|
|
|
logKbytes(4, created); |
|
}, |
|
"should be only 3 files called 5.log, 4.log and 3.log": function () { |
|
for (var num = 0; num < 6; num++) { |
|
var file = !num ? 'testmaxfiles.log' : 'testmaxfiles' + num + '.log', |
|
fullpath = path.join(__dirname, '..', 'fixtures', 'logs', file); |
|
|
|
// There should be no files with that name |
|
if (num >= 0 && num < 3) { |
|
return assert.throws(function () { |
|
fs.statSync(file); |
|
}, Error); |
|
} |
|
|
|
// The other files should be exist |
|
assert.doesNotThrow(function () { |
|
fs.statSync(file); |
|
}, Error); |
|
} |
|
}, |
|
"should have the correct content": function () { |
|
['D', 'E', 'F'].forEach(function (name, inx) { |
|
var counter = inx + 3, |
|
logsDir = path.join(__dirname, '..', 'fixtures', 'logs'), |
|
content = fs.readFileSync(path.join(logsDir, 'testmaxfiles' + counter + '.log'), 'utf-8'); |
|
// The content minus the 7 characters added by winston |
|
assert.lengthOf(content.match(new RegExp(name, 'g')), 4068); |
|
}); |
|
} |
|
} |
|
} |
|
} |
|
}).export(module); |