| 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);  });});
 |