fatsify核心功能示例测试!!!
This commit is contained in:
506
node_modules/fastify/test/internals/request.test.js
generated
vendored
Normal file
506
node_modules/fastify/test/internals/request.test.js
generated
vendored
Normal file
@@ -0,0 +1,506 @@
|
||||
'use strict'
|
||||
|
||||
const { test } = require('node:test')
|
||||
|
||||
const Request = require('../../lib/request')
|
||||
const Context = require('../../lib/context')
|
||||
const {
|
||||
kReply,
|
||||
kRequest,
|
||||
kOptions
|
||||
} = require('../../lib/symbols')
|
||||
|
||||
process.removeAllListeners('warning')
|
||||
|
||||
test('Regular request', t => {
|
||||
const headers = {
|
||||
host: 'hostname'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
req.connection = req.socket
|
||||
const request = new Request('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof Request)
|
||||
t.assert.ok(request.validateInput instanceof Function)
|
||||
t.assert.ok(request.getValidationFunction instanceof Function)
|
||||
t.assert.ok(request.compileValidationSchema instanceof Function)
|
||||
t.assert.strictEqual(request.id, 'id')
|
||||
t.assert.strictEqual(request.params, 'params')
|
||||
t.assert.strictEqual(request.raw, req)
|
||||
t.assert.strictEqual(request.query, 'query')
|
||||
t.assert.strictEqual(request.headers, headers)
|
||||
t.assert.strictEqual(request.log, 'log')
|
||||
t.assert.strictEqual(request.ip, 'ip')
|
||||
t.assert.strictEqual(request.ips, undefined)
|
||||
t.assert.strictEqual(request.host, 'hostname')
|
||||
t.assert.strictEqual(request.body, undefined)
|
||||
t.assert.strictEqual(request.method, 'GET')
|
||||
t.assert.strictEqual(request.url, '/')
|
||||
t.assert.strictEqual(request.originalUrl, '/')
|
||||
t.assert.strictEqual(request.socket, req.socket)
|
||||
t.assert.strictEqual(request.protocol, 'http')
|
||||
// Aim to not bad property keys (including Symbols)
|
||||
t.assert.ok(!('undefined' in request))
|
||||
})
|
||||
|
||||
test('Request with undefined config', t => {
|
||||
const headers = {
|
||||
host: 'hostname'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
req.connection = req.socket
|
||||
const request = new Request('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request, Request)
|
||||
t.assert.ok(request.validateInput, Function)
|
||||
t.assert.ok(request.getValidationFunction, Function)
|
||||
t.assert.ok(request.compileValidationSchema, Function)
|
||||
t.assert.strictEqual(request.id, 'id')
|
||||
t.assert.strictEqual(request.params, 'params')
|
||||
t.assert.strictEqual(request.raw, req)
|
||||
t.assert.strictEqual(request.query, 'query')
|
||||
t.assert.strictEqual(request.headers, headers)
|
||||
t.assert.strictEqual(request.log, 'log')
|
||||
t.assert.strictEqual(request.ip, 'ip')
|
||||
t.assert.strictEqual(request.ips, undefined)
|
||||
t.assert.strictEqual(request.hostname, 'hostname')
|
||||
t.assert.strictEqual(request.body, undefined)
|
||||
t.assert.strictEqual(request.method, 'GET')
|
||||
t.assert.strictEqual(request.url, '/')
|
||||
t.assert.strictEqual(request.originalUrl, '/')
|
||||
t.assert.strictEqual(request.socket, req.socket)
|
||||
t.assert.strictEqual(request.protocol, 'http')
|
||||
|
||||
// Aim to not bad property keys (including Symbols)
|
||||
t.assert.ok(!('undefined' in request))
|
||||
})
|
||||
|
||||
test('Regular request - hostname from authority', t => {
|
||||
t.plan(3)
|
||||
const headers = {
|
||||
':authority': 'authority'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
|
||||
const request = new Request('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof Request)
|
||||
t.assert.strictEqual(request.host, 'authority')
|
||||
t.assert.strictEqual(request.port, null)
|
||||
})
|
||||
|
||||
test('Regular request - host header has precedence over authority', t => {
|
||||
t.plan(3)
|
||||
const headers = {
|
||||
host: 'hostname',
|
||||
':authority': 'authority'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
const request = new Request('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof Request)
|
||||
t.assert.strictEqual(request.host, 'hostname')
|
||||
t.assert.strictEqual(request.port, null)
|
||||
})
|
||||
|
||||
test('Request with trust proxy', t => {
|
||||
t.plan(18)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
'x-forwarded-host': 'example.com'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.id, 'id')
|
||||
t.assert.strictEqual(request.params, 'params')
|
||||
t.assert.deepStrictEqual(request.raw, req)
|
||||
t.assert.strictEqual(request.query, 'query')
|
||||
t.assert.strictEqual(request.headers, headers)
|
||||
t.assert.strictEqual(request.log, 'log')
|
||||
t.assert.strictEqual(request.ip, '2.2.2.2')
|
||||
t.assert.deepStrictEqual(request.ips, ['ip', '1.1.1.1', '2.2.2.2'])
|
||||
t.assert.strictEqual(request.host, 'example.com')
|
||||
t.assert.strictEqual(request.body, undefined)
|
||||
t.assert.strictEqual(request.method, 'GET')
|
||||
t.assert.strictEqual(request.url, '/')
|
||||
t.assert.strictEqual(request.socket, req.socket)
|
||||
t.assert.strictEqual(request.protocol, 'http')
|
||||
t.assert.ok(request.validateInput instanceof Function)
|
||||
t.assert.ok(request.getValidationFunction instanceof Function)
|
||||
t.assert.ok(request.compileValidationSchema instanceof Function)
|
||||
})
|
||||
|
||||
test('Request with trust proxy, encrypted', t => {
|
||||
t.plan(2)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
'x-forwarded-host': 'example.com'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip', encrypted: true },
|
||||
headers
|
||||
}
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.protocol, 'https')
|
||||
})
|
||||
|
||||
test('Request with trust proxy - no x-forwarded-host header', t => {
|
||||
t.plan(2)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
host: 'hostname'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.host, 'hostname')
|
||||
})
|
||||
|
||||
test('Request with trust proxy - no x-forwarded-host header and fallback to authority', t => {
|
||||
t.plan(2)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
':authority': 'authority'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.host, 'authority')
|
||||
})
|
||||
|
||||
test('Request with trust proxy - x-forwarded-host header has precedence over host', t => {
|
||||
t.plan(2)
|
||||
const headers = {
|
||||
'x-forwarded-for': ' 2.2.2.2, 1.1.1.1',
|
||||
'x-forwarded-host': 'example.com',
|
||||
host: 'hostname'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.host, 'example.com')
|
||||
})
|
||||
|
||||
test('Request with trust proxy - handles multiple entries in x-forwarded-host/proto', t => {
|
||||
t.plan(3)
|
||||
const headers = {
|
||||
'x-forwarded-host': 'example2.com, example.com',
|
||||
'x-forwarded-proto': 'http, https'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
||||
t.assert.ok(request instanceof TpRequest)
|
||||
t.assert.strictEqual(request.host, 'example.com')
|
||||
t.assert.strictEqual(request.protocol, 'https')
|
||||
})
|
||||
|
||||
test('Request with trust proxy - plain', t => {
|
||||
t.plan(1)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
'x-forwarded-host': 'example.com'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: { remoteAddress: 'ip' },
|
||||
headers
|
||||
}
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
||||
t.assert.deepStrictEqual(request.protocol, 'http')
|
||||
})
|
||||
|
||||
test('Request with undefined socket', t => {
|
||||
t.plan(18)
|
||||
const headers = {
|
||||
host: 'hostname'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: undefined,
|
||||
headers
|
||||
}
|
||||
const context = new Context({
|
||||
schema: {
|
||||
body: {
|
||||
type: 'object',
|
||||
required: ['hello'],
|
||||
properties: {
|
||||
hello: { type: 'string' }
|
||||
}
|
||||
}
|
||||
},
|
||||
config: {
|
||||
some: 'config',
|
||||
url: req.url,
|
||||
method: req.method
|
||||
},
|
||||
server: {
|
||||
[kReply]: {},
|
||||
[kRequest]: Request,
|
||||
[kOptions]: {
|
||||
requestIdLogLabel: 'reqId'
|
||||
},
|
||||
server: {}
|
||||
}
|
||||
})
|
||||
const request = new Request('id', 'params', req, 'query', 'log', context)
|
||||
t.assert.ok(request instanceof Request)
|
||||
t.assert.strictEqual(request.id, 'id')
|
||||
t.assert.strictEqual(request.params, 'params')
|
||||
t.assert.deepStrictEqual(request.raw, req)
|
||||
t.assert.strictEqual(request.query, 'query')
|
||||
t.assert.strictEqual(request.headers, headers)
|
||||
t.assert.strictEqual(request.log, 'log')
|
||||
t.assert.strictEqual(request.ip, undefined)
|
||||
t.assert.strictEqual(request.ips, undefined)
|
||||
t.assert.strictEqual(request.host, 'hostname')
|
||||
t.assert.deepStrictEqual(request.body, undefined)
|
||||
t.assert.strictEqual(request.method, 'GET')
|
||||
t.assert.strictEqual(request.url, '/')
|
||||
t.assert.strictEqual(request.protocol, undefined)
|
||||
t.assert.deepStrictEqual(request.socket, req.socket)
|
||||
t.assert.ok(request.validateInput instanceof Function)
|
||||
t.assert.ok(request.getValidationFunction instanceof Function)
|
||||
t.assert.ok(request.compileValidationSchema instanceof Function)
|
||||
})
|
||||
|
||||
test('Request with trust proxy and undefined socket', t => {
|
||||
t.plan(1)
|
||||
const headers = {
|
||||
'x-forwarded-for': '2.2.2.2, 1.1.1.1',
|
||||
'x-forwarded-host': 'example.com'
|
||||
}
|
||||
const req = {
|
||||
method: 'GET',
|
||||
url: '/',
|
||||
socket: undefined,
|
||||
headers
|
||||
}
|
||||
|
||||
const TpRequest = Request.buildRequest(Request, true)
|
||||
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
||||
t.assert.deepStrictEqual(request.protocol, undefined)
|
||||
})
|
||||
Reference in New Issue
Block a user