Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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