123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- "use strict";
- var vows = require('vows')
- , assert = require('assert')
- , fs = require('fs')
- , semver = require('semver')
- , streams
- , DateRollingFileStream
- , testTime = new Date(2012, 8, 12, 10, 37, 11);
- if (semver.satisfies(process.version, '>=0.10.0')) {
- streams = require('stream');
- } else {
- streams = require('readable-stream');
- }
- DateRollingFileStream = require('../../lib/streams').DateRollingFileStream;
- function cleanUp(filename) {
- return function() {
- fs.unlink(filename);
- };
- }
- function now() {
- return testTime.getTime();
- }
- vows.describe('DateRollingFileStream').addBatch({
- 'arguments': {
- topic: new DateRollingFileStream(
- __dirname + '/test-date-rolling-file-stream-1',
- 'yyyy-mm-dd.hh'
- ),
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-1'),
-
- 'should take a filename and a pattern and return a WritableStream': function(stream) {
- assert.equal(stream.filename, __dirname + '/test-date-rolling-file-stream-1');
- assert.equal(stream.pattern, 'yyyy-mm-dd.hh');
- assert.instanceOf(stream, streams.Writable);
- },
- 'with default settings for the underlying stream': function(stream) {
- assert.equal(stream.theStream.mode, 420);
- assert.equal(stream.theStream.flags, 'a');
- //encoding is not available on the underlying stream
- //assert.equal(stream.encoding, 'utf8');
- }
- },
-
- 'default arguments': {
- topic: new DateRollingFileStream(__dirname + '/test-date-rolling-file-stream-2'),
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-2'),
-
- 'pattern should be .yyyy-MM-dd': function(stream) {
- assert.equal(stream.pattern, '.yyyy-MM-dd');
- }
- },
- 'with stream arguments': {
- topic: new DateRollingFileStream(
- __dirname + '/test-date-rolling-file-stream-3',
- 'yyyy-MM-dd',
- { mode: parseInt('0666', 8) }
- ),
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-3'),
-
- 'should pass them to the underlying stream': function(stream) {
- assert.equal(stream.theStream.mode, parseInt('0666', 8));
- }
- },
- 'with stream arguments but no pattern': {
- topic: new DateRollingFileStream(
- __dirname + '/test-date-rolling-file-stream-4',
- { mode: parseInt('0666', 8) }
- ),
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-4'),
-
- 'should pass them to the underlying stream': function(stream) {
- assert.equal(stream.theStream.mode, parseInt('0666', 8));
- },
- 'should use default pattern': function(stream) {
- assert.equal(stream.pattern, '.yyyy-MM-dd');
- }
- },
- 'with a pattern of .yyyy-MM-dd': {
- topic: function() {
- var that = this,
- stream = new DateRollingFileStream(
- __dirname + '/test-date-rolling-file-stream-5', '.yyyy-MM-dd',
- null,
- now
- );
- stream.write("First message\n", 'utf8', function() {
- that.callback(null, stream);
- });
- },
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-5'),
-
- 'should create a file with the base name': {
- topic: function(stream) {
- fs.readFile(__dirname + '/test-date-rolling-file-stream-5', this.callback);
- },
- 'file should contain first message': function(result) {
- assert.equal(result.toString(), "First message\n");
- }
- },
- 'when the day changes': {
- topic: function(stream) {
- testTime = new Date(2012, 8, 13, 0, 10, 12);
- stream.write("Second message\n", 'utf8', this.callback);
- },
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-5.2012-09-12'),
-
- 'the number of files': {
- topic: function() {
- fs.readdir(__dirname, this.callback);
- },
- 'should be two': function(files) {
- assert.equal(
- files.filter(
- function(file) {
- return file.indexOf('test-date-rolling-file-stream-5') > -1;
- }
- ).length,
- 2
- );
- }
- },
-
- 'the file without a date': {
- topic: function() {
- fs.readFile(__dirname + '/test-date-rolling-file-stream-5', this.callback);
- },
- 'should contain the second message': function(contents) {
- assert.equal(contents.toString(), "Second message\n");
- }
- },
-
- 'the file with the date': {
- topic: function() {
- fs.readFile(__dirname + '/test-date-rolling-file-stream-5.2012-09-12', this.callback);
- },
- 'should contain the first message': function(contents) {
- assert.equal(contents.toString(), "First message\n");
- }
- }
- }
- },
-
- 'with alwaysIncludePattern': {
- topic: function() {
- var that = this,
- testTime = new Date(2012, 8, 12, 0, 10, 12),
- stream = new DateRollingFileStream(
- __dirname + '/test-date-rolling-file-stream-pattern',
- '.yyyy-MM-dd',
- {alwaysIncludePattern: true},
- now
- );
- stream.write("First message\n", 'utf8', function() {
- that.callback(null, stream);
- });
- },
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12'),
-
- 'should create a file with the pattern set': {
- topic: function(stream) {
- fs.readFile(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-12', this.callback);
- },
- 'file should contain first message': function(result) {
- assert.equal(result.toString(), "First message\n");
- }
- },
-
- 'when the day changes': {
- topic: function(stream) {
- testTime = new Date(2012, 8, 13, 0, 10, 12);
- stream.write("Second message\n", 'utf8', this.callback);
- },
- teardown: cleanUp(__dirname + '/test-date-rolling-file-stream-pattern.2012-09-13'),
-
-
- 'the number of files': {
- topic: function() {
- fs.readdir(__dirname, this.callback);
- },
- 'should be two': function(files) {
- assert.equal(
- files.filter(
- function(file) {
- return file.indexOf('test-date-rolling-file-stream-pattern') > -1;
- }
- ).length,
- 2
- );
- }
- },
-
- 'the file with the later date': {
- topic: function() {
- fs.readFile(
- __dirname + '/test-date-rolling-file-stream-pattern.2012-09-13',
- this.callback
- );
- },
- 'should contain the second message': function(contents) {
- assert.equal(contents.toString(), "Second message\n");
- }
- },
-
- 'the file with the date': {
- topic: function() {
- fs.readFile(
- __dirname + '/test-date-rolling-file-stream-pattern.2012-09-12',
- this.callback
- );
- },
- 'should contain the first message': function(contents) {
- assert.equal(contents.toString(), "First message\n");
- }
- }
- }
- }
- }).exportTo(module);
|