| /* |
| * 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); |