• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2const common = require('../common');
3const assert = require('assert');
4const net = require('net');
5
6// Regression test for https://github.com/nodejs/node/issues/19562:
7// Writing to a socket first tries to push through as much data as possible
8// without blocking synchronously, and, if that is not enough, queues more
9// data up for asynchronous writing.
10// Check that `bytesWritten` accounts for both parts of a write.
11
12const N = 10000000;
13{
14  // Variant 1: Write a Buffer.
15  const server = net.createServer(common.mustCall((socket) => {
16    socket.end(Buffer.alloc(N), common.mustCall(() => {
17      assert.strictEqual(socket.bytesWritten, N);
18    }));
19    assert.strictEqual(socket.bytesWritten, N);
20  })).listen(0, common.mustCall(() => {
21    const client = net.connect(server.address().port);
22    client.resume();
23    client.on('close', common.mustCall(() => {
24      assert.strictEqual(client.bytesRead, N);
25      server.close();
26    }));
27  }));
28}
29
30{
31  // Variant 2: Write a string.
32  const server = net.createServer(common.mustCall((socket) => {
33    socket.end('a'.repeat(N), common.mustCall(() => {
34      assert.strictEqual(socket.bytesWritten, N);
35    }));
36    assert.strictEqual(socket.bytesWritten, N);
37  })).listen(0, common.mustCall(() => {
38    const client = net.connect(server.address().port);
39    client.resume();
40    client.on('close', common.mustCall(() => {
41      assert.strictEqual(client.bytesRead, N);
42      server.close();
43    }));
44  }));
45}
46
47{
48  // Variant 2: writev() with mixed data.
49  const server = net.createServer(common.mustCall((socket) => {
50    socket.cork();
51    socket.write('a'.repeat(N));
52    assert.strictEqual(socket.bytesWritten, N);
53    socket.write(Buffer.alloc(N));
54    assert.strictEqual(socket.bytesWritten, 2 * N);
55    socket.end('', common.mustCall(() => {
56      assert.strictEqual(socket.bytesWritten, 2 * N);
57    }));
58    socket.uncork();
59  })).listen(0, common.mustCall(() => {
60    const client = net.connect(server.address().port);
61    client.resume();
62    client.on('close', common.mustCall(() => {
63      assert.strictEqual(client.bytesRead, 2 * N);
64      server.close();
65    }));
66  }));
67}
68