Pushing changes
This commit is contained in:
93
node_modules/streamroller/test/BaseRollingFileStream-test.js
generated
vendored
Normal file
93
node_modules/streamroller/test/BaseRollingFileStream-test.js
generated
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
"use strict";
|
||||
var should = require('should')
|
||||
, fs = require('fs')
|
||||
, sandbox = require('sandboxed-module');
|
||||
|
||||
describe('BaseRollingFileStream', function() {
|
||||
describe('when no filename is passed', function() {
|
||||
it('should throw an error', function() {
|
||||
var BaseRollingFileStream = require('../lib/BaseRollingFileStream');
|
||||
(function() {
|
||||
new BaseRollingFileStream();
|
||||
}).should.throw();
|
||||
});
|
||||
});
|
||||
|
||||
describe('default behaviour', function() {
|
||||
var stream;
|
||||
|
||||
before(function() {
|
||||
var BaseRollingFileStream = require('../lib/BaseRollingFileStream');
|
||||
stream = new BaseRollingFileStream('basetest.log');
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
fs.unlink('basetest.log', done);
|
||||
});
|
||||
|
||||
it('should not want to roll', function() {
|
||||
stream.shouldRoll().should.eql(false);
|
||||
});
|
||||
|
||||
it('should not roll', function() {
|
||||
var cbCalled = false;
|
||||
//just calls the callback straight away, no async calls
|
||||
stream.roll('basetest.log', function() { cbCalled = true; });
|
||||
cbCalled.should.eql(true);
|
||||
});
|
||||
|
||||
it('should pass options to the underlying write stream', function() {
|
||||
var underlyingStreamOptions;
|
||||
|
||||
var BaseRollingFileStream = sandbox.require(
|
||||
'../lib/BaseRollingFileStream',
|
||||
{
|
||||
requires: {
|
||||
'fs': {
|
||||
createWriteStream: function(filename, options) {
|
||||
underlyingStreamOptions = options;
|
||||
return {
|
||||
on: function() {}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
var stream = new BaseRollingFileStream('cheese.log', { encoding: 'utf904'});
|
||||
stream.openTheStream();
|
||||
|
||||
underlyingStreamOptions.should.eql({ encoding: 'utf904', mode: 420, flags: 'a'});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when end is called', function() {
|
||||
it('should close the underlying stream', function(done) {
|
||||
var stream = new (require('../lib/BaseRollingFileStream'))('cheese.log');
|
||||
|
||||
stream.theStream.on('close', function() {
|
||||
done();
|
||||
});
|
||||
|
||||
stream.end();
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the file is in a non-existent directory', function() {
|
||||
var stream;
|
||||
before(function() {
|
||||
var BaseRollingFileStream = require('../lib/BaseRollingFileStream');
|
||||
stream = new BaseRollingFileStream('subdir/test.log');
|
||||
});
|
||||
|
||||
after(function() {
|
||||
fs.unlinkSync('subdir/test.log');
|
||||
fs.rmdir('subdir');
|
||||
});
|
||||
|
||||
it('should create the directory', function() {
|
||||
fs.existsSync('subdir/test.log').should.eql(true);
|
||||
stream.end();
|
||||
});
|
||||
});
|
||||
});
|
508
node_modules/streamroller/test/DateRollingFileStream-test.js
generated
vendored
Normal file
508
node_modules/streamroller/test/DateRollingFileStream-test.js
generated
vendored
Normal file
@ -0,0 +1,508 @@
|
||||
"use strict";
|
||||
var should = require('should')
|
||||
, fs = require('fs')
|
||||
, zlib = require('zlib')
|
||||
, util = require('util')
|
||||
, async = require('async')
|
||||
, format = require('date-format')
|
||||
, streams = require('readable-stream')
|
||||
, DateRollingFileStream
|
||||
, testTime = new Date(2012, 8, 12, 10, 37, 11);
|
||||
|
||||
DateRollingFileStream = require('../lib').DateRollingFileStream;
|
||||
|
||||
function remove(filename, cb) {
|
||||
fs.unlink(filename, function () {
|
||||
cb();
|
||||
});
|
||||
}
|
||||
|
||||
function now() {
|
||||
return testTime.getTime();
|
||||
}
|
||||
|
||||
describe('DateRollingFileStream', function () {
|
||||
describe('arguments', function () {
|
||||
var stream;
|
||||
|
||||
before(function (done) {
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/test-date-rolling-file-stream-1',
|
||||
'yyyy-mm-dd.hh'
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-1', done);
|
||||
});
|
||||
|
||||
it('should take a filename and a pattern and return a WritableStream', function (done) {
|
||||
stream.filename.should.eql(__dirname + '/test-date-rolling-file-stream-1');
|
||||
stream.pattern.should.eql('yyyy-mm-dd.hh');
|
||||
stream.should.be.instanceOf(streams.Writable);
|
||||
done();
|
||||
});
|
||||
|
||||
it('with default settings for the underlying stream', function (done) {
|
||||
stream.theStream.mode.should.eql(420);
|
||||
stream.theStream.flags.should.eql('a');
|
||||
//encoding is not available on the underlying stream
|
||||
//assert.equal(stream.encoding, 'utf8');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('default arguments', function () {
|
||||
var stream;
|
||||
|
||||
before(function(done) {
|
||||
stream = new DateRollingFileStream(__dirname + '/test-date-rolling-file-stream-2');
|
||||
done();
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-2', done);
|
||||
});
|
||||
|
||||
it('should have pattern of .yyyy-MM-dd', function (done) {
|
||||
stream.pattern.should.eql('.yyyy-MM-dd');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('with stream arguments', function () {
|
||||
var stream;
|
||||
|
||||
before(function(done) {
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/test-date-rolling-file-stream-3',
|
||||
'yyyy-MM-dd',
|
||||
{mode: parseInt('0666', 8)}
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-3', done);
|
||||
});
|
||||
|
||||
it('should pass them to the underlying stream', function (done) {
|
||||
stream.theStream.mode.should.eql(parseInt('0666', 8));
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('with stream arguments but no pattern', function () {
|
||||
var stream;
|
||||
|
||||
before(function (done) {
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/test-date-rolling-file-stream-4',
|
||||
{mode: parseInt('0666', 8)}
|
||||
);
|
||||
done();
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-4', done);
|
||||
});
|
||||
|
||||
it('should pass them to the underlying stream', function (done) {
|
||||
stream.theStream.mode.should.eql(parseInt('0666', 8));
|
||||
done();
|
||||
});
|
||||
|
||||
it('should use default pattern', function (done) {
|
||||
stream.pattern.should.eql('.yyyy-MM-dd');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('with a pattern of .yyyy-MM-dd', function () {
|
||||
var stream;
|
||||
|
||||
before(function (done) {
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/test-date-rolling-file-stream-5', '.yyyy-MM-dd',
|
||||
null,
|
||||
now
|
||||
);
|
||||
stream.write("First message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-5', done);
|
||||
});
|
||||
|
||||
it('should create a file with the base name', function (done) {
|
||||
fs.readFile(__dirname + '/test-date-rolling-file-stream-5', 'utf8', function (err, contents) {
|
||||
contents.should.eql("First message\n");
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the day changes', function () {
|
||||
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 13, 0, 10, 12);
|
||||
stream.write("Second message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-5.2012-09-12', done);
|
||||
});
|
||||
|
||||
describe('the number of files', function () {
|
||||
var files = [];
|
||||
|
||||
before(function (done) {
|
||||
fs.readdir(__dirname, function (err, list) {
|
||||
files = list;
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should be two', function (done) {
|
||||
files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('test-date-rolling-file-stream-5') > -1;
|
||||
}
|
||||
).should.have.length(2);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('the file without a date', function () {
|
||||
it('should contain the second message', function (done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-date-rolling-file-stream-5', 'utf8',
|
||||
function (err, contents) {
|
||||
contents.should.eql("Second message\n");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('the file with the date', function () {
|
||||
it('should contain the first message', function (done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-date-rolling-file-stream-5.2012-09-12', 'utf8',
|
||||
function (err, contents) {
|
||||
contents.should.eql("First message\n");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('with alwaysIncludePattern', function () {
|
||||
var stream;
|
||||
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 12, 0, 10, 12);
|
||||
remove(
|
||||
__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12',
|
||||
function () {
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/test-date-rolling-file-stream-pattern',
|
||||
'.yyyy-MM-dd',
|
||||
{alwaysIncludePattern: true},
|
||||
now
|
||||
);
|
||||
stream.write("First message\n", 'utf8', done);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', done);
|
||||
});
|
||||
|
||||
it('should create a file with the pattern set', function (done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', 'utf8',
|
||||
function (err, contents) {
|
||||
contents.should.eql("First message\n");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
describe('when the day changes', function () {
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 13, 0, 10, 12);
|
||||
stream.write("Second message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-13', done);
|
||||
});
|
||||
|
||||
describe('the number of files', function () {
|
||||
it('should be two', function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('test-date-rolling-file-stream-pattern') > -1;
|
||||
}
|
||||
).should.have.length(2);
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('the file with the later date', function () {
|
||||
it('should contain the second message', function (done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-date-rolling-file-stream-pattern.2012-09-13', 'utf8',
|
||||
function (err, contents) {
|
||||
contents.should.eql("Second message\n");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('the file with the date', function () {
|
||||
it('should contain the first message', function (done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', 'utf8',
|
||||
function (err, contents) {
|
||||
contents.should.eql("First message\n");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('with compress option', function () {
|
||||
var stream;
|
||||
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 12, 0, 10, 12);
|
||||
stream = new DateRollingFileStream(
|
||||
__dirname + '/compressed.log',
|
||||
'.yyyy-MM-dd',
|
||||
{compress: true},
|
||||
now
|
||||
);
|
||||
stream.write("First message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
describe('when the day changes', function () {
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 13, 0, 10, 12);
|
||||
stream.write("Second message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
it('should be two files, one compressed', function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
var logFiles = files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('compressed.log') > -1;
|
||||
}
|
||||
);
|
||||
logFiles.should.have.length(2);
|
||||
|
||||
zlib.gunzip(
|
||||
fs.readFileSync(__dirname + '/compressed.log.2012-09-12.gz'),
|
||||
function (err, contents) {
|
||||
contents.toString('utf8').should.eql('First message\n');
|
||||
fs.readFileSync(__dirname + '/compressed.log', 'utf8').should.eql('Second message\n');
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
remove(
|
||||
__dirname + '/compressed.log',
|
||||
function () {
|
||||
remove(__dirname + '/compressed.log.2012-09-12.gz', done);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('with daysToKeep option', function () {
|
||||
var stream;
|
||||
var daysToKeep = 4;
|
||||
var numOriginalLogs = 10;
|
||||
|
||||
before(function (done) {
|
||||
var day = 0;
|
||||
var streams = [];
|
||||
async.whilst(
|
||||
function () {
|
||||
return day < numOriginalLogs;
|
||||
},
|
||||
function (nextCallback) {
|
||||
testTime = new Date(2012, 8, 20 - day, 0, 10, 12);
|
||||
var currentStream = new DateRollingFileStream(
|
||||
__dirname + '/daysToKeep.log',
|
||||
'.yyyy-MM-dd',
|
||||
{
|
||||
alwaysIncludePattern: true,
|
||||
daysToKeep: daysToKeep
|
||||
},
|
||||
now
|
||||
);
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
currentStream.write(util.format("Message on day %d\n", day), 'utf8', callback);
|
||||
},
|
||||
function (callback) {
|
||||
fs.utimes(currentStream.filename, testTime, testTime, callback);
|
||||
}
|
||||
],
|
||||
function (err) {
|
||||
day++;
|
||||
streams.push(currentStream);
|
||||
nextCallback(err);
|
||||
});
|
||||
},
|
||||
function (err, n) {
|
||||
stream = streams[0];
|
||||
done(err);
|
||||
});
|
||||
|
||||
describe('when the day changes', function () {
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 21, 0, 10, 12);
|
||||
stream.write("Second message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
it('should be daysToKeep + 1 files left from numOriginalLogs', function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
var logFiles = files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('daysToKeep.log') > -1;
|
||||
}
|
||||
);
|
||||
logFiles.should.have.length(daysToKeep + 1);
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
var logFiles = files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('daysToKeep.log') > -1;
|
||||
}
|
||||
);
|
||||
async.each(logFiles, function (logFile, nextCallback) {
|
||||
remove(__dirname + "/" + logFile, nextCallback);
|
||||
},
|
||||
function (err) {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('with daysToKeep and compress options', function () {
|
||||
var stream;
|
||||
var daysToKeep = 4;
|
||||
var numOriginalLogs = 10;
|
||||
|
||||
before(function (done) {
|
||||
var day = 0;
|
||||
var streams = [];
|
||||
async.whilst(
|
||||
function () {
|
||||
return day < numOriginalLogs;
|
||||
},
|
||||
function (nextCallback) {
|
||||
testTime = new Date(2012, 8, 20 - day, 0, 10, 12);
|
||||
var currentStream = new DateRollingFileStream(
|
||||
__dirname + '/compressedDaysToKeep.log',
|
||||
'.yyyy-MM-dd',
|
||||
{
|
||||
alwaysIncludePattern: true,
|
||||
compress: true,
|
||||
daysToKeep: daysToKeep
|
||||
},
|
||||
now
|
||||
);
|
||||
async.waterfall([
|
||||
function (callback) {
|
||||
currentStream.write(util.format("Message on day %d\n", day), 'utf8', callback);
|
||||
},
|
||||
function (callback) {
|
||||
currentStream.compress(currentStream.filename, callback);
|
||||
},
|
||||
function (callback) {
|
||||
fs.utimes(currentStream.filename + ".gz", testTime, testTime, callback);
|
||||
}
|
||||
],
|
||||
function (err) {
|
||||
day++;
|
||||
streams.push(currentStream);
|
||||
nextCallback(err);
|
||||
});
|
||||
},
|
||||
function (err, n) {
|
||||
|
||||
// Uncompress the most recent stream which will be the one we roll over
|
||||
// for testing
|
||||
stream = streams[0];
|
||||
var compressedFilename = stream.filename + '.gz';
|
||||
var gzip = zlib.createGzip();
|
||||
var inp = fs.createReadStream(compressedFilename);
|
||||
var out = fs.createWriteStream(stream.filename);
|
||||
inp.pipe(gzip).pipe(out);
|
||||
|
||||
out.on('finish', function (err) {
|
||||
fs.unlink(compressedFilename, done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the day changes', function () {
|
||||
before(function (done) {
|
||||
testTime = new Date(2012, 8, 21, 0, 10, 12);
|
||||
stream.write("New file message\n", 'utf8', done);
|
||||
});
|
||||
|
||||
it('should be 4 files left from original 3', function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
var logFiles = files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('compressedDaysToKeep.log') > -1;
|
||||
}
|
||||
);
|
||||
logFiles.should.have.length(daysToKeep + 1);
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
fs.readdir(__dirname, function (err, files) {
|
||||
var logFiles = files.filter(
|
||||
function (file) {
|
||||
return file.indexOf('compressedDaysToKeep.log') > -1;
|
||||
}
|
||||
);
|
||||
async.each(logFiles, function (logFile, nextCallback) {
|
||||
remove(__dirname + "/" + logFile, nextCallback);
|
||||
},
|
||||
function (err) {
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
357
node_modules/streamroller/test/RollingFileStream-test.js
generated
vendored
Normal file
357
node_modules/streamroller/test/RollingFileStream-test.js
generated
vendored
Normal file
@ -0,0 +1,357 @@
|
||||
"use strict";
|
||||
var async = require('async')
|
||||
, should = require('should')
|
||||
, fs = require('fs')
|
||||
, path = require('path')
|
||||
, zlib = require('zlib')
|
||||
, streams = require('readable-stream')
|
||||
, RollingFileStream = require('../lib').RollingFileStream;
|
||||
|
||||
function remove(filename, cb) {
|
||||
fs.unlink(filename, function(err) { cb(); });
|
||||
}
|
||||
|
||||
function create(filename, cb) {
|
||||
fs.writeFile(filename, "test file", cb);
|
||||
}
|
||||
|
||||
describe('RollingFileStream', function() {
|
||||
|
||||
describe('arguments', function() {
|
||||
var stream;
|
||||
|
||||
before(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream", function() {
|
||||
stream = new RollingFileStream(__dirname + "/test-rolling-file-stream", 1024, 5);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream", done);
|
||||
});
|
||||
|
||||
it('should take a filename, file size (bytes), no. backups, return Writable', function() {
|
||||
stream.should.be.an.instanceOf(streams.Writable);
|
||||
stream.filename.should.eql(__dirname + "/test-rolling-file-stream");
|
||||
stream.size.should.eql(1024);
|
||||
stream.backups.should.eql(5);
|
||||
});
|
||||
|
||||
it('should apply default settings to the underlying stream', function() {
|
||||
stream.theStream.mode.should.eql(420);
|
||||
stream.theStream.flags.should.eql('a');
|
||||
//encoding isn't a property on the underlying stream
|
||||
//assert.equal(stream.theStream.encoding, 'utf8');
|
||||
});
|
||||
});
|
||||
|
||||
describe('with stream arguments', function() {
|
||||
it('should pass them to the underlying stream', function() {
|
||||
var stream = new RollingFileStream(
|
||||
__dirname + '/test-rolling-file-stream',
|
||||
1024,
|
||||
5,
|
||||
{ mode: parseInt('0666', 8) }
|
||||
);
|
||||
stream.theStream.mode.should.eql(parseInt('0666', 8));
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
remove(__dirname + '/test-rolling-file-stream', done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('without size', function() {
|
||||
it('should default to max int size', function() {
|
||||
var stream = new RollingFileStream(__dirname + "/test-rolling-file-stream");
|
||||
stream.size.should.eql(Number.MAX_SAFE_INTEGER);
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream", done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('without number of backups', function() {
|
||||
it('should default to 1 backup', function() {
|
||||
var stream = new RollingFileStream(__dirname + "/test-rolling-file-stream", 1024);
|
||||
stream.backups.should.eql(1);
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream", done);
|
||||
});
|
||||
});
|
||||
|
||||
describe('writing less than the file size', function() {
|
||||
|
||||
before(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream-write-less", function() {
|
||||
var stream = new RollingFileStream(
|
||||
__dirname + "/test-rolling-file-stream-write-less",
|
||||
100
|
||||
);
|
||||
stream.write("cheese", "utf8", function() {
|
||||
stream.end(done);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
remove(__dirname + "/test-rolling-file-stream-write-less", done);
|
||||
});
|
||||
|
||||
it('should write to the file', function(done) {
|
||||
fs.readFile(
|
||||
__dirname + "/test-rolling-file-stream-write-less", "utf8",
|
||||
function(err, contents) {
|
||||
contents.should.eql("cheese");
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('should write one file', function(done) {
|
||||
fs.readdir(__dirname, function(err, files) {
|
||||
files.filter(
|
||||
function(file) { return file.indexOf('test-rolling-file-stream-write-less') > -1; }
|
||||
).should.have.length(1);
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('writing more than the file size', function() {
|
||||
before(function(done) {
|
||||
async.forEach(
|
||||
[
|
||||
__dirname + "/test-rolling-file-stream-write-more",
|
||||
__dirname + "/test-rolling-file-stream-write-more.1"
|
||||
],
|
||||
remove,
|
||||
function() {
|
||||
var stream = new RollingFileStream(
|
||||
__dirname + "/test-rolling-file-stream-write-more",
|
||||
45
|
||||
);
|
||||
async.forEachSeries(
|
||||
[0, 1, 2, 3, 4, 5, 6],
|
||||
function(i, cb) {
|
||||
stream.write(i +".cheese\n", "utf8", cb);
|
||||
},
|
||||
function() {
|
||||
stream.end(done);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
async.forEach(
|
||||
[
|
||||
__dirname + "/test-rolling-file-stream-write-more",
|
||||
__dirname + "/test-rolling-file-stream-write-more.1"
|
||||
],
|
||||
remove,
|
||||
done
|
||||
);
|
||||
});
|
||||
|
||||
it('should write two files' , function(done) {
|
||||
fs.readdir(__dirname, function(err, files) {
|
||||
files.filter(
|
||||
function(file) {
|
||||
return file.indexOf('test-rolling-file-stream-write-more') > -1;
|
||||
}
|
||||
).should.have.length(2);
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should write the last two log messages to the first file', function(done) {
|
||||
fs.readFile(
|
||||
__dirname + "/test-rolling-file-stream-write-more", "utf8",
|
||||
function(err, contents) {
|
||||
contents.should.eql('5.cheese\n6.cheese\n');
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
|
||||
it('should write the first five log messages to the second file', function(done) {
|
||||
fs.readFile(
|
||||
__dirname + '/test-rolling-file-stream-write-more.1', "utf8",
|
||||
function(err, contents) {
|
||||
contents.should.eql('0.cheese\n1.cheese\n2.cheese\n3.cheese\n4.cheese\n');
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('with options.compress = true', function() {
|
||||
before(function(done) {
|
||||
var stream = new RollingFileStream(
|
||||
path.join(__dirname, 'compressed-backups.log'),
|
||||
30, //30 bytes max size
|
||||
2, //two backup files to keep
|
||||
{ compress: true }
|
||||
);
|
||||
async.forEachSeries(
|
||||
[
|
||||
"This is the first log message.",
|
||||
"This is the second log message.",
|
||||
"This is the third log message.",
|
||||
"This is the fourth log message."
|
||||
],
|
||||
function(i, cb) {
|
||||
stream.write(i + "\n", "utf8", cb);
|
||||
},
|
||||
function() {
|
||||
stream.end(done);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it('should produce three files, with the backups compressed', function(done) {
|
||||
fs.readdir(__dirname, function(err, files) {
|
||||
var testFiles = files.filter(
|
||||
function(f) { return f.indexOf('compressed-backups.log') > -1; }
|
||||
).sort();
|
||||
|
||||
testFiles.length.should.eql(3);
|
||||
testFiles.should.eql([
|
||||
'compressed-backups.log',
|
||||
'compressed-backups.log.1.gz',
|
||||
'compressed-backups.log.2.gz',
|
||||
]);
|
||||
|
||||
fs.readFile(path.join(__dirname, testFiles[0]), 'utf8', function(err, contents) {
|
||||
contents.should.eql('This is the fourth log message.\n');
|
||||
|
||||
zlib.gunzip(fs.readFileSync(path.join(__dirname, testFiles[1])),
|
||||
function(err, contents) {
|
||||
contents.toString('utf8').should.eql('This is the third log message.\n');
|
||||
zlib.gunzip(fs.readFileSync(path.join(__dirname, testFiles[2])),
|
||||
function(err, contents) {
|
||||
contents.toString('utf8').should.eql('This is the second log message.\n');
|
||||
done(err);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
async.forEach([
|
||||
path.join(__dirname, 'compressed-backups.log'),
|
||||
path.join(__dirname, 'compressed-backups.log.1.gz'),
|
||||
path.join(__dirname, 'compressed-backups.log.2.gz'),
|
||||
], remove, done);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('when many files already exist', function() {
|
||||
before(function(done) {
|
||||
async.forEach(
|
||||
[
|
||||
__dirname + '/test-rolling-stream-with-existing-files.11',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.20',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.-1',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.1.1',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.1'
|
||||
],
|
||||
remove,
|
||||
function(err) {
|
||||
if (err) done(err);
|
||||
|
||||
async.forEach(
|
||||
[
|
||||
__dirname + '/test-rolling-stream-with-existing-files.11',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.20',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.-1',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.1.1',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.1'
|
||||
],
|
||||
create,
|
||||
function(err) {
|
||||
if (err) done(err);
|
||||
|
||||
var stream = new RollingFileStream(
|
||||
__dirname + "/test-rolling-stream-with-existing-files",
|
||||
45,
|
||||
5
|
||||
);
|
||||
|
||||
async.forEachSeries(
|
||||
[0, 1, 2, 3, 4, 5, 6],
|
||||
function(i, cb) {
|
||||
stream.write(i +".cheese\n", "utf8", cb);
|
||||
},
|
||||
function() {
|
||||
stream.end(done);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
after(function(done) {
|
||||
async.forEach([
|
||||
__dirname + '/test-rolling-stream-with-existing-files',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.0',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.1',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.2',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.3',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.4',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.5',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.11',
|
||||
__dirname + '/test-rolling-stream-with-existing-files.20'
|
||||
], remove, done);
|
||||
});
|
||||
|
||||
it('should roll the files', function(done) {
|
||||
fs.readdir(__dirname, function(err, files) {
|
||||
files.should.include('test-rolling-stream-with-existing-files');
|
||||
files.should.include('test-rolling-stream-with-existing-files.1');
|
||||
files.should.include('test-rolling-stream-with-existing-files.2');
|
||||
files.should.include('test-rolling-stream-with-existing-files.11');
|
||||
files.should.include('test-rolling-stream-with-existing-files.20');
|
||||
done(err);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when the directory gets deleted', function() {
|
||||
var stream;
|
||||
before(function(done) {
|
||||
stream = new RollingFileStream(path.join('subdir', 'test-rolling-file-stream'), 5, 5);
|
||||
stream.write('initial', 'utf8', done);
|
||||
});
|
||||
|
||||
after(function() {
|
||||
fs.unlinkSync(path.join('subdir', 'test-rolling-file-stream'));
|
||||
fs.rmdirSync('subdir');
|
||||
});
|
||||
|
||||
it('handles directory deletion gracefully', function(done) {
|
||||
stream.theStream.on('error', done);
|
||||
|
||||
remove(path.join('subdir', 'test-rolling-file-stream'), function() {
|
||||
fs.rmdir('subdir', function() {
|
||||
stream.write('rollover', 'utf8', function() {
|
||||
fs.readFileSync(path.join('subdir', 'test-rolling-file-stream'), 'utf8')
|
||||
.should.eql('rollover');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
28
node_modules/streamroller/test/read-only-file-test.js
generated
vendored
Normal file
28
node_modules/streamroller/test/read-only-file-test.js
generated
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
"use strict";
|
||||
var should = require('should')
|
||||
, fs = require('fs')
|
||||
, path = require('path')
|
||||
, streamroller = require('../lib/index.js');
|
||||
|
||||
describe('when the destination file is read-only', function() {
|
||||
var testFile = path.join(__dirname, 'read-only-file.log');
|
||||
before(function() {
|
||||
fs.writeFileSync(
|
||||
testFile,
|
||||
"Some test content"
|
||||
);
|
||||
fs.chmodSync(testFile, 292 /* 0o444 - octal literals not allowed in old node */);
|
||||
});
|
||||
|
||||
it('should generate an error when writing', function(done) {
|
||||
var stream = new streamroller.RollingFileStream(testFile);
|
||||
stream.on('error', function(e) {
|
||||
e.code.should.eql('EACCES');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
after(function() {
|
||||
fs.unlinkSync(testFile);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user