diff options
Diffstat (limited to 'deps/node/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js')
-rw-r--r-- | deps/node/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/deps/node/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js b/deps/node/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js new file mode 100644 index 00000000..9840a6ef --- /dev/null +++ b/deps/node/deps/npm/node_modules/fs-write-stream-atomic/test/slow-close.js @@ -0,0 +1,40 @@ +'use strict' +var fs = require('graceful-fs') +var path = require('path') +var test = require('tap').test +var rimraf = require('rimraf') +var writeStream = require('../index.js') + +var target = path.resolve(__dirname, 'test-chown') + +test('slow close', function (t) { + t.plan(2) + // The goal here is to simulate the "file close" step happening so slowly + // that the whole close/rename process could finish before the file is + // actually closed (and thus buffers truely flushed to the OS). In + // previous versions of this module, this would result in the module + // emitting finish & close before the file was fully written and in + // turn, could break other layers that tried to read the new file. + var realEmit = fs.WriteStream.prototype.emit + var reallyClosed = false + fs.WriteStream.prototype.emit = function (event) { + if (event !== 'close') return realEmit.apply(this, arguments) + setTimeout(function () { + reallyClosed = true + realEmit.call(this, 'close') + }.bind(this), 200) + } + var stream = writeStream(target) + stream.on('finish', function () { + t.is(reallyClosed, true, "didn't finish before target was closed") + }) + stream.on('close', function () { + t.is(reallyClosed, true, "didn't close before target was closed") + }) + stream.end() +}) + +test('cleanup', function (t) { + rimraf.sync(target) + t.end() +}) |