Files
elasticsearch-js/test/unit/test_file_logger.js
2013-12-04 17:02:34 -06:00

72 lines
1.9 KiB
JavaScript

var Log = require('../../src/lib/log');
var FileLogger = require('../../src/lib/loggers/file');
var sinon = require('sinon');
var once = require('events').EventEmitter.prototype.once;
var write = require('stream').Writable.prototype.write;
var MockWritableStream = require('../mocks/writable_stream');
var _ = require('lodash');
var parentLog;
var fs = require('fs');
beforeEach(function () {
parentLog = new Log();
});
afterEach(function () {
parentLog.close();
});
function makeLogger(parent, levels, path) {
parent = parent || parentLog;
var config = {
levels: Log.parseLevels(levels || 'trace'),
path: path === void 0 ? 'elasticsearch.log' : path
};
var logger = new FileLogger(parent, config);
logger.stream.end();
logger.stream = new MockWritableStream();
return logger;
}
var stub = require('./auto_release_stub').make();
describe('File Logger', function () {
require('./generic_logger_tests')(makeLogger);
describe('buffer flush', function () {
it('writes everything in the buffer to console.error', function () {
var line = 'This string is writte 10 times to create buffered output.\n';
var exitHandler;
stub(process, 'once', function (event, handler) {
if (event === 'exit') {
exitHandler = handler;
}
once.call(process, event, handler);
});
var logger = makeLogger();
// write the line 10 times
_.times(10, function () {
logger.onDebug(line);
});
// collect everything that is written to fs.appendFileSync
var flushedOutput = '';
stub(fs, 'appendFileSync', function (path, str) {
flushedOutput += str;
});
// call the event handler
exitHandler.call(process);
// the first line is sent immediately to _write and there is nothing we can do about that
flushedOutput.match(new RegExp(line, 'g')).length.should.eql(9);
});
});
});