From c8cf0ce36a13fd9bd9e64d741d895490482d1758 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Fri, 14 Jul 2017 10:59:57 -0700 Subject: [PATCH] test: check allowed port argument values Existing test only covered ports pass as options, add tests for argument behaviour to avoid regressions. Ref: https://github.com/nodejs/node/issues/14205 --- test/parallel/test-net-listen-port-option.js | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/parallel/test-net-listen-port-option.js b/test/parallel/test-net-listen-port-option.js index 26f7bb99880bc0..3c3a1343ec7640 100644 --- a/test/parallel/test-net-listen-port-option.js +++ b/test/parallel/test-net-listen-port-option.js @@ -26,3 +26,33 @@ net.Server().listen({ port: '0' }, close); net.Server().listen({ port: port }, common.fail); }, /invalid listen argument/i); }); + +// Repeat the tests, passing port as an argument, which validates somewhat +// differently. + +net.Server().listen(undefined, close); +net.Server().listen('0', close); + +// 'nan', skip, treated as a path, not a port +//'+Infinity', skip, treated as a path, not a port +//'-Infinity' skip, treated as a path, not a port + +// The numbers that are out of range are treated as 0 +net.Server().listen(-1, close); +// Use a float larger than 1024, because EACCESS happens for low ports +net.Server().listen(1234.56, close); +net.Server().listen(0x10000, close); +net.Server().listen(1 / 0, close); +net.Server().listen(-1 / 0, close); + +// null is treated as 0 +net.Server().listen(null, close); + +// false/true are converted to 0/1, arguably a bug, but fixing would be +// semver-major. Note that true fails because ports that low can't be listened +// on by unprivileged processes. +net.Server().listen(false, close); + +net.Server().listen(true).on('error', common.mustCall(function(err) { + assert.strictEqual(err.code, 'EACCES'); +}));