file-tailrolling.test.js
2.83 KB
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
var assert = require('assert'),
rimraf = require('rimraf'),
fs = require('fs'),
path = require('path'),
winston = require('../../lib/winston'),
helpers = require('../helpers');
const asyncSeries = require('async/series');
const { MESSAGE, LEVEL } = require('triple-beam');
//
// Remove all log fixtures
//
function removeFixtures(done) {
rimraf(path.join(__dirname, '..', 'fixtures', 'logs', 'testtailrollingfiles*'), done);
}
let tailrollTransport = null;
describe('winston/transports/file/tailrolling', function(){
describe("An instance of the File Transport", function(){
before(removeFixtures);
after(removeFixtures);
it('init logger AFTER cleaning up old files', function(){
tailrollTransport = new winston.transports.File({
timestamp: false,
json: false,
filename: path.join(__dirname, '..', 'fixtures', 'logs', 'testtailrollingfiles.log'),
maxsize: 4096,
maxFiles: 3,
tailable: true
})
.on('open', console.log)
});
it("and when passed more files than the maxFiles", function(done){
let created = 0;
let loggedTotal = 0;
function data(ch, kb) {
return String.fromCharCode(65 + ch).repeat(kb*1024 - 1);
};
function logKbytes(kbytes, txt) {
const toLog = {};
toLog[MESSAGE] = data(txt, kbytes)
tailrollTransport.log(toLog);
}
tailrollTransport.on('logged', function (info) {
loggedTotal += info[MESSAGE].length + 1
if (loggedTotal >= 14*1024) { // just over 3 x 4kb files
return done();
}
if(loggedTotal % 4096 === 0) {
created ++;
}
setTimeout(() => logKbytes(1, created), 100);
});
logKbytes(1, created);
});
it("should be 3 log files, base to maxFiles - 1", function () {
var file, fullpath;
for (var num = 0; num < 4; num++) {
file = !num ? 'testtailrollingfiles.log' : 'testtailrollingfiles' + num + '.log';
fullpath = path.join(__dirname, '..', 'fixtures', 'logs', file);
if (num == 3) {
return assert.ok(!fs.existsSync(fullpath));
}
assert.ok(fs.existsSync(fullpath));
}
return false;
});
it("should have files in correct order", function () {
var file, fullpath, content;
['D', 'C', 'B'].forEach(function (letter, i) {
file = !i ? 'testtailrollingfiles.log' : 'testtailrollingfiles' + i + '.log';
content = fs.readFileSync(path.join(__dirname, '..', 'fixtures', 'logs', file), 'ascii');
content = content.replace(/\s+/g, '');
assert(content.match(new RegExp(letter, 'g'))[0].length, content.length);
});
});
})
})