'use strict';

const common = require('../common');
const assert = require('assert');
const net = require('net');

const server = net.createServer(function(socket) {
  socket.end();
});

server.listen(0, common.mustCall(function() {
  const socket = net.connect(server.address().port);

  // Cork the socket, then write twice; this should cause a writev, which
  // previously caused an err in the bytesWritten count.
  socket.cork();

  socket.write('one');
  socket.write(Buffer.from('twø', 'utf8'));

  socket.uncork();

  // one = 3 bytes, twø = 4 bytes
  assert.strictEqual(socket.bytesWritten, 3 + 4);

  socket.on('connect', common.mustCall(function() {
    assert.strictEqual(socket.bytesWritten, 3 + 4);
  }));

  socket.on('end', common.mustCall(function() {
    assert.strictEqual(socket.bytesWritten, 3 + 4);

    server.close();
  }));
}));
