node/test/parallel/test-dgram-socket-buffer-size.js
James M Snell c7962dcba4 src: move process.binding('uv') to internalBinding
PR-URL: https://github.com/nodejs/node/pull/22163
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
2018-08-09 13:47:31 -07:00

154 lines
3.8 KiB
JavaScript

// Flags: --expose-internals
'use strict';
const common = require('../common');
const assert = require('assert');
const dgram = require('dgram');
const { SystemError } = require('internal/errors');
const { internalBinding } = require('internal/test/binding');
const {
UV_EBADF,
UV_EINVAL,
UV_ENOTSOCK
} = internalBinding('uv');
function getExpectedError(type) {
const code = common.isWindows ? 'ENOTSOCK' : 'EBADF';
const message = common.isWindows ?
'socket operation on non-socket' : 'bad file descriptor';
const errno = common.isWindows ? UV_ENOTSOCK : UV_EBADF;
const syscall = `uv_${type}_buffer_size`;
const suffix = common.isWindows ?
'ENOTSOCK (socket operation on non-socket)' : 'EBADF (bad file descriptor)';
const error = {
code: 'ERR_SOCKET_BUFFER_SIZE',
type: SystemError,
message: `Could not get or set buffer size: ${syscall} returned ${suffix}`,
info: {
code,
message,
errno,
syscall
}
};
return error;
}
{
// Should throw error if the socket is never bound.
const errorObj = getExpectedError('send');
const socket = dgram.createSocket('udp4');
common.expectsError(() => {
socket.setSendBufferSize(8192);
}, errorObj);
common.expectsError(() => {
socket.getSendBufferSize();
}, errorObj);
}
{
const socket = dgram.createSocket('udp4');
// Should throw error if the socket is never bound.
const errorObj = getExpectedError('recv');
common.expectsError(() => {
socket.setRecvBufferSize(8192);
}, errorObj);
common.expectsError(() => {
socket.getRecvBufferSize();
}, errorObj);
}
{
// Should throw error if invalid buffer size is specified
const errorObj = {
code: 'ERR_SOCKET_BAD_BUFFER_SIZE',
type: TypeError,
message: /^Buffer size must be a positive integer$/
};
const badBufferSizes = [-1, Infinity, 'Doh!'];
const socket = dgram.createSocket('udp4');
socket.bind(common.mustCall(() => {
badBufferSizes.forEach((badBufferSize) => {
common.expectsError(() => {
socket.setRecvBufferSize(badBufferSize);
}, errorObj);
common.expectsError(() => {
socket.setSendBufferSize(badBufferSize);
}, errorObj);
});
socket.close();
}));
}
{
// Can set and get buffer sizes after binding the socket.
const socket = dgram.createSocket('udp4');
socket.bind(common.mustCall(() => {
socket.setRecvBufferSize(10000);
socket.setSendBufferSize(10000);
// note: linux will double the buffer size
const expectedBufferSize = common.isLinux ? 20000 : 10000;
assert.strictEqual(socket.getRecvBufferSize(), expectedBufferSize);
assert.strictEqual(socket.getSendBufferSize(), expectedBufferSize);
socket.close();
}));
}
{
const info = {
code: 'EINVAL',
message: 'invalid argument',
errno: UV_EINVAL,
syscall: 'uv_recv_buffer_size'
};
const errorObj = {
code: 'ERR_SOCKET_BUFFER_SIZE',
type: SystemError,
message: 'Could not get or set buffer size: uv_recv_buffer_size ' +
'returned EINVAL (invalid argument)',
info
};
const socket = dgram.createSocket('udp4');
socket.bind(common.mustCall(() => {
common.expectsError(() => {
socket.setRecvBufferSize(2147483648);
}, errorObj);
socket.close();
}));
}
{
const info = {
code: 'EINVAL',
message: 'invalid argument',
errno: UV_EINVAL,
syscall: 'uv_send_buffer_size'
};
const errorObj = {
code: 'ERR_SOCKET_BUFFER_SIZE',
type: SystemError,
message: 'Could not get or set buffer size: uv_send_buffer_size ' +
'returned EINVAL (invalid argument)',
info
};
const socket = dgram.createSocket('udp4');
socket.bind(common.mustCall(() => {
common.expectsError(() => {
socket.setSendBufferSize(2147483648);
}, errorObj);
socket.close();
}));
}