From 2074933cdfbc50c28ca34631108199e327b9a4a2 Mon Sep 17 00:00:00 2001 From: Yagiz Nizipli Date: Thu, 22 Sep 2022 09:37:44 -0400 Subject: [PATCH] test: add number coersion related tests --- lib/server.js | 2 +- test/reply-code.test.js | 59 +++++++++++++++++++++++++++++++++++++++++ test/server.test.js | 54 +++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 test/reply-code.test.js create mode 100644 test/server.test.js diff --git a/lib/server.js b/lib/server.js index be997973f3..ca1107abe0 100644 --- a/lib/server.js +++ b/lib/server.js @@ -332,7 +332,7 @@ function normalizeListenArgs (args) { function normalizePort (firstArg) { const port = Number(firstArg) - return port >= 0 && !Number.isNaN(port) ? port : 0 + return port >= 0 && !Number.isNaN(port) && Number.isInteger(port) ? port : 0 } function logServerAddress (server) { diff --git a/test/reply-code.test.js b/test/reply-code.test.js new file mode 100644 index 0000000000..1e709322e4 --- /dev/null +++ b/test/reply-code.test.js @@ -0,0 +1,59 @@ +'use strict' + +const t = require('tap') +const test = t.test +const Fastify = require('..') + +test('code should handle null/undefined/float', t => { + t.plan(8) + + const fastify = Fastify() + + fastify.get('/null', function (request, reply) { + reply.status(null).send() + }) + + fastify.get('/undefined', function (request, reply) { + reply.status(undefined).send() + }) + + fastify.get('/404.5', function (request, reply) { + reply.status(404.5).send() + }) + + fastify.inject({ + method: 'GET', + url: '/null' + }, (error, res) => { + t.error(error) + t.equal(res.statusCode, 500) + t.same(res.json(), { + statusCode: 500, + code: 'FST_ERR_BAD_STATUS_CODE', + error: 'Internal Server Error', + message: 'Called reply with an invalid status code: null' + }) + }) + + fastify.inject({ + method: 'GET', + url: '/undefined' + }, (error, res) => { + t.error(error) + t.equal(res.statusCode, 500) + t.same(res.json(), { + statusCode: 500, + code: 'FST_ERR_BAD_STATUS_CODE', + error: 'Internal Server Error', + message: 'Called reply with an invalid status code: undefined' + }) + }) + + fastify.inject({ + method: 'GET', + url: '/404.5' + }, (error, res) => { + t.error(error) + t.equal(res.statusCode, 404) + }) +}) diff --git a/test/server.test.js b/test/server.test.js new file mode 100644 index 0000000000..5919491430 --- /dev/null +++ b/test/server.test.js @@ -0,0 +1,54 @@ +'use strict' + +const t = require('tap') +const test = t.test +const Fastify = require('..') + +test('listen should accept null port', t => { + t.plan(1) + + const fastify = Fastify() + t.teardown(fastify.close.bind(fastify)) + fastify.listen({ port: null }, (err) => { + t.error(err) + }) +}) + +test('listen should accept undefined port', t => { + t.plan(1) + + const fastify = Fastify() + t.teardown(fastify.close.bind(fastify)) + fastify.listen({ port: undefined }, (err) => { + t.error(err) + }) +}) + +test('listen should accept stringified number port', t => { + t.plan(1) + + const fastify = Fastify() + t.teardown(fastify.close.bind(fastify)) + fastify.listen({ port: '1234' }, (err) => { + t.error(err) + }) +}) + +test('listen should reject string port', async (t) => { + t.plan(2) + + const fastify = Fastify() + t.teardown(fastify.close.bind(fastify)) + + try { + await fastify.listen({ port: 'hello-world' }) + } catch (error) { + t.same(error.message, 'options.port should be >= 0 and < 65536. Received hello-world.') + } + + try { + await fastify.listen({ port: '1234hello' }) + } catch (error) { + t.same(error.message, 'options.port should be >= 0 and < 65536. Received 1234hello.') + } +})