From 1e15892cb571d5b2a0eacc1aaa96b73cd31a6361 Mon Sep 17 00:00:00 2001 From: alemagio Date: Wed, 3 Feb 2021 14:22:44 +0100 Subject: [PATCH] feat: added hook to close socket server on fastify close --- index.js | 4 ++++ test/index.test.js | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/index.js b/index.js index 72f9e36..02084da 100644 --- a/index.js +++ b/index.js @@ -4,4 +4,8 @@ const fp = require('fastify-plugin') module.exports = fp(async function (fastify, opts) { fastify.decorate('io', require('socket.io')(fastify.server, opts)) + fastify.addHook('onClose', (fastify, done) => { + fastify.io.close() + done() + }) }, { fastify: '3.x' }) diff --git a/test/index.test.js b/test/index.test.js index 71addf1..44a94ea 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -38,3 +38,44 @@ test('should register the correct decorator passing options', async t => { }) ) }) + +test('should close socket server on fastify close', async t => { + t.plan(1) + + const { once } = require('events') + + const PORT = 3030 + const server = require('http').Server() + server.on('error', (e) => { + console.log(e) + if (e.code === 'EADDRINUSE') { + t.fail('Port was not free!') + setTimeout(() => { + server.close() + server.listen(PORT) + }, 1000) + } + }) + + const app = require('fastify')() + + app.register(require('..'), { + path: '/test', + serveClient: false, + pingInterval: 10000, + pingTimeout: 5000, + cookie: false + }) + + await app.ready() + app.io.listen(PORT) + + await app.close() + + server.listen(PORT) + + await once(server, 'listening') + + server.close() + t.ok(true) +})