• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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