fastify 5.0.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.borp.yaml +3 -0
- package/.vscode/settings.json +22 -0
- package/README.md +12 -7
- package/docs/Guides/Database.md +15 -15
- package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
- package/docs/Guides/Ecosystem.md +14 -15
- package/docs/Guides/Index.md +1 -1
- package/docs/Guides/Migration-Guide-V4.md +11 -11
- package/docs/Guides/Migration-Guide-V5.md +133 -9
- package/docs/Guides/Plugins-Guide.md +1 -1
- package/docs/Guides/Prototype-Poisoning.md +3 -3
- package/docs/Guides/Recommendations.md +9 -9
- package/docs/Guides/Serverless.md +5 -5
- package/docs/Guides/Testing.md +58 -57
- package/docs/Guides/Write-Plugin.md +2 -2
- package/docs/Guides/Write-Type-Provider.md +3 -3
- package/docs/Reference/ContentTypeParser.md +4 -4
- package/docs/Reference/Decorators.md +2 -2
- package/docs/Reference/Errors.md +3 -3
- package/docs/Reference/Hooks.md +7 -7
- package/docs/Reference/LTS.md +8 -0
- package/docs/Reference/Logging.md +5 -4
- package/docs/Reference/Reply.md +55 -58
- package/docs/Reference/Request.md +49 -42
- package/docs/Reference/Routes.md +16 -13
- package/docs/Reference/Server.md +32 -28
- package/docs/Reference/TypeScript.md +9 -9
- package/docs/Reference/Validation-and-Serialization.md +5 -5
- package/examples/typescript-server.ts +1 -1
- package/fastify.d.ts +14 -5
- package/fastify.js +8 -6
- package/lib/contentTypeParser.js +9 -7
- package/lib/context.js +1 -2
- package/lib/error-handler.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/fourOhFour.js +1 -1
- package/lib/hooks.js +4 -1
- package/lib/{logger.js → logger-factory.js} +70 -122
- package/lib/logger-pino.js +68 -0
- package/lib/pluginOverride.js +1 -1
- package/lib/pluginUtils.js +2 -2
- package/lib/reply.js +4 -5
- package/lib/request.js +16 -9
- package/lib/route.js +23 -22
- package/lib/validation.js +2 -2
- package/package.json +13 -15
- package/test/404s.test.js +675 -629
- package/test/500s.test.js +72 -63
- package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
- package/test/als.test.js +48 -45
- package/test/async-await.test.js +148 -134
- package/test/async-dispose.test.js +4 -5
- package/test/async_hooks.test.js +30 -28
- package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
- package/test/buffer.test.js +9 -10
- package/test/build/error-serializer.test.js +3 -4
- package/test/build/version.test.js +2 -3
- package/test/build-certificate.js +1 -1
- package/test/bundler/README.md +5 -5
- package/test/bundler/esbuild/bundler-test.js +10 -9
- package/test/bundler/webpack/bundler-test.js +10 -9
- package/test/case-insensitive.test.js +31 -28
- package/test/chainable.test.js +4 -5
- package/test/check.test.js +8 -10
- package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
- package/test/client-timeout.test.js +5 -5
- package/test/close-pipelining.test.js +6 -8
- package/test/conditional-pino.test.js +47 -0
- package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
- package/test/constrained-routes.test.js +243 -236
- package/test/content-length.test.js +53 -68
- package/test/content-parser.test.js +186 -158
- package/test/content-type.test.js +8 -9
- package/test/context-config.test.js +44 -54
- package/test/custom-http-server.test.js +16 -20
- package/test/custom-parser.5.test.js +32 -32
- package/test/diagnostics-channel/404.test.js +15 -15
- package/test/diagnostics-channel/async-delay-request.test.js +25 -25
- package/test/diagnostics-channel/async-request.test.js +24 -24
- package/test/diagnostics-channel/error-before-handler.test.js +4 -5
- package/test/diagnostics-channel/error-request.test.js +19 -19
- package/test/diagnostics-channel/error-status.test.js +8 -8
- package/test/diagnostics-channel/init.test.js +6 -7
- package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
- package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
- package/test/diagnostics-channel/sync-request.test.js +19 -19
- package/test/encapsulated-child-logger-factory.test.js +8 -8
- package/test/encapsulated-error-handler.test.js +20 -20
- package/test/esm/errorCodes.test.mjs +5 -5
- package/test/esm/esm.test.mjs +3 -3
- package/test/esm/named-exports.mjs +3 -3
- package/test/esm/other.mjs +2 -2
- package/test/fastify-instance.test.js +33 -34
- package/test/{findRoute.test.js → find-route.test.js} +11 -10
- package/test/fluent-schema.test.js +33 -36
- package/test/handler-context.test.js +11 -11
- package/test/has-route.test.js +12 -15
- package/test/header-overflow.test.js +13 -12
- package/test/hooks.on-ready.test.js +2 -2
- package/test/hooks.test.js +25 -25
- package/test/http-methods/copy.test.js +22 -24
- package/test/http-methods/custom-http-methods.test.js +24 -21
- package/test/http-methods/get.test.js +97 -84
- package/test/http-methods/head.test.js +63 -57
- package/test/http-methods/lock.test.js +21 -20
- package/test/http-methods/mkcalendar.test.js +31 -27
- package/test/http-methods/mkcol.test.js +10 -10
- package/test/http-methods/move.test.js +11 -11
- package/test/http-methods/propfind.test.js +32 -27
- package/test/http-methods/proppatch.test.js +21 -19
- package/test/http-methods/report.test.js +32 -27
- package/test/http-methods/search.test.js +52 -47
- package/test/http-methods/trace.test.js +3 -4
- package/test/http-methods/unlock.test.js +10 -10
- package/test/http2/closing.test.js +50 -58
- package/test/http2/constraint.test.js +47 -50
- package/test/http2/head.test.js +18 -19
- package/test/http2/missing-http2-module.test.js +4 -5
- package/test/http2/plain.test.js +31 -31
- package/test/http2/secure-with-fallback.test.js +61 -61
- package/test/http2/secure.test.js +28 -31
- package/test/http2/unknown-http-method.test.js +13 -14
- package/test/https/custom-https-server.test.js +6 -7
- package/test/https/https.test.js +78 -78
- package/test/imports.test.js +5 -6
- package/test/internals/all.test.js +8 -11
- package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
- package/test/internals/context.test.js +9 -11
- package/test/internals/decorator.test.js +20 -21
- package/test/internals/errors.test.js +427 -427
- package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
- package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
- package/test/internals/hooks.test.js +31 -35
- package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
- package/test/internals/logger.test.js +28 -28
- package/test/internals/plugin.test.js +17 -18
- package/test/internals/reply-serialize.test.js +106 -106
- package/test/internals/reply.test.js +620 -585
- package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
- package/test/internals/request-validate.test.js +218 -221
- package/test/internals/request.test.js +225 -107
- package/test/internals/server.test.js +15 -12
- package/test/internals/validation.test.js +35 -36
- package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
- package/test/listen.5.test.js +9 -9
- package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
- package/test/middleware.test.js +4 -5
- package/test/noop-set.test.js +5 -5
- package/test/post-empty-body.test.js +18 -11
- package/test/pretty-print.test.js +59 -49
- package/test/proto-poisoning.test.js +42 -37
- package/test/reply-code.test.js +34 -32
- package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
- package/test/request-error.test.js +122 -0
- package/test/request-header-host.test.js +339 -0
- package/test/request-id.test.js +31 -25
- package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
- package/test/route.1.test.js +79 -72
- package/test/route.2.test.js +17 -16
- package/test/route.3.test.js +32 -27
- package/test/route.4.test.js +21 -25
- package/test/route.5.test.js +45 -64
- package/test/route.6.test.js +70 -89
- package/test/route.7.test.js +61 -65
- package/test/route.8.test.js +80 -18
- package/test/router-options.test.js +80 -77
- package/test/same-shape.test.js +5 -5
- package/test/schema-examples.test.js +72 -38
- package/test/serialize-response.test.js +9 -10
- package/test/server.test.js +75 -78
- package/test/set-error-handler.test.js +2 -3
- package/test/stream-serializers.test.js +10 -7
- package/test/sync-routes.test.js +18 -18
- package/test/test-reporter.mjs +68 -0
- package/test/trust-proxy.test.js +51 -45
- package/test/type-provider.test.js +8 -6
- package/test/types/content-type-parser.test-d.ts +1 -1
- package/test/types/fastify.test-d.ts +16 -4
- package/test/types/hooks.test-d.ts +2 -1
- package/test/types/instance.test-d.ts +13 -13
- package/test/types/logger.test-d.ts +2 -2
- package/test/types/plugin.test-d.ts +17 -9
- package/test/types/register.test-d.ts +22 -6
- package/test/types/reply.test-d.ts +1 -1
- package/test/types/route.test-d.ts +34 -4
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +1 -1
- package/test/url-rewriting.test.js +35 -38
- package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
- package/test/validation-error-handling.test.js +259 -285
- package/test/versioned-routes.test.js +126 -113
- package/test/web-api.test.js +48 -37
- package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
- package/types/hooks.d.ts +2 -1
- package/types/instance.d.ts +9 -2
- package/types/register.d.ts +12 -3
- package/types/reply.d.ts +1 -1
- package/types/request.d.ts +2 -6
- package/types/serverFactory.d.ts +3 -3
- package/types/utils.d.ts +13 -5
- package/test/types/import.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
|
|
5
5
|
const Request = require('../../lib/request')
|
|
6
6
|
const Context = require('../../lib/context')
|
|
@@ -42,34 +42,33 @@ test('Regular request', t => {
|
|
|
42
42
|
[kRequest]: Request,
|
|
43
43
|
[kOptions]: {
|
|
44
44
|
requestIdLogLabel: 'reqId'
|
|
45
|
-
}
|
|
45
|
+
},
|
|
46
|
+
server: {}
|
|
46
47
|
}
|
|
47
48
|
})
|
|
48
49
|
req.connection = req.socket
|
|
49
50
|
const request = new Request('id', 'params', req, 'query', 'log', context)
|
|
50
|
-
t.
|
|
51
|
-
t.
|
|
52
|
-
t.
|
|
53
|
-
t.
|
|
54
|
-
t.
|
|
55
|
-
t.
|
|
56
|
-
t.
|
|
57
|
-
t.
|
|
58
|
-
t.
|
|
59
|
-
t.
|
|
60
|
-
t.
|
|
61
|
-
t.
|
|
62
|
-
t.
|
|
63
|
-
t.
|
|
64
|
-
t.
|
|
65
|
-
t.
|
|
66
|
-
t.
|
|
67
|
-
t.
|
|
68
|
-
t.
|
|
51
|
+
t.assert.ok(request instanceof Request)
|
|
52
|
+
t.assert.ok(request.validateInput instanceof Function)
|
|
53
|
+
t.assert.ok(request.getValidationFunction instanceof Function)
|
|
54
|
+
t.assert.ok(request.compileValidationSchema instanceof Function)
|
|
55
|
+
t.assert.strictEqual(request.id, 'id')
|
|
56
|
+
t.assert.strictEqual(request.params, 'params')
|
|
57
|
+
t.assert.strictEqual(request.raw, req)
|
|
58
|
+
t.assert.strictEqual(request.query, 'query')
|
|
59
|
+
t.assert.strictEqual(request.headers, headers)
|
|
60
|
+
t.assert.strictEqual(request.log, 'log')
|
|
61
|
+
t.assert.strictEqual(request.ip, 'ip')
|
|
62
|
+
t.assert.strictEqual(request.ips, undefined)
|
|
63
|
+
t.assert.strictEqual(request.host, 'hostname')
|
|
64
|
+
t.assert.strictEqual(request.body, undefined)
|
|
65
|
+
t.assert.strictEqual(request.method, 'GET')
|
|
66
|
+
t.assert.strictEqual(request.url, '/')
|
|
67
|
+
t.assert.strictEqual(request.originalUrl, '/')
|
|
68
|
+
t.assert.strictEqual(request.socket, req.socket)
|
|
69
|
+
t.assert.strictEqual(request.protocol, 'http')
|
|
69
70
|
// Aim to not bad property keys (including Symbols)
|
|
70
|
-
t.
|
|
71
|
-
|
|
72
|
-
t.end()
|
|
71
|
+
t.assert.ok(!('undefined' in request))
|
|
73
72
|
})
|
|
74
73
|
|
|
75
74
|
test('Request with undefined config', t => {
|
|
@@ -97,35 +96,34 @@ test('Request with undefined config', t => {
|
|
|
97
96
|
[kRequest]: Request,
|
|
98
97
|
[kOptions]: {
|
|
99
98
|
requestIdLogLabel: 'reqId'
|
|
100
|
-
}
|
|
99
|
+
},
|
|
100
|
+
server: {}
|
|
101
101
|
}
|
|
102
102
|
})
|
|
103
103
|
req.connection = req.socket
|
|
104
104
|
const request = new Request('id', 'params', req, 'query', 'log', context)
|
|
105
|
-
t.
|
|
106
|
-
t.
|
|
107
|
-
t.
|
|
108
|
-
t.
|
|
109
|
-
t.
|
|
110
|
-
t.
|
|
111
|
-
t.
|
|
112
|
-
t.
|
|
113
|
-
t.
|
|
114
|
-
t.
|
|
115
|
-
t.
|
|
116
|
-
t.
|
|
117
|
-
t.
|
|
118
|
-
t.
|
|
119
|
-
t.
|
|
120
|
-
t.
|
|
121
|
-
t.
|
|
122
|
-
t.
|
|
123
|
-
t.
|
|
105
|
+
t.assert.ok(request, Request)
|
|
106
|
+
t.assert.ok(request.validateInput, Function)
|
|
107
|
+
t.assert.ok(request.getValidationFunction, Function)
|
|
108
|
+
t.assert.ok(request.compileValidationSchema, Function)
|
|
109
|
+
t.assert.strictEqual(request.id, 'id')
|
|
110
|
+
t.assert.strictEqual(request.params, 'params')
|
|
111
|
+
t.assert.strictEqual(request.raw, req)
|
|
112
|
+
t.assert.strictEqual(request.query, 'query')
|
|
113
|
+
t.assert.strictEqual(request.headers, headers)
|
|
114
|
+
t.assert.strictEqual(request.log, 'log')
|
|
115
|
+
t.assert.strictEqual(request.ip, 'ip')
|
|
116
|
+
t.assert.strictEqual(request.ips, undefined)
|
|
117
|
+
t.assert.strictEqual(request.hostname, 'hostname')
|
|
118
|
+
t.assert.strictEqual(request.body, undefined)
|
|
119
|
+
t.assert.strictEqual(request.method, 'GET')
|
|
120
|
+
t.assert.strictEqual(request.url, '/')
|
|
121
|
+
t.assert.strictEqual(request.originalUrl, '/')
|
|
122
|
+
t.assert.strictEqual(request.socket, req.socket)
|
|
123
|
+
t.assert.strictEqual(request.protocol, 'http')
|
|
124
124
|
|
|
125
125
|
// Aim to not bad property keys (including Symbols)
|
|
126
|
-
t.
|
|
127
|
-
|
|
128
|
-
t.end()
|
|
126
|
+
t.assert.ok(!('undefined' in request))
|
|
129
127
|
})
|
|
130
128
|
|
|
131
129
|
test('Regular request - hostname from authority', t => {
|
|
@@ -139,11 +137,35 @@ test('Regular request - hostname from authority', t => {
|
|
|
139
137
|
socket: { remoteAddress: 'ip' },
|
|
140
138
|
headers
|
|
141
139
|
}
|
|
140
|
+
const context = new Context({
|
|
141
|
+
schema: {
|
|
142
|
+
body: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
required: ['hello'],
|
|
145
|
+
properties: {
|
|
146
|
+
hello: { type: 'string' }
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
config: {
|
|
151
|
+
some: 'config',
|
|
152
|
+
url: req.url,
|
|
153
|
+
method: req.method
|
|
154
|
+
},
|
|
155
|
+
server: {
|
|
156
|
+
[kReply]: {},
|
|
157
|
+
[kRequest]: Request,
|
|
158
|
+
[kOptions]: {
|
|
159
|
+
requestIdLogLabel: 'reqId'
|
|
160
|
+
},
|
|
161
|
+
server: {}
|
|
162
|
+
}
|
|
163
|
+
})
|
|
142
164
|
|
|
143
|
-
const request = new Request('id', 'params', req, 'query', 'log')
|
|
144
|
-
t.
|
|
145
|
-
t.
|
|
146
|
-
t.
|
|
165
|
+
const request = new Request('id', 'params', req, 'query', 'log', context)
|
|
166
|
+
t.assert.ok(request instanceof Request)
|
|
167
|
+
t.assert.strictEqual(request.host, 'authority')
|
|
168
|
+
t.assert.strictEqual(request.port, null)
|
|
147
169
|
})
|
|
148
170
|
|
|
149
171
|
test('Regular request - host header has precedence over authority', t => {
|
|
@@ -158,10 +180,34 @@ test('Regular request - host header has precedence over authority', t => {
|
|
|
158
180
|
socket: { remoteAddress: 'ip' },
|
|
159
181
|
headers
|
|
160
182
|
}
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
183
|
+
const context = new Context({
|
|
184
|
+
schema: {
|
|
185
|
+
body: {
|
|
186
|
+
type: 'object',
|
|
187
|
+
required: ['hello'],
|
|
188
|
+
properties: {
|
|
189
|
+
hello: { type: 'string' }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
config: {
|
|
194
|
+
some: 'config',
|
|
195
|
+
url: req.url,
|
|
196
|
+
method: req.method
|
|
197
|
+
},
|
|
198
|
+
server: {
|
|
199
|
+
[kReply]: {},
|
|
200
|
+
[kRequest]: Request,
|
|
201
|
+
[kOptions]: {
|
|
202
|
+
requestIdLogLabel: 'reqId'
|
|
203
|
+
},
|
|
204
|
+
server: {}
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
const request = new Request('id', 'params', req, 'query', 'log', context)
|
|
208
|
+
t.assert.ok(request instanceof Request)
|
|
209
|
+
t.assert.strictEqual(request.host, 'hostname')
|
|
210
|
+
t.assert.strictEqual(request.port, null)
|
|
165
211
|
})
|
|
166
212
|
|
|
167
213
|
test('Request with trust proxy', t => {
|
|
@@ -202,24 +248,24 @@ test('Request with trust proxy', t => {
|
|
|
202
248
|
|
|
203
249
|
const TpRequest = Request.buildRequest(Request, true)
|
|
204
250
|
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
|
205
|
-
t.
|
|
206
|
-
t.
|
|
207
|
-
t.
|
|
208
|
-
t.
|
|
209
|
-
t.
|
|
210
|
-
t.
|
|
211
|
-
t.
|
|
212
|
-
t.
|
|
213
|
-
t.
|
|
214
|
-
t.
|
|
215
|
-
t.
|
|
216
|
-
t.
|
|
217
|
-
t.
|
|
218
|
-
t.
|
|
219
|
-
t.
|
|
220
|
-
t.
|
|
221
|
-
t.
|
|
222
|
-
t.
|
|
251
|
+
t.assert.ok(request instanceof TpRequest)
|
|
252
|
+
t.assert.strictEqual(request.id, 'id')
|
|
253
|
+
t.assert.strictEqual(request.params, 'params')
|
|
254
|
+
t.assert.deepStrictEqual(request.raw, req)
|
|
255
|
+
t.assert.strictEqual(request.query, 'query')
|
|
256
|
+
t.assert.strictEqual(request.headers, headers)
|
|
257
|
+
t.assert.strictEqual(request.log, 'log')
|
|
258
|
+
t.assert.strictEqual(request.ip, '2.2.2.2')
|
|
259
|
+
t.assert.deepStrictEqual(request.ips, ['ip', '1.1.1.1', '2.2.2.2'])
|
|
260
|
+
t.assert.strictEqual(request.host, 'example.com')
|
|
261
|
+
t.assert.strictEqual(request.body, undefined)
|
|
262
|
+
t.assert.strictEqual(request.method, 'GET')
|
|
263
|
+
t.assert.strictEqual(request.url, '/')
|
|
264
|
+
t.assert.strictEqual(request.socket, req.socket)
|
|
265
|
+
t.assert.strictEqual(request.protocol, 'http')
|
|
266
|
+
t.assert.ok(request.validateInput instanceof Function)
|
|
267
|
+
t.assert.ok(request.getValidationFunction instanceof Function)
|
|
268
|
+
t.assert.ok(request.compileValidationSchema instanceof Function)
|
|
223
269
|
})
|
|
224
270
|
|
|
225
271
|
test('Request with trust proxy, encrypted', t => {
|
|
@@ -237,8 +283,8 @@ test('Request with trust proxy, encrypted', t => {
|
|
|
237
283
|
|
|
238
284
|
const TpRequest = Request.buildRequest(Request, true)
|
|
239
285
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
240
|
-
t.
|
|
241
|
-
t.
|
|
286
|
+
t.assert.ok(request instanceof TpRequest)
|
|
287
|
+
t.assert.strictEqual(request.protocol, 'https')
|
|
242
288
|
})
|
|
243
289
|
|
|
244
290
|
test('Request with trust proxy - no x-forwarded-host header', t => {
|
|
@@ -253,11 +299,35 @@ test('Request with trust proxy - no x-forwarded-host header', t => {
|
|
|
253
299
|
socket: { remoteAddress: 'ip' },
|
|
254
300
|
headers
|
|
255
301
|
}
|
|
302
|
+
const context = new Context({
|
|
303
|
+
schema: {
|
|
304
|
+
body: {
|
|
305
|
+
type: 'object',
|
|
306
|
+
required: ['hello'],
|
|
307
|
+
properties: {
|
|
308
|
+
hello: { type: 'string' }
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
config: {
|
|
313
|
+
some: 'config',
|
|
314
|
+
url: req.url,
|
|
315
|
+
method: req.method
|
|
316
|
+
},
|
|
317
|
+
server: {
|
|
318
|
+
[kReply]: {},
|
|
319
|
+
[kRequest]: Request,
|
|
320
|
+
[kOptions]: {
|
|
321
|
+
requestIdLogLabel: 'reqId'
|
|
322
|
+
},
|
|
323
|
+
server: {}
|
|
324
|
+
}
|
|
325
|
+
})
|
|
256
326
|
|
|
257
327
|
const TpRequest = Request.buildRequest(Request, true)
|
|
258
|
-
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
259
|
-
t.
|
|
260
|
-
t.
|
|
328
|
+
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
|
329
|
+
t.assert.ok(request instanceof TpRequest)
|
|
330
|
+
t.assert.strictEqual(request.host, 'hostname')
|
|
261
331
|
})
|
|
262
332
|
|
|
263
333
|
test('Request with trust proxy - no x-forwarded-host header and fallback to authority', t => {
|
|
@@ -272,11 +342,35 @@ test('Request with trust proxy - no x-forwarded-host header and fallback to auth
|
|
|
272
342
|
socket: { remoteAddress: 'ip' },
|
|
273
343
|
headers
|
|
274
344
|
}
|
|
345
|
+
const context = new Context({
|
|
346
|
+
schema: {
|
|
347
|
+
body: {
|
|
348
|
+
type: 'object',
|
|
349
|
+
required: ['hello'],
|
|
350
|
+
properties: {
|
|
351
|
+
hello: { type: 'string' }
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
},
|
|
355
|
+
config: {
|
|
356
|
+
some: 'config',
|
|
357
|
+
url: req.url,
|
|
358
|
+
method: req.method
|
|
359
|
+
},
|
|
360
|
+
server: {
|
|
361
|
+
[kReply]: {},
|
|
362
|
+
[kRequest]: Request,
|
|
363
|
+
[kOptions]: {
|
|
364
|
+
requestIdLogLabel: 'reqId'
|
|
365
|
+
},
|
|
366
|
+
server: {}
|
|
367
|
+
}
|
|
368
|
+
})
|
|
275
369
|
|
|
276
370
|
const TpRequest = Request.buildRequest(Request, true)
|
|
277
|
-
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
278
|
-
t.
|
|
279
|
-
t.
|
|
371
|
+
const request = new TpRequest('id', 'params', req, 'query', 'log', context)
|
|
372
|
+
t.assert.ok(request instanceof TpRequest)
|
|
373
|
+
t.assert.strictEqual(request.host, 'authority')
|
|
280
374
|
})
|
|
281
375
|
|
|
282
376
|
test('Request with trust proxy - x-forwarded-host header has precedence over host', t => {
|
|
@@ -295,8 +389,8 @@ test('Request with trust proxy - x-forwarded-host header has precedence over hos
|
|
|
295
389
|
|
|
296
390
|
const TpRequest = Request.buildRequest(Request, true)
|
|
297
391
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
298
|
-
t.
|
|
299
|
-
t.
|
|
392
|
+
t.assert.ok(request instanceof TpRequest)
|
|
393
|
+
t.assert.strictEqual(request.host, 'example.com')
|
|
300
394
|
})
|
|
301
395
|
|
|
302
396
|
test('Request with trust proxy - handles multiple entries in x-forwarded-host/proto', t => {
|
|
@@ -314,9 +408,9 @@ test('Request with trust proxy - handles multiple entries in x-forwarded-host/pr
|
|
|
314
408
|
|
|
315
409
|
const TpRequest = Request.buildRequest(Request, true)
|
|
316
410
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
317
|
-
t.
|
|
318
|
-
t.
|
|
319
|
-
t.
|
|
411
|
+
t.assert.ok(request instanceof TpRequest)
|
|
412
|
+
t.assert.strictEqual(request.host, 'example.com')
|
|
413
|
+
t.assert.strictEqual(request.protocol, 'https')
|
|
320
414
|
})
|
|
321
415
|
|
|
322
416
|
test('Request with trust proxy - plain', t => {
|
|
@@ -334,7 +428,7 @@ test('Request with trust proxy - plain', t => {
|
|
|
334
428
|
|
|
335
429
|
const TpRequest = Request.buildRequest(Request, true)
|
|
336
430
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
337
|
-
t.
|
|
431
|
+
t.assert.deepStrictEqual(request.protocol, 'http')
|
|
338
432
|
})
|
|
339
433
|
|
|
340
434
|
test('Request with undefined socket', t => {
|
|
@@ -348,25 +442,49 @@ test('Request with undefined socket', t => {
|
|
|
348
442
|
socket: undefined,
|
|
349
443
|
headers
|
|
350
444
|
}
|
|
351
|
-
const
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
445
|
+
const context = new Context({
|
|
446
|
+
schema: {
|
|
447
|
+
body: {
|
|
448
|
+
type: 'object',
|
|
449
|
+
required: ['hello'],
|
|
450
|
+
properties: {
|
|
451
|
+
hello: { type: 'string' }
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
config: {
|
|
456
|
+
some: 'config',
|
|
457
|
+
url: req.url,
|
|
458
|
+
method: req.method
|
|
459
|
+
},
|
|
460
|
+
server: {
|
|
461
|
+
[kReply]: {},
|
|
462
|
+
[kRequest]: Request,
|
|
463
|
+
[kOptions]: {
|
|
464
|
+
requestIdLogLabel: 'reqId'
|
|
465
|
+
},
|
|
466
|
+
server: {}
|
|
467
|
+
}
|
|
468
|
+
})
|
|
469
|
+
const request = new Request('id', 'params', req, 'query', 'log', context)
|
|
470
|
+
t.assert.ok(request instanceof Request)
|
|
471
|
+
t.assert.strictEqual(request.id, 'id')
|
|
472
|
+
t.assert.strictEqual(request.params, 'params')
|
|
473
|
+
t.assert.deepStrictEqual(request.raw, req)
|
|
474
|
+
t.assert.strictEqual(request.query, 'query')
|
|
475
|
+
t.assert.strictEqual(request.headers, headers)
|
|
476
|
+
t.assert.strictEqual(request.log, 'log')
|
|
477
|
+
t.assert.strictEqual(request.ip, undefined)
|
|
478
|
+
t.assert.strictEqual(request.ips, undefined)
|
|
479
|
+
t.assert.strictEqual(request.host, 'hostname')
|
|
480
|
+
t.assert.deepStrictEqual(request.body, undefined)
|
|
481
|
+
t.assert.strictEqual(request.method, 'GET')
|
|
482
|
+
t.assert.strictEqual(request.url, '/')
|
|
483
|
+
t.assert.strictEqual(request.protocol, undefined)
|
|
484
|
+
t.assert.deepStrictEqual(request.socket, req.socket)
|
|
485
|
+
t.assert.ok(request.validateInput instanceof Function)
|
|
486
|
+
t.assert.ok(request.getValidationFunction instanceof Function)
|
|
487
|
+
t.assert.ok(request.compileValidationSchema instanceof Function)
|
|
370
488
|
})
|
|
371
489
|
|
|
372
490
|
test('Request with trust proxy and undefined socket', t => {
|
|
@@ -384,5 +502,5 @@ test('Request with trust proxy and undefined socket', t => {
|
|
|
384
502
|
|
|
385
503
|
const TpRequest = Request.buildRequest(Request, true)
|
|
386
504
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
387
|
-
t.
|
|
505
|
+
t.assert.deepStrictEqual(request.protocol, undefined)
|
|
388
506
|
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
const proxyquire = require('proxyquire')
|
|
5
5
|
|
|
6
6
|
const Fastify = require('../../fastify')
|
|
@@ -15,7 +15,7 @@ test('start listening', async t => {
|
|
|
15
15
|
const { server, listen } = createServer({}, handler)
|
|
16
16
|
await listen.call(Fastify(), { port: 0, host: 'localhost' })
|
|
17
17
|
server.close()
|
|
18
|
-
t.
|
|
18
|
+
t.assert.ok(true, 'server started')
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
test('DNS errors does not stop the main server on localhost - promise interface', async t => {
|
|
@@ -29,10 +29,10 @@ test('DNS errors does not stop the main server on localhost - promise interface'
|
|
|
29
29
|
const { server, listen } = createServer({}, handler)
|
|
30
30
|
await listen.call(Fastify(), { port: 0, host: 'localhost' })
|
|
31
31
|
server.close()
|
|
32
|
-
t.
|
|
32
|
+
t.assert.ok(true, 'server started')
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
-
test('DNS errors does not stop the main server on localhost - callback interface', t => {
|
|
35
|
+
test('DNS errors does not stop the main server on localhost - callback interface', (t, done) => {
|
|
36
36
|
t.plan(2)
|
|
37
37
|
const { createServer } = proxyquire('../../lib/server', {
|
|
38
38
|
'node:dns': {
|
|
@@ -43,13 +43,14 @@ test('DNS errors does not stop the main server on localhost - callback interface
|
|
|
43
43
|
})
|
|
44
44
|
const { server, listen } = createServer({}, handler)
|
|
45
45
|
listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {
|
|
46
|
-
t.
|
|
46
|
+
t.assert.ifError(err)
|
|
47
47
|
server.close()
|
|
48
|
-
t.
|
|
48
|
+
t.assert.ok(true, 'server started')
|
|
49
|
+
done()
|
|
49
50
|
})
|
|
50
51
|
})
|
|
51
52
|
|
|
52
|
-
test('DNS returns empty binding', t => {
|
|
53
|
+
test('DNS returns empty binding', (t, done) => {
|
|
53
54
|
t.plan(2)
|
|
54
55
|
const { createServer } = proxyquire('../../lib/server', {
|
|
55
56
|
'node:dns': {
|
|
@@ -60,13 +61,14 @@ test('DNS returns empty binding', t => {
|
|
|
60
61
|
})
|
|
61
62
|
const { server, listen } = createServer({}, handler)
|
|
62
63
|
listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {
|
|
63
|
-
t.
|
|
64
|
+
t.assert.ifError(err)
|
|
64
65
|
server.close()
|
|
65
|
-
t.
|
|
66
|
+
t.assert.ok(true, 'server started')
|
|
67
|
+
done()
|
|
66
68
|
})
|
|
67
69
|
})
|
|
68
70
|
|
|
69
|
-
test('DNS returns more than two binding', t => {
|
|
71
|
+
test('DNS returns more than two binding', (t, done) => {
|
|
70
72
|
t.plan(2)
|
|
71
73
|
const { createServer } = proxyquire('../../lib/server', {
|
|
72
74
|
'node:dns': {
|
|
@@ -81,8 +83,9 @@ test('DNS returns more than two binding', t => {
|
|
|
81
83
|
})
|
|
82
84
|
const { server, listen } = createServer({}, handler)
|
|
83
85
|
listen.call(Fastify(), { port: 0, host: 'localhost' }, (err) => {
|
|
84
|
-
t.
|
|
86
|
+
t.assert.ifError(err)
|
|
85
87
|
server.close()
|
|
86
|
-
t.
|
|
88
|
+
t.assert.ok(true, 'server started')
|
|
89
|
+
done()
|
|
87
90
|
})
|
|
88
91
|
})
|