Files
overleaf-cep/services/real-time/test/unit/js/WebsocketAddressManager.test.js
Andrew Rumble 3073c94522 Merge pull request #30215 from overleaf/ar/convert-real-time-to-esm
[real-time] convert real time to esm

GitOrigin-RevId: 7cc530cc977549d3274be42585735e1fd72cad5f
2026-01-13 09:06:30 +00:00

100 lines
3.0 KiB
JavaScript

import { expect, describe, beforeEach, it } from 'vitest'
import path from 'node:path'
const modulePath = path.join(
import.meta.dirname,
'../../../app/js/WebsocketAddressManager'
)
describe('WebsocketAddressManager', function () {
beforeEach(async function (ctx) {
ctx.WebsocketAddressManager = (await import(modulePath)).default
})
describe('with a proxy configuration', function () {
beforeEach(function (ctx) {
ctx.websocketAddressManager = new ctx.WebsocketAddressManager(
true,
'127.0.0.1'
)
})
it('should return the client ip address when behind a proxy', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
headers: {
'x-forwarded-proto': 'https',
'x-forwarded-for': '123.45.67.89',
},
address: { address: '127.0.0.1' },
})
).to.equal('123.45.67.89')
})
it('should return the client ip address for a direct connection', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
headers: {},
address: { address: '123.45.67.89' },
})
).to.equal('123.45.67.89')
})
it('should return the client ip address when there are no headers in the handshake', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
address: { address: '123.45.67.89' },
})
).to.equal('123.45.67.89')
})
it('should return a "client-handshake-missing" response when the handshake is missing', function (ctx) {
expect(ctx.websocketAddressManager.getRemoteIp()).to.equal(
'client-handshake-missing'
)
})
})
describe('without a proxy configuration', function () {
beforeEach(function (ctx) {
ctx.websocketAddressManager = new ctx.WebsocketAddressManager(false)
})
it('should return the client ip address for a direct connection', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
headers: {},
address: { address: '123.45.67.89' },
})
).to.equal('123.45.67.89')
})
it('should return undefined if the client ip address is not present', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
headers: {},
address: { otherAddressProperty: '123.45.67.89' },
})
).to.be.undefined
})
it('should return the proxy ip address if there is actually a proxy', function (ctx) {
expect(
ctx.websocketAddressManager.getRemoteIp({
headers: {
'x-forwarded-proto': 'https',
'x-forwarded-for': '123.45.67.89',
},
address: { address: '127.0.0.1' },
})
).to.equal('127.0.0.1')
})
it('should return a "client-handshake-missing" response when the handshake is missing', function (ctx) {
expect(ctx.websocketAddressManager.getRemoteIp()).to.equal(
'client-handshake-missing'
)
})
})
})