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'); 26 27// Verify that invalid delays throw 28const s = new net.Socket(); 29const nonNumericDelays = [ 30 '100', true, false, undefined, null, '', {}, () => {}, [], 31]; 32const badRangeDelays = [-0.001, -1, -Infinity, Infinity, NaN]; 33const validDelays = [0, 0.001, 1, 1e6]; 34const invalidCallbacks = [ 35 1, '100', true, false, null, {}, [], Symbol('test'), 36]; 37 38 39for (let i = 0; i < nonNumericDelays.length; i++) { 40 assert.throws(() => { 41 s.setTimeout(nonNumericDelays[i], () => {}); 42 }, { code: 'ERR_INVALID_ARG_TYPE' }, nonNumericDelays[i]); 43} 44 45for (let i = 0; i < badRangeDelays.length; i++) { 46 assert.throws(() => { 47 s.setTimeout(badRangeDelays[i], () => {}); 48 }, { code: 'ERR_OUT_OF_RANGE' }, badRangeDelays[i]); 49} 50 51for (let i = 0; i < validDelays.length; i++) { 52 s.setTimeout(validDelays[i], () => {}); 53} 54 55for (let i = 0; i < invalidCallbacks.length; i++) { 56 [0, 1].forEach((msec) => 57 assert.throws( 58 () => s.setTimeout(msec, invalidCallbacks[i]), 59 { 60 code: 'ERR_INVALID_ARG_TYPE', 61 name: 'TypeError', 62 } 63 ) 64 ); 65} 66 67const server = net.Server(); 68server.listen(0, common.mustCall(() => { 69 const socket = net.createConnection(server.address().port); 70 assert.strictEqual( 71 socket.setTimeout(1, common.mustCall(() => { 72 socket.destroy(); 73 assert.strictEqual(socket.setTimeout(1, common.mustNotCall()), socket); 74 server.close(); 75 })), 76 socket 77 ); 78})); 79