1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const path = require('path'); 5const fs = require('fs').promises; 6const tmpdir = require('../common/tmpdir'); 7 8tmpdir.refresh(); 9 10const expected = 'ümlaut. Лорем 運務ホソモ指及 आपको करने विकास 紙読決多密所 أضف'; 11const exptectedBuff = Buffer.from(expected); 12 13let cnt = 0; 14function getFileName() { 15 return path.join(tmpdir.path, `readv_promises_${++cnt}.txt`); 16} 17 18const allocateEmptyBuffers = (combinedLength) => { 19 const bufferArr = []; 20 // Allocate two buffers, each half the size of exptectedBuff 21 bufferArr[0] = Buffer.alloc(Math.floor(combinedLength / 2)); 22 bufferArr[1] = Buffer.alloc(combinedLength - bufferArr[0].length); 23 24 return bufferArr; 25}; 26 27(async () => { 28 { 29 const filename = getFileName(); 30 await fs.writeFile(filename, exptectedBuff); 31 const handle = await fs.open(filename, 'r'); 32 // const buffer = Buffer.from(expected); 33 const bufferArr = allocateEmptyBuffers(exptectedBuff.length); 34 const expectedLength = exptectedBuff.length; 35 36 let { bytesRead, buffers } = await handle.readv([Buffer.from('')], 37 null); 38 assert.deepStrictEqual(bytesRead, 0); 39 assert.deepStrictEqual(buffers, [Buffer.from('')]); 40 41 ({ bytesRead, buffers } = await handle.readv(bufferArr, null)); 42 assert.deepStrictEqual(bytesRead, expectedLength); 43 assert.deepStrictEqual(buffers, bufferArr); 44 assert(Buffer.concat(bufferArr).equals(await fs.readFile(filename))); 45 handle.close(); 46 } 47 48 { 49 const filename = getFileName(); 50 await fs.writeFile(filename, exptectedBuff); 51 const handle = await fs.open(filename, 'r'); 52 // const buffer = Buffer.from(expected); 53 const bufferArr = allocateEmptyBuffers(exptectedBuff.length); 54 const expectedLength = exptectedBuff.length; 55 56 let { bytesRead, buffers } = await handle.readv([Buffer.from('')]); 57 assert.deepStrictEqual(bytesRead, 0); 58 assert.deepStrictEqual(buffers, [Buffer.from('')]); 59 60 ({ bytesRead, buffers } = await handle.readv(bufferArr)); 61 assert.deepStrictEqual(bytesRead, expectedLength); 62 assert.deepStrictEqual(buffers, bufferArr); 63 assert(Buffer.concat(bufferArr).equals(await fs.readFile(filename))); 64 handle.close(); 65 } 66})().then(common.mustCall()); 67