1// Copyright Joyent, Inc. and other Node contributors. 2// 3// Permission is hereby granted, free of charge, to any person obtaining a 4// copy of this software and associated documentation files (the 5// "Software"), to deal in the Software without restriction, including 6// without limitation the rights to use, copy, modify, merge, publish, 7// distribute, sublicense, and/or sell copies of the Software, and to permit 8// persons to whom the Software is furnished to do so, subject to the 9// following conditions: 10// 11// The above copyright notice and this permission notice shall be included 12// in all copies or substantial portions of the Software. 13// 14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20// USE OR OTHER DEALINGS IN THE SOFTWARE. 21 22'use strict'; 23const common = require('../common'); 24const net = require('net'); 25const assert = require('assert'); 26const { inspect } = require('util'); 27 28// Verify that invalid delays throw 29const s = new net.Socket(); 30const nonNumericDelays = [ 31 '100', true, false, undefined, null, '', {}, () => {}, [], 32]; 33const badRangeDelays = [-0.001, -1, -Infinity, Infinity, NaN]; 34const validDelays = [0, 0.001, 1, 1e6]; 35const invalidCallbacks = [ 36 1, '100', true, false, null, {}, [], Symbol('test'), 37]; 38 39 40for (let i = 0; i < nonNumericDelays.length; i++) { 41 assert.throws(() => { 42 s.setTimeout(nonNumericDelays[i], () => {}); 43 }, { code: 'ERR_INVALID_ARG_TYPE' }, nonNumericDelays[i]); 44} 45 46for (let i = 0; i < badRangeDelays.length; i++) { 47 assert.throws(() => { 48 s.setTimeout(badRangeDelays[i], () => {}); 49 }, { code: 'ERR_OUT_OF_RANGE' }, badRangeDelays[i]); 50} 51 52for (let i = 0; i < validDelays.length; i++) { 53 s.setTimeout(validDelays[i], () => {}); 54} 55 56for (let i = 0; i < invalidCallbacks.length; i++) { 57 [0, 1].forEach((mesc) => 58 assert.throws( 59 () => s.setTimeout(mesc, invalidCallbacks[i]), 60 { 61 code: 'ERR_INVALID_CALLBACK', 62 name: 'TypeError', 63 message: 'Callback must be a function. ' + 64 `Received ${inspect(invalidCallbacks[i])}` 65 } 66 ) 67 ); 68} 69 70const server = net.Server(); 71server.listen(0, common.mustCall(() => { 72 const socket = net.createConnection(server.address().port); 73 assert.strictEqual( 74 socket.setTimeout(1, common.mustCall(() => { 75 socket.destroy(); 76 assert.strictEqual(socket.setTimeout(1, common.mustNotCall()), socket); 77 server.close(); 78 })), 79 socket 80 ); 81})); 82