fake-file-generator
Version:
File generator at specific type and size
60 lines (49 loc) • 2.08 kB
JavaScript
const fs = require('fs');
const Utils = require('../utils');
const debug = Utils.getDebugModuleOrMock('fake-file-generator:no-type');
class NoType {
makeFile(outputFilePath, size) {
return new Promise((resolve, reject) => {
const writableStream = fs.createWriteStream(outputFilePath, {emitClose: true, autoClose: true});
writableStream.on('error', (err) => {
reject(err);
debug(err);
});
writableStream.on('pause', () => debug('stream paused'));
writableStream.on('resume', () => debug('stream resumed'));
writableStream.on('finish', () => debug('stream finished'));
writableStream.on('close', () => {
debug('stream closed')
resolve();
});
const highWaterMark = writableStream.writableHighWaterMark;
if (size <= highWaterMark) {
writableStream.write(Buffer.alloc(size));
writableStream.end();
} else {
let chunksNumbersToWrite = Math.floor(size / highWaterMark);
const restBytes = size % highWaterMark;
debug('highWaterMark', highWaterMark);
debug('chunksNumbersToWrite', chunksNumbersToWrite);
debug('restBytes', restBytes);
writableStream.on('drain', () => {
if (chunksNumbersToWrite > 0) {
writableStream.write(this.getBuffer(highWaterMark));
chunksNumbersToWrite--;
} else {
if (restBytes) {
writableStream.write(this.getBuffer(restBytes));
}
writableStream.end();
}
});
writableStream.write(this.getBuffer(highWaterMark));
chunksNumbersToWrite--;
}
})
}
getBuffer(size) {
return Buffer.alloc(size);
}
}
module.exports = NoType;