Skip to content

Commit

Permalink
Merge pull request #1 from fastify/master
Browse files Browse the repository at this point in the history
Listen only to IPv4 network for websockets tests (fastify#316)
  • Loading branch information
kovalenp committed Jul 31, 2023
2 parents 6d9de9e + c70f9d1 commit 607ae5b
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 36 deletions.
2 changes: 1 addition & 1 deletion test/socket.io.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ test('proxy socket.io', async t => {
websocket: true
})

await srvProxy.listen({ port: 0 })
await srvProxy.listen({ port: 0, host: '127.0.0.1' })

srvSocket.on('connection', socket => {
socket.on('hello', data => {
Expand Down
70 changes: 35 additions & 35 deletions test/websocket.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@ test('basic websocket proxy', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify()
server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const options = { headers: { cookie: cookieValue } }
const ws = new WebSocket(`ws://localhost:${server.server.address().port}`, [subprotocolValue], options)
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}`, [subprotocolValue], options)
await once(ws, 'open')

ws.send('hello', { binary: false })
Expand Down Expand Up @@ -84,20 +84,20 @@ test('multiple websocket upstreams', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })
server.register(proxy, {
prefix: name,
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true
})
}

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const wsClients = []
for (const name of ['/A', '/A/B', '/C/D', '/C']) {
const ws = new WebSocket(`ws://localhost:${server.server.address().port}${name}`)
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}${name}`)
await once(ws, 'open')
ws.send(`hello ${name}`)
const [reply] = await once(ws, 'message')
Expand All @@ -113,14 +113,14 @@ test('multiple websocket upstreams', async (t) => {

test('captures errors on start', async (t) => {
const app = Fastify()
await app.listen({ port: 0 })
await app.listen({ port: 0, host: '127.0.0.1' })

const app2 = Fastify()
app2.register(proxy, { upstream: 'ws://localhost', websocket: true })
app2.register(proxy, { upstream: 'ws://127.0.0.1', websocket: true })

const appPort = app.server.address().port

await t.rejects(app2.listen({ port: appPort }), /EADDRINUSE/)
await t.rejects(app2.listen({ port: appPort, host: '127.0.0.1' }), /EADDRINUSE/)

t.teardown(app.close.bind(app))
t.teardown(app2.close.bind(app2))
Expand All @@ -145,7 +145,7 @@ test('getUpstream', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify()

Expand All @@ -160,17 +160,17 @@ test('getUpstream', async (t) => {
getUpstream: function (original) {
t.not(original, _req)
t.equal(original.raw, _req)
return `http://localhost:${origin.address().port}`
return `http://127.0.0.1:${origin.address().port}`
}
},
websocket: true
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const options = { headers: { cookie: cookieValue } }
const ws = new WebSocket(`ws://localhost:${server.server.address().port}`, [subprotocolValue], options)
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}`, [subprotocolValue], options)
await once(ws, 'open')

ws.send('hello', { binary: false })
Expand Down Expand Up @@ -213,23 +213,23 @@ test('websocket proxy trigger hooks', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify()
server.addHook('onRequest', (request, reply, done) => {
t.pass('onRequest')
done()
})
server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const options = { headers: { cookie: cookieValue } }
const ws = new WebSocket(`ws://localhost:${server.server.address().port}`, [subprotocolValue], options)
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}`, [subprotocolValue], options)
await once(ws, 'open')

ws.send('hello', { binary: false })
Expand Down Expand Up @@ -272,11 +272,11 @@ test('websocket proxy with rewriteRequestHeaders', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify()
server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true,
wsClientOptions: {
rewriteRequestHeaders: (headers, request) => {
Expand All @@ -288,10 +288,10 @@ test('websocket proxy with rewriteRequestHeaders', async (t) => {
}
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const ws = new WebSocket(`ws://localhost:${server.server.address().port}`, [subprotocolValue])
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}`, [subprotocolValue])
await once(ws, 'open')

ws.send('hello', { binary: false })
Expand Down Expand Up @@ -334,11 +334,11 @@ test('websocket proxy custom headers', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify()
server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true,
wsClientOptions: {
headers: {
Expand All @@ -347,10 +347,10 @@ test('websocket proxy custom headers', async (t) => {
}
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

const ws = new WebSocket(`ws://localhost:${server.server.address().port}`, [subprotocolValue])
const ws = new WebSocket(`ws://127.0.0.1:${server.server.address().port}`, [subprotocolValue])
await once(ws, 'open')

ws.send('hello', { binary: false })
Expand Down Expand Up @@ -380,28 +380,28 @@ test('Should gracefully close when clients attempt to connect after calling clos
t.teardown(wss.close.bind(wss))
t.teardown(origin.close.bind(origin))

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })

const server = Fastify({ logger: false })
await server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
websocket: true
})

const oldClose = server.server.close
let p
server.server.close = function (cb) {
const ws = new WebSocket('ws://localhost:' + server.server.address().port)
const ws = new WebSocket('ws://127.0.0.1:' + server.server.address().port)

p = once(ws, 'unexpected-response').then(([req, res]) => {
t.equal(res.statusCode, 503)
oldClose.call(this, cb)
})
}

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })

const ws = new WebSocket('ws://localhost:' + server.server.address().port)
const ws = new WebSocket('ws://127.0.0.1:' + server.server.address().port)

await once(ws, 'open')
await server.close()
Expand All @@ -426,20 +426,20 @@ test('Proxy websocket with custom upstream url', async (t) => {
})
})

await promisify(origin.listen.bind(origin))({ port: 0 })
await promisify(origin.listen.bind(origin))({ port: 0, host: '127.0.0.1' })
// Host for wsUpstream and for later check.
const host = '127.0.0.1'
// Path for wsUpstream and for later check.
const path = '/some/path'
const server = Fastify()
server.register(proxy, {
upstream: `ws://localhost:${origin.address().port}`,
upstream: `ws://127.0.0.1:${origin.address().port}`,
// Start proxy with different upstream, added path.
wsUpstream: `ws://${host}:${origin.address().port}${path}`,
websocket: true
})

await server.listen({ port: 0 })
await server.listen({ port: 0, host: '127.0.0.1' })
t.teardown(server.close.bind(server))

// Start websocket with different upstream for connect, added path.
Expand Down

0 comments on commit 607ae5b

Please sign in to comment.