'use strict'; const common = require('../common'); const assert = require('assert'); const net = require('net'); const big = Buffer.alloc(1024 * 1024); const handler = common.mustCall((socket) => { socket.end(big); server.close(); }); const onListen = common.mustCall(() => { let prev = 0; function checkRaise(value) { assert(value > prev); prev = value; } const onData = common.mustCallAtLeast((chunk) => { checkRaise(socket.bytesRead); }); const onEnd = common.mustCall(() => { assert.strictEqual(socket.bytesRead, prev); assert.strictEqual(big.length, prev); }); const onClose = common.mustCall(() => { assert(!socket._handle); assert.strictEqual(socket.bytesRead, prev); assert.strictEqual(big.length, prev); }); const onConnect = common.mustCall(() => { socket.on('data', onData); socket.on('end', onEnd); socket.on('close', onClose); socket.end(); }); const socket = net.connect(server.address().port, onConnect); }); const server = net.createServer(handler).listen(0, onListen);