Spaces:
Runtime error
Runtime error
| const { test } = require('tap') | |
| const Fastify = require('fastify') | |
| const fastifyWebsocket = require('..') | |
| function buildFastify (t) { | |
| const fastify = Fastify() | |
| t.teardown(() => { fastify.close() }) | |
| fastify.register(fastifyWebsocket) | |
| return fastify | |
| } | |
| test('routes correctly the message', async (t) => { | |
| const fastify = buildFastify(t) | |
| const message = 'hi from client' | |
| let _resolve | |
| const promise = new Promise((resolve) => { _resolve = resolve }) | |
| fastify.register( | |
| async function (instance) { | |
| instance.get('/ws', { websocket: true }, function (socket) { | |
| socket.once('message', chunk => { | |
| _resolve(chunk.toString()) | |
| }) | |
| }) | |
| }) | |
| await fastify.ready() | |
| const ws = await fastify.injectWS('/ws') | |
| ws.send(message) | |
| t.same(await promise, message) | |
| ws.terminate() | |
| }) | |
| test('redirect on / if no path specified', async (t) => { | |
| const fastify = buildFastify(t) | |
| const message = 'hi from client' | |
| let _resolve | |
| const promise = new Promise((resolve) => { _resolve = resolve }) | |
| fastify.register( | |
| async function (instance) { | |
| instance.get('/', { websocket: true }, function (socket) { | |
| socket.once('message', chunk => { | |
| _resolve(chunk.toString()) | |
| }) | |
| }) | |
| }) | |
| await fastify.ready() | |
| const ws = await fastify.injectWS() | |
| ws.send(message) | |
| t.same(await promise, message) | |
| ws.terminate() | |
| }) | |
| test('routes correctly the message between two routes', async (t) => { | |
| const fastify = buildFastify(t) | |
| const message = 'hi from client' | |
| let _resolve | |
| let _reject | |
| const promise = new Promise((resolve, reject) => { _resolve = resolve; _reject = reject }) | |
| fastify.register( | |
| async function (instance) { | |
| instance.get('/ws', { websocket: true }, function (socket) { | |
| socket.once('message', () => { | |
| _reject('wrong-route') | |
| }) | |
| }) | |
| instance.get('/ws-2', { websocket: true }, function (socket) { | |
| socket.once('message', chunk => { | |
| _resolve(chunk.toString()) | |
| }) | |
| }) | |
| }) | |
| await fastify.ready() | |
| const ws = await fastify.injectWS('/ws-2') | |
| ws.send(message) | |
| t.same(await promise, message) | |
| ws.terminate() | |
| }) | |
| test('use the upgrade context to upgrade if there is some hook', async (t) => { | |
| const fastify = buildFastify(t) | |
| const message = 'hi from client' | |
| let _resolve | |
| const promise = new Promise((resolve) => { _resolve = resolve }) | |
| fastify.register( | |
| async function (instance) { | |
| instance.addHook('preValidation', async (request, reply) => { | |
| if (request.headers['api-key'] !== 'some-random-key') { | |
| return reply.code(401).send() | |
| } | |
| }) | |
| instance.get('/', { websocket: true }, function (socket) { | |
| socket.once('message', chunk => { | |
| _resolve(chunk.toString()) | |
| }) | |
| }) | |
| }) | |
| await fastify.ready() | |
| const ws = await fastify.injectWS('/', { headers: { 'api-key': 'some-random-key' } }) | |
| ws.send(message) | |
| t.same(await promise, message) | |
| ws.terminate() | |
| }) | |
| test('rejects if the websocket is not upgraded', async (t) => { | |
| const fastify = buildFastify(t) | |
| fastify.register( | |
| async function (instance) { | |
| instance.addHook('preValidation', async (_request, reply) => { | |
| return reply.code(401).send() | |
| }) | |
| instance.get('/', { websocket: true }, function () { | |
| }) | |
| }) | |
| await fastify.ready() | |
| t.rejects(fastify.injectWS('/'), 'Unexpected server response: 401') | |
| }) | |