mirror of
https://github.com/hanzoai/next.js.git
synced 2026-10-30 14:46:38 +00:00
This disables tests that should not be run in a deployed environment, because they use incompatible APIs or there's no reason to test them outside of `next start`. Specifically disables for things like: - Using `next.patchFile`, `next.renameFile`, etc. - Attempting to use `next.cliOutput` to query runtime logs. When deployed, these are only build-time logs. [Latest Run](https://github.com/vercel/next.js/actions/runs/9483807368)
88 lines
3.0 KiB
TypeScript
88 lines
3.0 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
|
|
describe('x-forwarded-headers', () => {
|
|
const { next, skipped } = nextTestSetup({
|
|
files: __dirname,
|
|
// This test is skipped because it sends requests with manipulated host headers
|
|
// which doesn't work in a deployed environment
|
|
skipDeployment: true,
|
|
})
|
|
|
|
if (skipped) return
|
|
|
|
it('should include x-forwarded-* headers', async () => {
|
|
const res = await next.fetch('/')
|
|
const headers = await res.json()
|
|
const url = new URL(next.url)
|
|
|
|
expect(headers['x-forwarded-host']).toBe(url.host)
|
|
expect(headers['x-forwarded-port']).toBe(url.port)
|
|
expect(headers['x-forwarded-proto']).toBe(url.protocol.replace(':', ''))
|
|
expect(headers['middleware-x-forwarded-host']).toBe(url.host)
|
|
expect(headers['middleware-x-forwarded-port']).toBe(url.port)
|
|
expect(headers['middleware-x-forwarded-proto']).toBe(
|
|
url.protocol.replace(':', '')
|
|
)
|
|
})
|
|
|
|
describe('host header exists', () => {
|
|
it('should include x-forwarded-* headers relative to host', async () => {
|
|
const url = new URL(next.url)
|
|
const reqHeaders = {
|
|
host: `subdomain.localhost:${url.port}`,
|
|
}
|
|
const res = await next.fetch('/', {
|
|
headers: reqHeaders,
|
|
})
|
|
const headers = await res.json()
|
|
|
|
expect(headers['x-forwarded-host']).toBe(reqHeaders.host)
|
|
expect(headers['x-forwarded-port']).toBe(url.port)
|
|
expect(headers['x-forwarded-proto']).toBe(url.protocol.replace(':', ''))
|
|
expect(headers['middleware-x-forwarded-host']).toBe(reqHeaders.host)
|
|
expect(headers['middleware-x-forwarded-port']).toBe(url.port)
|
|
expect(headers['middleware-x-forwarded-proto']).toBe(
|
|
url.protocol.replace(':', '')
|
|
)
|
|
})
|
|
})
|
|
|
|
describe('already assigned', () => {
|
|
it('should not override existing x-forwarded-* headers', async () => {
|
|
const url = new URL(next.url)
|
|
const reqHeaders = {
|
|
host: `subdomain.localhost:${url.port}`,
|
|
port: '1234',
|
|
proto: 'https',
|
|
}
|
|
const res = await next.fetch('/', {
|
|
headers: {
|
|
host: 'override.localhost',
|
|
'x-forwarded-host': reqHeaders.host,
|
|
'x-forwarded-port': reqHeaders.port,
|
|
'x-forwarded-proto': reqHeaders.proto,
|
|
},
|
|
})
|
|
const headers = await res.json()
|
|
|
|
expect(headers['x-forwarded-host']).toBe(reqHeaders.host)
|
|
expect(headers['x-forwarded-port']).toBe(reqHeaders.port)
|
|
expect(headers['x-forwarded-proto']).toBe(reqHeaders.proto)
|
|
expect(headers['middleware-x-forwarded-host']).toBe(reqHeaders.host)
|
|
expect(headers['middleware-x-forwarded-port']).toBe(reqHeaders.port)
|
|
expect(headers['middleware-x-forwarded-proto']).toBe(reqHeaders.proto)
|
|
})
|
|
|
|
it('should work with multiple x-forwarded-* headers', async () => {
|
|
const res = await next.fetch('/', {
|
|
headers: { 'x-forwarded-proto': 'https, https' },
|
|
})
|
|
|
|
expect(res.status).toBe(200)
|
|
|
|
const headers = await res.json()
|
|
expect(headers['x-forwarded-proto']).toBe('https, https')
|
|
})
|
|
})
|
|
})
|