123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 'use strict';
- /*
- * file-stress.test.js: Tests for stressing File transport: volume, ambient event loop lag.
- *
- * (C) 2016 Charlie Robbins
- * MIT LICENSE
- *
- */
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const assume = require('assume');
- const helpers = require('../helpers');
- const split = require('split2');
- const winston = require('../../lib/winston');
- describe('File (stress)', function () {
- this.timeout(30 * 1000);
- const logPath = path.resolve(__dirname, '../fixtures/logs/file-stress-test.log');
- beforeEach(function () {
- try {
- fs.unlinkSync(logPath);
- } catch (ex) {
- if (ex && ex.code !== 'ENOENT') { return done(ex); }
- }
- });
- it('should handle a high volume of writes', function (done) {
- const logger = winston.createLogger({
- transports: [new winston.transports.File({
- filename: logPath
- })]
- });
- const counters = {
- write: 0,
- read: 0
- };
- const interval = setInterval(function () {
- logger.info(++counters.write);
- }, 0);
- setTimeout(function () {
- clearInterval(interval);
- helpers.tryRead(logPath)
- .on('error', function (err) {
- assume(err).false();
- logger.close();
- done();
- })
- .pipe(split())
- .on('data', function (d) {
- const json = JSON.parse(d);
- assume(json.level).equal('info');
- assume(json.message).equal(++counters.read);
- })
- .on('end', function () {
- assume(counters.write).equal(counters.read);
- logger.close();
- done();
- });
- }, 10000);
- });
- it('should handle a high volume of large writes', function (done) {
- const logger = winston.createLogger({
- transports: [new winston.transports.File({
- filename: logPath
- })]
- });
- const counters = {
- write: 0,
- read: 0
- };
- const interval = setInterval(function () {
- const msg = {
- counter: ++counters.write,
- message: 'a'.repeat(16384 - os.EOL.length - 1)
- };
- logger.info(msg);
- }, 0);
- setTimeout(function () {
- clearInterval(interval);
- helpers.tryRead(logPath)
- .on('error', function (err) {
- assume(err).false();
- logger.close();
- done();
- })
- .pipe(split())
- .on('data', function (d) {
- const json = JSON.parse(d);
- assume(json.level).equal('info');
- assume(json.message).equal('a'.repeat(16384 - os.EOL.length - 1));
- assume(json.counter).equal(++counters.read);
- })
- .on('end', function () {
- assume(counters.write).equal(counters.read);
- logger.close();
- done();
- });
- }, 10000);
- });
- it('should handle a high volume of large writes synchronous', function (done) {
- const logger = winston.createLogger({
- transports: [new winston.transports.File({
- filename: logPath
- })]
- });
- const counters = {
- write: 0,
- read: 0
- };
- const msgs = new Array(10).fill().map(() => ({
- counter: ++counters.write,
- message: 'a'.repeat(16384 - os.EOL.length - 1)
- }));
- msgs.forEach(msg => logger.info(msg));
- setTimeout(function () {
- helpers.tryRead(logPath)
- .on('error', function (err) {
- assume(err).false();
- logger.close();
- done();
- })
- .pipe(split())
- .on('data', function (d) {
- const json = JSON.parse(d);
- assume(json.level).equal('info');
- assume(json.message).equal('a'.repeat(16384 - os.EOL.length - 1));
- assume(json.counter).equal(++counters.read);
- })
- .on('end', function () {
- assume(counters.write).equal(counters.read);
- logger.close();
- done();
- });
- }, 10000);
- });
- });
|