fastify 4.27.0 → 5.0.0-alpha.2
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/.markdownlint-cli2.yaml +1 -1
- package/.tap/processinfo/09002e93-10ad-430c-bc86-c0576928b0ed.json +241 -0
- package/.tap/processinfo/ee66c5ab-635d-48b5-8be6-3dc3ceea5bfc.json +268 -0
- package/.tap/test-results/test/404s.test.js.tap +623 -0
- package/.tap/test-results/test/500s.test.js.tap +64 -0
- package/.tap/test-results/test/allowUnsafeRegex.test.js.tap +36 -0
- package/.tap/test-results/test/als.test.js.tap +15 -0
- package/.tap/test-results/test/async-await.test.js.tap +184 -0
- package/.tap/test-results/test/async-dispose.test.js.tap +8 -0
- package/.tap/test-results/test/async_hooks.test.js.tap +10 -0
- package/.tap/test-results/test/bodyLimit.test.js.tap +48 -0
- package/.tap/test-results/test/buffer.test.js.tap +20 -0
- package/.tap/test-results/test/build/error-serializer.test.js.tap +12 -0
- package/.tap/test-results/test/build/version.test.js.tap +7 -0
- package/.tap/test-results/test/case-insensitive.test.js.tap +36 -0
- package/.tap/test-results/test/chainable.test.js.tap +17 -0
- package/.tap/test-results/test/check.test.js.tap +10 -0
- package/.tap/test-results/test/childLoggerFactory.test.js.tap +23 -0
- package/.tap/test-results/test/client-timeout.test.js.tap +7 -0
- package/.tap/test-results/test/close-pipelining.test.js.tap +15 -0
- package/.tap/test-results/test/close.test.js.tap +172 -0
- package/.tap/test-results/test/connectionTimeout.test.js.tap +12 -0
- package/.tap/test-results/test/constrained-routes.test.js.tap +173 -0
- package/.tap/test-results/test/content-length.test.js.tap +46 -0
- package/.tap/test-results/test/content-parser.test.js.tap +266 -0
- package/.tap/test-results/test/content-type.test.js.tap +14 -0
- package/.tap/test-results/test/context-config.test.js.tap +41 -0
- package/.tap/test-results/test/copy.test.js.tap +14 -0
- package/.tap/test-results/test/custom-http-server.test.js.tap +30 -0
- package/.tap/test-results/test/custom-parser-async.test.js.tap +21 -0
- package/.tap/test-results/test/custom-parser.0.test.js.tap +199 -0
- package/.tap/test-results/test/custom-parser.1.test.js.tap +90 -0
- package/.tap/test-results/test/custom-parser.2.test.js.tap +22 -0
- package/.tap/test-results/test/custom-parser.3.test.js.tap +53 -0
- package/.tap/test-results/test/custom-parser.4.test.js.tap +45 -0
- package/.tap/test-results/test/custom-parser.5.test.js.tap +41 -0
- package/.tap/test-results/test/custom-querystring-parser.test.js.tap +46 -0
- package/.tap/test-results/test/decorator.test.js.tap +465 -0
- package/.tap/test-results/test/delete.test.js.tap +110 -0
- package/.tap/test-results/test/diagnostics-channel/404.test.js.tap +15 -0
- package/.tap/test-results/test/diagnostics-channel/async-delay-request.test.js.tap +25 -0
- package/.tap/test-results/test/diagnostics-channel/async-request.test.js.tap +24 -0
- package/.tap/test-results/test/diagnostics-channel/error-before-handler.test.js.tap +9 -0
- package/.tap/test-results/test/diagnostics-channel/error-request.test.js.tap +20 -0
- package/.tap/test-results/test/diagnostics-channel/error-status.test.js.tap +10 -0
- package/.tap/test-results/test/diagnostics-channel/init.test.js.tap +14 -0
- package/.tap/test-results/test/diagnostics-channel/sync-delay-request.test.js.tap +16 -0
- package/.tap/test-results/test/diagnostics-channel/sync-request-reply.test.js.tap +16 -0
- package/.tap/test-results/test/diagnostics-channel/sync-request.test.js.tap +19 -0
- package/.tap/test-results/test/encapsulated-child-logger-factory.test.js.tap +18 -0
- package/.tap/test-results/test/encapsulated-error-handler.test.js.tap +243 -0
- package/.tap/test-results/test/esm/errorCodes.test.mjs.tap +9 -0
- package/.tap/test-results/test/esm/esm.test.mjs.tap +8 -0
- package/.tap/test-results/test/esm/index.test.js.tap +8 -0
- package/.tap/test-results/test/fastify-instance.test.js.tap +114 -0
- package/.tap/test-results/test/findRoute.test.js.tap +37 -0
- package/.tap/test-results/test/fluent-schema.test.js.tap +36 -0
- package/.tap/test-results/test/genReqId.test.js.tap +106 -0
- package/.tap/test-results/test/get.test.js.tap +151 -0
- package/.tap/test-results/test/handler-context.test.js.tap +19 -0
- package/.tap/test-results/test/has-route.test.js.tap +30 -0
- package/.tap/test-results/test/head.test.js.tap +130 -0
- package/.tap/test-results/test/header-overflow.test.js.tap +16 -0
- package/.tap/test-results/test/hooks-async.test.js.tap +286 -0
- package/.tap/test-results/test/hooks.on-listen.test.js.tap +311 -0
- package/.tap/test-results/test/hooks.on-ready.test.js.tap +151 -0
- package/.tap/test-results/test/hooks.test.js.tap +966 -0
- package/.tap/test-results/test/http2/closing.test.js.tap +35 -0
- package/.tap/test-results/test/http2/constraint.test.js.tap +32 -0
- package/.tap/test-results/test/http2/head.test.js.tap +9 -0
- package/.tap/test-results/test/http2/missing-http2-module.test.js.tap +8 -0
- package/.tap/test-results/test/http2/plain.test.js.tap +22 -0
- package/.tap/test-results/test/http2/secure-with-fallback.test.js.tap +40 -0
- package/.tap/test-results/test/http2/secure.test.js.tap +27 -0
- package/.tap/test-results/test/http2/unknown-http-method.test.js.tap +9 -0
- package/.tap/test-results/test/https/custom-https-server.test.js.tap +10 -0
- package/.tap/test-results/test/https/https.test.js.tap +45 -0
- package/.tap/test-results/test/imports.test.js.tap +14 -0
- package/.tap/test-results/test/inject.test.js.tap +165 -0
- package/.tap/test-results/test/internals/all.test.js.tap +42 -0
- package/.tap/test-results/test/internals/contentTypeParser.test.js.tap +14 -0
- package/.tap/test-results/test/internals/context.test.js.tap +14 -0
- package/.tap/test-results/test/internals/decorator.test.js.tap +51 -0
- package/.tap/test-results/test/internals/errors.test.js.tap +1212 -0
- package/.tap/test-results/test/internals/handleRequest.test.js.tap +69 -0
- package/.tap/test-results/test/internals/hookRunner.test.js.tap +143 -0
- package/.tap/test-results/test/internals/hooks.test.js.tap +45 -0
- package/.tap/test-results/test/internals/initialConfig.test.js.tap +125 -0
- package/.tap/test-results/test/internals/logger.test.js.tap +71 -0
- package/.tap/test-results/test/internals/plugin.test.js.tap +48 -0
- package/.tap/test-results/test/internals/reply-serialize.test.js.tap +166 -0
- package/.tap/test-results/test/internals/reply.test.js.tap +688 -0
- package/.tap/test-results/test/internals/reqIdGenFactory.test.js.tap +74 -0
- package/.tap/test-results/test/internals/request-validate.test.js.tap +384 -0
- package/.tap/test-results/test/internals/request.test.js.tap +163 -0
- package/.tap/test-results/test/internals/server.test.js.tap +30 -0
- package/.tap/test-results/test/internals/validation.test.js.tap +121 -0
- package/.tap/test-results/test/keepAliveTimeout.test.js.tap +12 -0
- package/.tap/test-results/test/listen.1.test.js.tap +31 -0
- package/.tap/test-results/test/listen.2.test.js.tap +46 -0
- package/.tap/test-results/test/listen.3.test.js.tap +25 -0
- package/.tap/test-results/test/listen.4.test.js.tap +51 -0
- package/.tap/test-results/test/lock.test.js.tap +29 -0
- package/.tap/test-results/test/logger/instantiation.test.js.tap +92 -0
- package/.tap/test-results/test/logger/logging.test.js.tap +117 -0
- package/.tap/test-results/test/logger/options.test.js.tap +165 -0
- package/.tap/test-results/test/logger/request.test.js.tap +82 -0
- package/.tap/test-results/test/logger/response.test.js.tap +38 -0
- package/.tap/test-results/test/maxRequestsPerSocket.test.js.tap +44 -0
- package/.tap/test-results/test/method-missing.test.js.tap +8 -0
- package/.tap/test-results/test/middleware.test.js.tap +17 -0
- package/.tap/test-results/test/mkcalendar.test.js.tap +43 -0
- package/.tap/test-results/test/mkcol.test.js.tap +14 -0
- package/.tap/test-results/test/move.test.js.tap +15 -0
- package/.tap/test-results/test/noop-set.test.js.tap +8 -0
- package/.tap/test-results/test/nullable-validation.test.js.tap +36 -0
- package/.tap/test-results/test/options.error-handler.test.js.tap +186 -0
- package/.tap/test-results/test/options.test.js.tap +174 -0
- package/.tap/test-results/test/output-validation.test.js.tap +66 -0
- package/.tap/test-results/test/patch.error-handler.test.js.tap +206 -0
- package/.tap/test-results/test/patch.test.js.tap +182 -0
- package/.tap/test-results/test/plugin.1.test.js.tap +78 -0
- package/.tap/test-results/test/plugin.2.test.js.tap +102 -0
- package/.tap/test-results/test/plugin.3.test.js.tap +58 -0
- package/.tap/test-results/test/plugin.4.test.js.tap +164 -0
- package/.tap/test-results/test/post-empty-body.test.js.tap +8 -0
- package/.tap/test-results/test/pretty-print.test.js.tap +82 -0
- package/.tap/test-results/test/promises.test.js.tap +46 -0
- package/.tap/test-results/test/propfind.test.js.tap +43 -0
- package/.tap/test-results/test/proppatch.test.js.tap +29 -0
- package/.tap/test-results/test/proto-poisoning.test.js.tap +47 -0
- package/.tap/test-results/test/put.error-handler.test.js.tap +206 -0
- package/.tap/test-results/test/put.test.js.tap +182 -0
- package/.tap/test-results/test/register.test.js.tap +61 -0
- package/.tap/test-results/test/reply-code.test.js.tap +40 -0
- package/.tap/test-results/test/reply-earlyHints.test.js.tap +22 -0
- package/.tap/test-results/test/reply-error.test.js.tap +643 -0
- package/.tap/test-results/test/reply-trailers.test.js.tap +176 -0
- package/.tap/test-results/test/report.test.js.tap +43 -0
- package/.tap/test-results/test/request-error.test.js.tap +98 -0
- package/.tap/test-results/test/request-id.test.js.tap +38 -0
- package/.tap/test-results/test/request.deprecated.test.js.tap +13 -0
- package/.tap/test-results/test/requestTimeout.test.js.tap +21 -0
- package/.tap/test-results/test/route-hooks.test.js.tap +498 -0
- package/.tap/test-results/test/route-prefix.test.js.tap +195 -0
- package/.tap/test-results/test/route-shorthand.test.js.tap +190 -0
- package/.tap/test-results/test/route.1.test.js.tap +93 -0
- package/.tap/test-results/test/route.2.test.js.tap +28 -0
- package/.tap/test-results/test/route.3.test.js.tap +39 -0
- package/.tap/test-results/test/route.4.test.js.tap +32 -0
- package/.tap/test-results/test/route.5.test.js.tap +54 -0
- package/.tap/test-results/test/route.6.test.js.tap +81 -0
- package/.tap/test-results/test/route.7.test.js.tap +93 -0
- package/.tap/test-results/test/route.8.test.js.tap +38 -0
- package/.tap/test-results/test/router-options.test.js.tap +104 -0
- package/.tap/test-results/test/same-shape.test.js.tap +22 -0
- package/.tap/test-results/test/schema-examples.test.js.tap +85 -0
- package/.tap/test-results/test/schema-feature.test.js.tap +445 -0
- package/.tap/test-results/test/schema-serialization.test.js.tap +194 -0
- package/.tap/test-results/test/schema-special-usage.test.js.tap +186 -0
- package/.tap/test-results/test/schema-validation.test.js.tap +199 -0
- package/.tap/test-results/test/search.test.js.tap +77 -0
- package/.tap/test-results/test/serialize-response.test.js.tap +26 -0
- package/.tap/test-results/test/server.test.js.tap +65 -0
- package/.tap/test-results/test/set-error-handler.test.js.tap +7 -0
- package/.tap/test-results/test/skip-reply-send.test.js.tap +272 -0
- package/.tap/test-results/test/stream.1.test.js.tap +36 -0
- package/.tap/test-results/test/stream.2.test.js.tap +20 -0
- package/.tap/test-results/test/stream.3.test.js.tap +34 -0
- package/.tap/test-results/test/stream.4.test.js.tap +40 -0
- package/.tap/test-results/test/stream.5.test.js.tap +37 -0
- package/.tap/test-results/test/sync-routes.test.js.tap +19 -0
- package/.tap/test-results/test/throw.test.js.tap +116 -0
- package/.tap/test-results/test/trace.test.js.tap +7 -0
- package/.tap/test-results/test/trust-proxy.test.js.tap +109 -0
- package/.tap/test-results/test/type-provider.test.js.tap +12 -0
- package/.tap/test-results/test/unlock.test.js.tap +14 -0
- package/.tap/test-results/test/upgrade.test.js.tap +8 -0
- package/.tap/test-results/test/url-rewriting.test.js.tap +39 -0
- package/.tap/test-results/test/useSemicolonDelimiter.test.js.tap +33 -0
- package/.tap/test-results/test/validation-error-handling.test.js.tap +180 -0
- package/.tap/test-results/test/versioned-routes.test.js.tap +151 -0
- package/.tap/test-results/test/web-api.test.js.tap +51 -0
- package/.tap/test-results/test/wrapThenable.test.js.tap +11 -0
- package/.taprc +4 -8
- package/README.md +3 -6
- package/build/build-error-serializer.js +4 -1
- package/build/build-validation.js +5 -4
- package/docs/Guides/Database.md +1 -1
- package/docs/Guides/Delay-Accepting-Requests.md +3 -3
- package/docs/Guides/Ecosystem.md +2 -0
- package/docs/Guides/Migration-Guide-V5.md +20 -0
- package/docs/Guides/Write-Type-Provider.md +4 -2
- package/docs/Reference/ContentTypeParser.md +30 -1
- package/docs/Reference/Decorators.md +42 -16
- package/docs/Reference/Errors.md +10 -2
- package/docs/Reference/Hooks.md +48 -14
- package/docs/Reference/Logging.md +5 -5
- package/docs/Reference/Reply.md +29 -24
- package/docs/Reference/Request.md +5 -1
- package/docs/Reference/Routes.md +24 -28
- package/docs/Reference/Server.md +14 -53
- package/docs/Reference/Type-Providers.md +21 -26
- package/docs/Reference/TypeScript.md +46 -29
- package/docs/Reference/Warnings.md +2 -8
- package/eslint.config.js +27 -0
- package/examples/typescript-server.ts +14 -14
- package/fastify.d.ts +15 -14
- package/fastify.js +41 -15
- package/lib/configValidator.js +94 -76
- package/lib/contentTypeParser.js +54 -88
- package/lib/decorate.js +3 -7
- package/lib/error-serializer.js +77 -19
- package/lib/errors.js +31 -6
- package/lib/handleRequest.js +70 -39
- package/lib/httpMethods.js +34 -18
- package/lib/logger.js +24 -6
- package/lib/pluginUtils.js +5 -5
- package/lib/reply.js +16 -13
- package/lib/request.js +37 -19
- package/lib/route.js +7 -31
- package/lib/server.js +62 -123
- package/lib/warnings.js +28 -27
- package/lib/wrapThenable.js +46 -22
- package/package.json +38 -58
- package/test/404s.test.js +8 -12
- package/test/async-await.test.js +46 -2
- package/test/build/error-serializer.test.js +4 -2
- package/test/check.test.js +225 -0
- package/test/close-pipelining.test.js +2 -34
- package/test/close.test.js +1 -41
- package/test/content-parser.test.js +69 -117
- package/test/custom-parser.1.test.js +40 -1
- package/test/decorator-namespace.test._js_ +31 -0
- package/test/decorator.test.js +92 -43
- package/test/delete.test.js +21 -1
- package/test/diagnostics-channel/404.test.js +57 -0
- package/test/diagnostics-channel/async-delay-request.test.js +74 -0
- package/test/diagnostics-channel/async-request.test.js +72 -0
- package/test/diagnostics-channel/error-before-handler.test.js +36 -0
- package/test/diagnostics-channel/error-request.test.js +61 -0
- package/test/diagnostics-channel/error-status.test.js +39 -0
- package/test/{diagnostics-channel.test.js → diagnostics-channel/init.test.js} +6 -16
- package/test/diagnostics-channel/sync-delay-request.test.js +58 -0
- package/test/diagnostics-channel/sync-request-reply.test.js +58 -0
- package/test/diagnostics-channel/sync-request.test.js +61 -0
- package/test/encapsulated-error-handler.test.js +201 -14
- package/test/esm/index.test.js +2 -12
- package/test/findRoute.test.js +16 -0
- package/test/genReqId.test.js +9 -0
- package/test/get.test.js +28 -0
- package/test/has-route.test.js +18 -2
- package/test/helper.js +1 -5
- package/test/hooks.test.js +0 -4
- package/test/http2/constraint.test.js +22 -1
- package/test/http2/plain.test.js +21 -6
- package/test/http2/secure.test.js +12 -1
- package/test/https/https.test.js +57 -0
- package/test/inject.test.js +1 -2
- package/test/internals/decorator.test.js +0 -2
- package/test/internals/errors.test.js +57 -17
- package/test/internals/handleRequest.test.js +5 -1
- package/test/internals/initialConfig.test.js +5 -5
- package/test/internals/logger.test.js +31 -2
- package/test/internals/reply.test.js +38 -80
- package/test/internals/request.test.js +13 -11
- package/test/listen.1.test.js +5 -15
- package/test/listen.5.test.js +88 -0
- package/test/logger/instantiation.test.js +8 -8
- package/test/logger/logging.test.js +4 -4
- package/test/logger/options.test.js +102 -21
- package/test/logger/response.test.js +6 -6
- package/test/maxRequestsPerSocket.test.js +2 -5
- package/test/method-missing.test.js +24 -0
- package/test/plugin.1.test.js +2 -4
- package/test/plugin.2.test.js +0 -2
- package/test/plugin.3.test.js +0 -2
- package/test/plugin.4.test.js +92 -56
- package/test/register.test.js +2 -4
- package/test/reply-earlyHints.test.js +98 -0
- package/test/reply-error.test.js +0 -2
- package/test/route-hooks.test.js +0 -1
- package/test/route-shorthand.test.js +60 -0
- package/test/schema-special-usage.test.js +1 -1
- package/test/server.test.js +17 -2
- package/test/stream.2.test.js +1 -1
- package/test/stream.4.test.js +0 -42
- package/test/stream.5.test.js +2 -2
- package/test/trust-proxy.test.js +33 -27
- package/test/types/errors.test-d.ts +0 -2
- package/test/types/fastify.test-d.ts +14 -12
- package/test/types/hooks.test-d.ts +1 -0
- package/test/types/import.ts +1 -0
- package/test/types/instance.test-d.ts +10 -51
- package/test/types/logger.test-d.ts +43 -6
- package/test/types/plugin.test-d.ts +5 -2
- package/test/types/register.test-d.ts +2 -2
- package/test/types/reply.test-d.ts +13 -12
- package/test/types/request.test-d.ts +19 -8
- package/test/types/route.test-d.ts +30 -2
- package/test/types/schema.test-d.ts +2 -2
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +60 -13
- package/test/types/using.test-d.ts +4 -1
- package/test/url-rewriting.test.js +3 -2
- package/test/useSemicolonDelimiter.test.js +3 -6
- package/test/versioned-routes.test.js +1 -1
- package/test/web-api.test.js +0 -6
- package/types/content-type-parser.d.ts +3 -3
- package/types/context.d.ts +0 -1
- package/types/errors.d.ts +1 -0
- package/types/hooks.d.ts +6 -6
- package/types/instance.d.ts +28 -41
- package/types/logger.d.ts +3 -3
- package/types/plugin.d.ts +3 -3
- package/types/reply.d.ts +13 -14
- package/types/request.d.ts +5 -3
- package/types/route.d.ts +29 -29
- package/types/schema.d.ts +3 -3
- package/types/serverFactory.d.ts +2 -2
- package/types/type-provider.d.ts +22 -12
- package/types/utils.d.ts +18 -18
- package/.c8rc.json +0 -8
- package/.eslintrc +0 -4
- package/test/default-route.test.js +0 -88
- package/test/listen.deprecated.test.js +0 -229
- package/test/unsupported-httpversion.test.js +0 -31
- package/types/.eslintrc.json +0 -48
package/test/https/https.test.js
CHANGED
|
@@ -74,3 +74,60 @@ test('https', (t) => {
|
|
|
74
74
|
})
|
|
75
75
|
})
|
|
76
76
|
})
|
|
77
|
+
|
|
78
|
+
test('https - headers', (t) => {
|
|
79
|
+
t.plan(4)
|
|
80
|
+
let fastify
|
|
81
|
+
try {
|
|
82
|
+
fastify = Fastify({
|
|
83
|
+
https: {
|
|
84
|
+
key: global.context.key,
|
|
85
|
+
cert: global.context.cert
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
t.pass('Key/cert successfully loaded')
|
|
89
|
+
} catch (e) {
|
|
90
|
+
t.fail('Key/cert loading failed', e)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
fastify.get('/', function (req, reply) {
|
|
94
|
+
reply.code(200).send({ hello: 'world', hostname: req.hostname, port: req.port })
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
t.teardown(async () => { await fastify.close() })
|
|
98
|
+
|
|
99
|
+
fastify.listen({ port: 0 }, err => {
|
|
100
|
+
t.error(err)
|
|
101
|
+
|
|
102
|
+
t.test('https get request', t => {
|
|
103
|
+
t.plan(4)
|
|
104
|
+
sget({
|
|
105
|
+
method: 'GET',
|
|
106
|
+
url: 'https://localhost:' + fastify.server.address().port,
|
|
107
|
+
rejectUnauthorized: false
|
|
108
|
+
}, (err, response, body) => {
|
|
109
|
+
t.error(err)
|
|
110
|
+
t.equal(response.statusCode, 200)
|
|
111
|
+
const parsedBody = JSON.parse(body)
|
|
112
|
+
t.equal(parsedBody.hostname, 'localhost')
|
|
113
|
+
t.equal(parsedBody.port, fastify.server.address().port)
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
t.test('https get request - test port fall back', t => {
|
|
117
|
+
t.plan(3)
|
|
118
|
+
sget({
|
|
119
|
+
method: 'GET',
|
|
120
|
+
headers: {
|
|
121
|
+
host: 'example.com'
|
|
122
|
+
},
|
|
123
|
+
url: 'https://localhost:' + fastify.server.address().port,
|
|
124
|
+
rejectUnauthorized: false
|
|
125
|
+
}, (err, response, body) => {
|
|
126
|
+
t.error(err)
|
|
127
|
+
t.equal(response.statusCode, 200)
|
|
128
|
+
const parsedBody = JSON.parse(body)
|
|
129
|
+
t.equal(parsedBody.port, null)
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
})
|
package/test/inject.test.js
CHANGED
|
@@ -5,7 +5,6 @@ const test = t.test
|
|
|
5
5
|
const Stream = require('node:stream')
|
|
6
6
|
const util = require('node:util')
|
|
7
7
|
const Fastify = require('..')
|
|
8
|
-
const FormData = require('form-data')
|
|
9
8
|
const { Readable } = require('node:stream')
|
|
10
9
|
|
|
11
10
|
test('inject should exist', t => {
|
|
@@ -343,7 +342,7 @@ test('inject a multipart request using form-body', t => {
|
|
|
343
342
|
})
|
|
344
343
|
|
|
345
344
|
const form = new FormData()
|
|
346
|
-
form.
|
|
345
|
+
form.set('my_field', 'my value')
|
|
347
346
|
|
|
348
347
|
fastify.inject({
|
|
349
348
|
method: 'POST',
|
|
@@ -5,7 +5,7 @@ const errors = require('../../lib/errors')
|
|
|
5
5
|
const { readFileSync } = require('node:fs')
|
|
6
6
|
const { resolve } = require('node:path')
|
|
7
7
|
|
|
8
|
-
test('should expose
|
|
8
|
+
test('should expose 84 errors', t => {
|
|
9
9
|
t.plan(1)
|
|
10
10
|
const exportedKeys = Object.keys(errors)
|
|
11
11
|
let counter = 0
|
|
@@ -14,11 +14,11 @@ test('should expose 80 errors', t => {
|
|
|
14
14
|
counter++
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
t.equal(counter,
|
|
17
|
+
t.equal(counter, 84)
|
|
18
18
|
})
|
|
19
19
|
|
|
20
20
|
test('ensure name and codes of Errors are identical', t => {
|
|
21
|
-
t.plan(
|
|
21
|
+
t.plan(84)
|
|
22
22
|
const exportedKeys = Object.keys(errors)
|
|
23
23
|
for (const key of exportedKeys) {
|
|
24
24
|
if (errors[key].name === 'FastifyError') {
|
|
@@ -247,6 +247,16 @@ test('FST_ERR_DEC_AFTER_START', t => {
|
|
|
247
247
|
t.ok(error instanceof Error)
|
|
248
248
|
})
|
|
249
249
|
|
|
250
|
+
test('FST_ERR_DEC_REFERENCE_TYPE', t => {
|
|
251
|
+
t.plan(5)
|
|
252
|
+
const error = new errors.FST_ERR_DEC_REFERENCE_TYPE()
|
|
253
|
+
t.equal(error.name, 'FastifyError')
|
|
254
|
+
t.equal(error.code, 'FST_ERR_DEC_REFERENCE_TYPE')
|
|
255
|
+
t.equal(error.message, "The decorator '%s' of type '%s' is a reference type. Use the { getter, setter } interface instead.")
|
|
256
|
+
t.equal(error.statusCode, 500)
|
|
257
|
+
t.ok(error instanceof Error)
|
|
258
|
+
})
|
|
259
|
+
|
|
250
260
|
test('FST_ERR_HOOK_INVALID_TYPE', t => {
|
|
251
261
|
t.plan(5)
|
|
252
262
|
const error = new errors.FST_ERR_HOOK_INVALID_TYPE()
|
|
@@ -327,6 +337,36 @@ test('FST_ERR_LOG_INVALID_LOGGER', t => {
|
|
|
327
337
|
t.ok(error instanceof TypeError)
|
|
328
338
|
})
|
|
329
339
|
|
|
340
|
+
test('FST_ERR_LOG_INVALID_LOGGER_INSTANCE', t => {
|
|
341
|
+
t.plan(5)
|
|
342
|
+
const error = new errors.FST_ERR_LOG_INVALID_LOGGER_INSTANCE()
|
|
343
|
+
t.equal(error.name, 'FastifyError')
|
|
344
|
+
t.equal(error.code, 'FST_ERR_LOG_INVALID_LOGGER_INSTANCE')
|
|
345
|
+
t.equal(error.message, 'loggerInstance only accepts a logger instance.')
|
|
346
|
+
t.equal(error.statusCode, 500)
|
|
347
|
+
t.ok(error instanceof TypeError)
|
|
348
|
+
})
|
|
349
|
+
|
|
350
|
+
test('FST_ERR_LOG_INVALID_LOGGER_CONFIG', t => {
|
|
351
|
+
t.plan(5)
|
|
352
|
+
const error = new errors.FST_ERR_LOG_INVALID_LOGGER_CONFIG()
|
|
353
|
+
t.equal(error.name, 'FastifyError')
|
|
354
|
+
t.equal(error.code, 'FST_ERR_LOG_INVALID_LOGGER_CONFIG')
|
|
355
|
+
t.equal(error.message, 'logger options only accepts a configuration object.')
|
|
356
|
+
t.equal(error.statusCode, 500)
|
|
357
|
+
t.ok(error instanceof TypeError)
|
|
358
|
+
})
|
|
359
|
+
|
|
360
|
+
test('FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED', t => {
|
|
361
|
+
t.plan(5)
|
|
362
|
+
const error = new errors.FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED()
|
|
363
|
+
t.equal(error.name, 'FastifyError')
|
|
364
|
+
t.equal(error.code, 'FST_ERR_LOG_LOGGER_AND_LOGGER_INSTANCE_PROVIDED')
|
|
365
|
+
t.equal(error.message, 'You cannot provide both logger and loggerInstance. Please provide only one.')
|
|
366
|
+
t.equal(error.statusCode, 500)
|
|
367
|
+
t.ok(error instanceof TypeError)
|
|
368
|
+
})
|
|
369
|
+
|
|
330
370
|
test('FST_ERR_REP_INVALID_PAYLOAD_TYPE', t => {
|
|
331
371
|
t.plan(5)
|
|
332
372
|
const error = new errors.FST_ERR_REP_INVALID_PAYLOAD_TYPE()
|
|
@@ -587,16 +627,6 @@ test('FST_ERR_ASYNC_CONSTRAINT', t => {
|
|
|
587
627
|
t.ok(error instanceof Error)
|
|
588
628
|
})
|
|
589
629
|
|
|
590
|
-
test('FST_ERR_DEFAULT_ROUTE_INVALID_TYPE', t => {
|
|
591
|
-
t.plan(5)
|
|
592
|
-
const error = new errors.FST_ERR_DEFAULT_ROUTE_INVALID_TYPE()
|
|
593
|
-
t.equal(error.name, 'FastifyError')
|
|
594
|
-
t.equal(error.code, 'FST_ERR_DEFAULT_ROUTE_INVALID_TYPE')
|
|
595
|
-
t.equal(error.message, 'The defaultRoute type should be a function')
|
|
596
|
-
t.equal(error.statusCode, 500)
|
|
597
|
-
t.ok(error instanceof TypeError)
|
|
598
|
-
})
|
|
599
|
-
|
|
600
630
|
test('FST_ERR_INVALID_URL', t => {
|
|
601
631
|
t.plan(5)
|
|
602
632
|
const error = new errors.FST_ERR_INVALID_URL()
|
|
@@ -757,6 +787,16 @@ test('FST_ERR_PLUGIN_NOT_PRESENT_IN_INSTANCE', t => {
|
|
|
757
787
|
t.ok(error instanceof Error)
|
|
758
788
|
})
|
|
759
789
|
|
|
790
|
+
test('FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER', t => {
|
|
791
|
+
t.plan(5)
|
|
792
|
+
const error = new errors.FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER('easter-egg')
|
|
793
|
+
t.equal(error.name, 'FastifyError')
|
|
794
|
+
t.equal(error.code, 'FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER')
|
|
795
|
+
t.equal(error.message, 'The easter-egg plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
796
|
+
t.equal(error.statusCode, 500)
|
|
797
|
+
t.ok(error instanceof TypeError)
|
|
798
|
+
})
|
|
799
|
+
|
|
760
800
|
test('FST_ERR_PLUGIN_CALLBACK_NOT_FN', t => {
|
|
761
801
|
t.plan(5)
|
|
762
802
|
const error = new errors.FST_ERR_PLUGIN_CALLBACK_NOT_FN()
|
|
@@ -838,7 +878,7 @@ test('FST_ERR_ERROR_HANDLER_NOT_FN', t => {
|
|
|
838
878
|
})
|
|
839
879
|
|
|
840
880
|
test('Ensure that all errors are in Errors.md TOC', t => {
|
|
841
|
-
t.plan(
|
|
881
|
+
t.plan(84)
|
|
842
882
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
843
883
|
|
|
844
884
|
const exportedKeys = Object.keys(errors)
|
|
@@ -850,7 +890,7 @@ test('Ensure that all errors are in Errors.md TOC', t => {
|
|
|
850
890
|
})
|
|
851
891
|
|
|
852
892
|
test('Ensure that non-existing errors are not in Errors.md TOC', t => {
|
|
853
|
-
t.plan(
|
|
893
|
+
t.plan(84)
|
|
854
894
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
855
895
|
|
|
856
896
|
const matchRE = / {4}- \[([A-Z0-9_]+)\]\(#[a-z0-9_]+\)/g
|
|
@@ -863,7 +903,7 @@ test('Ensure that non-existing errors are not in Errors.md TOC', t => {
|
|
|
863
903
|
})
|
|
864
904
|
|
|
865
905
|
test('Ensure that all errors are in Errors.md documented', t => {
|
|
866
|
-
t.plan(
|
|
906
|
+
t.plan(84)
|
|
867
907
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
868
908
|
|
|
869
909
|
const exportedKeys = Object.keys(errors)
|
|
@@ -875,7 +915,7 @@ test('Ensure that all errors are in Errors.md documented', t => {
|
|
|
875
915
|
})
|
|
876
916
|
|
|
877
917
|
test('Ensure that non-existing errors are not in Errors.md documented', t => {
|
|
878
|
-
t.plan(
|
|
918
|
+
t.plan(84)
|
|
879
919
|
const errorsMd = readFileSync(resolve(__dirname, '../../docs/Reference/Errors.md'), 'utf8')
|
|
880
920
|
|
|
881
921
|
const matchRE = /<a id="[0-9a-zA-Z_]+">([0-9a-zA-Z_]+)<\/a>/g
|
|
@@ -94,7 +94,11 @@ test('handler function - reply', t => {
|
|
|
94
94
|
preValidation: [],
|
|
95
95
|
preHandler: [],
|
|
96
96
|
onSend: [],
|
|
97
|
-
onError: []
|
|
97
|
+
onError: [],
|
|
98
|
+
config: {
|
|
99
|
+
url: '',
|
|
100
|
+
method: ''
|
|
101
|
+
}
|
|
98
102
|
}
|
|
99
103
|
buildSchema(context, schemaValidator)
|
|
100
104
|
internals.handler({ [kRouteContext]: context }, new Reply(res, { [kRouteContext]: context }))
|
|
@@ -45,11 +45,11 @@ test('without options passed to Fastify, initialConfig should expose default val
|
|
|
45
45
|
onProtoPoisoning: 'error',
|
|
46
46
|
onConstructorPoisoning: 'error',
|
|
47
47
|
pluginTimeout: 10000,
|
|
48
|
-
requestIdHeader:
|
|
48
|
+
requestIdHeader: false,
|
|
49
49
|
requestIdLogLabel: 'reqId',
|
|
50
50
|
http2SessionTimeout: 72000,
|
|
51
51
|
exposeHeadRoutes: true,
|
|
52
|
-
useSemicolonDelimiter:
|
|
52
|
+
useSemicolonDelimiter: false
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
t.same(Fastify().initialConfig, fastifyDefaultOptions)
|
|
@@ -105,7 +105,7 @@ test('Fastify.initialConfig should expose all options', t => {
|
|
|
105
105
|
genReqId: function (req) {
|
|
106
106
|
return reqId++
|
|
107
107
|
},
|
|
108
|
-
|
|
108
|
+
loggerInstance: pino({ level: 'info' }),
|
|
109
109
|
constraints: {
|
|
110
110
|
version: versionStrategy
|
|
111
111
|
},
|
|
@@ -285,11 +285,11 @@ test('Should not have issues when passing stream options to Pino.js', t => {
|
|
|
285
285
|
onProtoPoisoning: 'error',
|
|
286
286
|
onConstructorPoisoning: 'error',
|
|
287
287
|
pluginTimeout: 10000,
|
|
288
|
-
requestIdHeader:
|
|
288
|
+
requestIdHeader: false,
|
|
289
289
|
requestIdLogLabel: 'reqId',
|
|
290
290
|
http2SessionTimeout: 72000,
|
|
291
291
|
exposeHeadRoutes: true,
|
|
292
|
-
useSemicolonDelimiter:
|
|
292
|
+
useSemicolonDelimiter: false
|
|
293
293
|
})
|
|
294
294
|
} catch (error) {
|
|
295
295
|
t.fail()
|
|
@@ -46,13 +46,42 @@ test('The logger should add a unique id for every request', t => {
|
|
|
46
46
|
}
|
|
47
47
|
})
|
|
48
48
|
|
|
49
|
-
test('The logger should reuse request id header for req.id', t => {
|
|
49
|
+
test('The logger should not reuse request id header for req.id', t => {
|
|
50
50
|
const fastify = Fastify()
|
|
51
51
|
fastify.get('/', (req, reply) => {
|
|
52
52
|
t.ok(req.id)
|
|
53
53
|
reply.send({ id: req.id })
|
|
54
54
|
})
|
|
55
55
|
|
|
56
|
+
fastify.listen({ port: 0 }, err => {
|
|
57
|
+
t.error(err)
|
|
58
|
+
|
|
59
|
+
fastify.inject({
|
|
60
|
+
method: 'GET',
|
|
61
|
+
url: 'http://localhost:' + fastify.server.address().port,
|
|
62
|
+
headers: {
|
|
63
|
+
'Request-Id': 'request-id-1'
|
|
64
|
+
}
|
|
65
|
+
}, (err, res) => {
|
|
66
|
+
t.error(err)
|
|
67
|
+
const payload = JSON.parse(res.payload)
|
|
68
|
+
t.ok(payload.id !== 'request-id-1', 'the request id from the header should not be returned with default configuration')
|
|
69
|
+
t.ok(payload.id === 'req-1') // first request id when using the default configuration
|
|
70
|
+
fastify.close()
|
|
71
|
+
t.end()
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('The logger should reuse request id header for req.id if requestIdHeader is set', t => {
|
|
77
|
+
const fastify = Fastify({
|
|
78
|
+
requestIdHeader: 'request-id'
|
|
79
|
+
})
|
|
80
|
+
fastify.get('/', (req, reply) => {
|
|
81
|
+
t.ok(req.id)
|
|
82
|
+
reply.send({ id: req.id })
|
|
83
|
+
})
|
|
84
|
+
|
|
56
85
|
fastify.listen({ port: 0 }, err => {
|
|
57
86
|
t.error(err)
|
|
58
87
|
|
|
@@ -127,7 +156,7 @@ test('The serializer prevent fails if the request socket is undefined', t => {
|
|
|
127
156
|
method: 'GET',
|
|
128
157
|
url: '/',
|
|
129
158
|
version: undefined,
|
|
130
|
-
|
|
159
|
+
host: undefined,
|
|
131
160
|
remoteAddress: undefined,
|
|
132
161
|
remotePort: undefined
|
|
133
162
|
})
|
|
@@ -19,7 +19,7 @@ const {
|
|
|
19
19
|
} = require('../../lib/symbols')
|
|
20
20
|
const fs = require('node:fs')
|
|
21
21
|
const path = require('node:path')
|
|
22
|
-
const { FSTDEP010, FSTDEP019,
|
|
22
|
+
const { FSTDEP010, FSTDEP019, FSTDEP021 } = require('../../lib/warnings')
|
|
23
23
|
|
|
24
24
|
const agent = new http.Agent({ keepAlive: false })
|
|
25
25
|
|
|
@@ -36,7 +36,7 @@ const doGet = function (url) {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
test('Once called, Reply should return an object with methods', t => {
|
|
39
|
-
t.plan(
|
|
39
|
+
t.plan(15)
|
|
40
40
|
const response = { res: 'res' }
|
|
41
41
|
const context = { config: { onSend: [] }, schema: {} }
|
|
42
42
|
const request = { [kRouteContext]: context, [kPublicRouteContext]: { config: context.config, schema: context.schema } }
|
|
@@ -49,7 +49,6 @@ test('Once called, Reply should return an object with methods', t => {
|
|
|
49
49
|
t.equal(typeof reply.status, 'function')
|
|
50
50
|
t.equal(typeof reply.header, 'function')
|
|
51
51
|
t.equal(typeof reply.serialize, 'function')
|
|
52
|
-
t.equal(typeof reply.getResponseTime, 'function')
|
|
53
52
|
t.equal(typeof reply[kReplyHeaders], 'object')
|
|
54
53
|
t.same(reply.raw, response)
|
|
55
54
|
t.equal(reply[kRouteContext], context)
|
|
@@ -250,7 +249,7 @@ test('within an instance', t => {
|
|
|
250
249
|
})
|
|
251
250
|
|
|
252
251
|
fastify.get('/redirect-code', function (req, reply) {
|
|
253
|
-
reply.redirect(
|
|
252
|
+
reply.redirect('/', 301)
|
|
254
253
|
})
|
|
255
254
|
|
|
256
255
|
fastify.get('/redirect-code-before-call', function (req, reply) {
|
|
@@ -258,7 +257,7 @@ test('within an instance', t => {
|
|
|
258
257
|
})
|
|
259
258
|
|
|
260
259
|
fastify.get('/redirect-code-before-call-overwrite', function (req, reply) {
|
|
261
|
-
reply.code(307).redirect(
|
|
260
|
+
reply.code(307).redirect('/', 302)
|
|
262
261
|
})
|
|
263
262
|
|
|
264
263
|
fastify.get('/custom-serializer', function (req, reply) {
|
|
@@ -1415,9 +1414,9 @@ test('.statusCode is getter and setter', t => {
|
|
|
1415
1414
|
const fastify = Fastify()
|
|
1416
1415
|
|
|
1417
1416
|
fastify.get('/', function (req, reply) {
|
|
1418
|
-
t.
|
|
1417
|
+
t.equal(reply.statusCode, 200, 'default status value')
|
|
1419
1418
|
reply.statusCode = 418
|
|
1420
|
-
t.
|
|
1419
|
+
t.equal(reply.statusCode, 418)
|
|
1421
1420
|
reply.send()
|
|
1422
1421
|
})
|
|
1423
1422
|
|
|
@@ -1572,82 +1571,11 @@ test('should not throw error when attempting to set reply.sent if the underlinin
|
|
|
1572
1571
|
})
|
|
1573
1572
|
})
|
|
1574
1573
|
|
|
1575
|
-
test('reply.
|
|
1574
|
+
test('reply.elapsedTime should return 0 before the timer is initialised on the reply by setting up response listeners', t => {
|
|
1576
1575
|
t.plan(1)
|
|
1577
1576
|
const response = { statusCode: 200 }
|
|
1578
1577
|
const reply = new Reply(response, null)
|
|
1579
|
-
t.equal(reply.
|
|
1580
|
-
})
|
|
1581
|
-
|
|
1582
|
-
test('reply.getResponseTime() should return a number greater than 0 after the timer is initialised on the reply by setting up response listeners', t => {
|
|
1583
|
-
t.plan(1)
|
|
1584
|
-
const fastify = Fastify()
|
|
1585
|
-
fastify.route({
|
|
1586
|
-
method: 'GET',
|
|
1587
|
-
url: '/',
|
|
1588
|
-
handler: (req, reply) => {
|
|
1589
|
-
reply.send('hello world')
|
|
1590
|
-
}
|
|
1591
|
-
})
|
|
1592
|
-
|
|
1593
|
-
fastify.addHook('onResponse', (req, reply) => {
|
|
1594
|
-
t.ok(reply.getResponseTime() > 0)
|
|
1595
|
-
t.end()
|
|
1596
|
-
})
|
|
1597
|
-
|
|
1598
|
-
fastify.inject({ method: 'GET', url: '/' })
|
|
1599
|
-
})
|
|
1600
|
-
|
|
1601
|
-
test('should emit deprecation warning when trying to use reply.getResponseTime() and should return the time since a request started while inflight', t => {
|
|
1602
|
-
t.plan(5)
|
|
1603
|
-
const fastify = Fastify()
|
|
1604
|
-
fastify.route({
|
|
1605
|
-
method: 'GET',
|
|
1606
|
-
url: '/',
|
|
1607
|
-
handler: (req, reply) => {
|
|
1608
|
-
reply.send('hello world')
|
|
1609
|
-
}
|
|
1610
|
-
})
|
|
1611
|
-
|
|
1612
|
-
process.removeAllListeners('warning')
|
|
1613
|
-
process.on('warning', onWarning)
|
|
1614
|
-
function onWarning (warning) {
|
|
1615
|
-
t.equal(warning.name, 'DeprecationWarning')
|
|
1616
|
-
t.equal(warning.code, FSTDEP020.code)
|
|
1617
|
-
}
|
|
1618
|
-
|
|
1619
|
-
fastify.addHook('preValidation', (req, reply, done) => {
|
|
1620
|
-
t.equal(reply.getResponseTime(), reply.getResponseTime())
|
|
1621
|
-
done()
|
|
1622
|
-
})
|
|
1623
|
-
|
|
1624
|
-
fastify.inject({ method: 'GET', url: '/' }, (err, res) => {
|
|
1625
|
-
t.error(err)
|
|
1626
|
-
t.pass()
|
|
1627
|
-
|
|
1628
|
-
process.removeListener('warning', onWarning)
|
|
1629
|
-
})
|
|
1630
|
-
|
|
1631
|
-
FSTDEP020.emitted = false
|
|
1632
|
-
})
|
|
1633
|
-
|
|
1634
|
-
test('reply.getResponseTime() should return the same value after a request is finished', t => {
|
|
1635
|
-
t.plan(1)
|
|
1636
|
-
const fastify = Fastify()
|
|
1637
|
-
fastify.route({
|
|
1638
|
-
method: 'GET',
|
|
1639
|
-
url: '/',
|
|
1640
|
-
handler: (req, reply) => {
|
|
1641
|
-
reply.send('hello world')
|
|
1642
|
-
}
|
|
1643
|
-
})
|
|
1644
|
-
|
|
1645
|
-
fastify.addHook('onResponse', (req, reply) => {
|
|
1646
|
-
t.equal(reply.getResponseTime(), reply.getResponseTime())
|
|
1647
|
-
t.end()
|
|
1648
|
-
})
|
|
1649
|
-
|
|
1650
|
-
fastify.inject({ method: 'GET', url: '/' })
|
|
1578
|
+
t.equal(reply.elapsedTime, 0)
|
|
1651
1579
|
})
|
|
1652
1580
|
|
|
1653
1581
|
test('reply.elapsedTime should return a number greater than 0 after the timer is initialised on the reply by setting up response listeners', t => {
|
|
@@ -2094,6 +2022,36 @@ test('redirect to an invalid URL should not crash the server', async t => {
|
|
|
2094
2022
|
await fastify.close()
|
|
2095
2023
|
})
|
|
2096
2024
|
|
|
2025
|
+
test('redirect with deprecated signature should warn', t => {
|
|
2026
|
+
t.plan(4)
|
|
2027
|
+
|
|
2028
|
+
process.removeAllListeners('warning')
|
|
2029
|
+
process.on('warning', onWarning)
|
|
2030
|
+
function onWarning (warning) {
|
|
2031
|
+
t.equal(warning.name, 'DeprecationWarning')
|
|
2032
|
+
t.equal(warning.code, FSTDEP021.code)
|
|
2033
|
+
}
|
|
2034
|
+
|
|
2035
|
+
const fastify = Fastify()
|
|
2036
|
+
|
|
2037
|
+
fastify.get('/', (req, reply) => {
|
|
2038
|
+
reply.redirect(302, '/new')
|
|
2039
|
+
})
|
|
2040
|
+
|
|
2041
|
+
fastify.get('/new', (req, reply) => {
|
|
2042
|
+
reply.send('new')
|
|
2043
|
+
})
|
|
2044
|
+
|
|
2045
|
+
fastify.inject({ method: 'GET', url: '/' }, (err, res) => {
|
|
2046
|
+
t.error(err)
|
|
2047
|
+
t.pass()
|
|
2048
|
+
|
|
2049
|
+
process.removeListener('warning', onWarning)
|
|
2050
|
+
})
|
|
2051
|
+
|
|
2052
|
+
FSTDEP021.emitted = false
|
|
2053
|
+
})
|
|
2054
|
+
|
|
2097
2055
|
test('invalid response headers should not crash the server', async t => {
|
|
2098
2056
|
const fastify = Fastify()
|
|
2099
2057
|
fastify.route({
|
|
@@ -60,7 +60,7 @@ test('Regular request', t => {
|
|
|
60
60
|
t.equal(request.log, 'log')
|
|
61
61
|
t.equal(request.ip, 'ip')
|
|
62
62
|
t.equal(request.ips, undefined)
|
|
63
|
-
t.equal(request.
|
|
63
|
+
t.equal(request.host, 'hostname')
|
|
64
64
|
t.equal(request.body, undefined)
|
|
65
65
|
t.equal(request.method, 'GET')
|
|
66
66
|
t.equal(request.url, '/')
|
|
@@ -142,7 +142,7 @@ test('Request with undefined config', t => {
|
|
|
142
142
|
})
|
|
143
143
|
|
|
144
144
|
test('Regular request - hostname from authority', t => {
|
|
145
|
-
t.plan(
|
|
145
|
+
t.plan(3)
|
|
146
146
|
const headers = {
|
|
147
147
|
':authority': 'authority'
|
|
148
148
|
}
|
|
@@ -155,11 +155,12 @@ test('Regular request - hostname from authority', t => {
|
|
|
155
155
|
|
|
156
156
|
const request = new Request('id', 'params', req, 'query', 'log')
|
|
157
157
|
t.type(request, Request)
|
|
158
|
-
t.equal(request.
|
|
158
|
+
t.equal(request.host, 'authority')
|
|
159
|
+
t.equal(request.port, null)
|
|
159
160
|
})
|
|
160
161
|
|
|
161
162
|
test('Regular request - host header has precedence over authority', t => {
|
|
162
|
-
t.plan(
|
|
163
|
+
t.plan(3)
|
|
163
164
|
const headers = {
|
|
164
165
|
host: 'hostname',
|
|
165
166
|
':authority': 'authority'
|
|
@@ -172,7 +173,8 @@ test('Regular request - host header has precedence over authority', t => {
|
|
|
172
173
|
}
|
|
173
174
|
const request = new Request('id', 'params', req, 'query', 'log')
|
|
174
175
|
t.type(request, Request)
|
|
175
|
-
t.equal(request.
|
|
176
|
+
t.equal(request.host, 'hostname')
|
|
177
|
+
t.equal(request.port, null)
|
|
176
178
|
})
|
|
177
179
|
|
|
178
180
|
test('Request with trust proxy', t => {
|
|
@@ -222,7 +224,7 @@ test('Request with trust proxy', t => {
|
|
|
222
224
|
t.equal(request.log, 'log')
|
|
223
225
|
t.equal(request.ip, '2.2.2.2')
|
|
224
226
|
t.same(request.ips, ['ip', '1.1.1.1', '2.2.2.2'])
|
|
225
|
-
t.equal(request.
|
|
227
|
+
t.equal(request.host, 'example.com')
|
|
226
228
|
t.equal(request.body, undefined)
|
|
227
229
|
t.equal(request.method, 'GET')
|
|
228
230
|
t.equal(request.url, '/')
|
|
@@ -272,7 +274,7 @@ test('Request with trust proxy - no x-forwarded-host header', t => {
|
|
|
272
274
|
const TpRequest = Request.buildRequest(Request, true)
|
|
273
275
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
274
276
|
t.type(request, TpRequest)
|
|
275
|
-
t.equal(request.
|
|
277
|
+
t.equal(request.host, 'hostname')
|
|
276
278
|
})
|
|
277
279
|
|
|
278
280
|
test('Request with trust proxy - no x-forwarded-host header and fallback to authority', t => {
|
|
@@ -291,7 +293,7 @@ test('Request with trust proxy - no x-forwarded-host header and fallback to auth
|
|
|
291
293
|
const TpRequest = Request.buildRequest(Request, true)
|
|
292
294
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
293
295
|
t.type(request, TpRequest)
|
|
294
|
-
t.equal(request.
|
|
296
|
+
t.equal(request.host, 'authority')
|
|
295
297
|
})
|
|
296
298
|
|
|
297
299
|
test('Request with trust proxy - x-forwarded-host header has precedence over host', t => {
|
|
@@ -311,7 +313,7 @@ test('Request with trust proxy - x-forwarded-host header has precedence over hos
|
|
|
311
313
|
const TpRequest = Request.buildRequest(Request, true)
|
|
312
314
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
313
315
|
t.type(request, TpRequest)
|
|
314
|
-
t.equal(request.
|
|
316
|
+
t.equal(request.host, 'example.com')
|
|
315
317
|
})
|
|
316
318
|
|
|
317
319
|
test('Request with trust proxy - handles multiple entries in x-forwarded-host/proto', t => {
|
|
@@ -330,7 +332,7 @@ test('Request with trust proxy - handles multiple entries in x-forwarded-host/pr
|
|
|
330
332
|
const TpRequest = Request.buildRequest(Request, true)
|
|
331
333
|
const request = new TpRequest('id', 'params', req, 'query', 'log')
|
|
332
334
|
t.type(request, TpRequest)
|
|
333
|
-
t.equal(request.
|
|
335
|
+
t.equal(request.host, 'example.com')
|
|
334
336
|
t.equal(request.protocol, 'https')
|
|
335
337
|
})
|
|
336
338
|
|
|
@@ -373,7 +375,7 @@ test('Request with undefined socket', t => {
|
|
|
373
375
|
t.equal(request.log, 'log')
|
|
374
376
|
t.equal(request.ip, undefined)
|
|
375
377
|
t.equal(request.ips, undefined)
|
|
376
|
-
t.equal(request.
|
|
378
|
+
t.equal(request.host, 'hostname')
|
|
377
379
|
t.same(request.body, null)
|
|
378
380
|
t.equal(request.method, 'GET')
|
|
379
381
|
t.equal(request.url, '/')
|
package/test/listen.1.test.js
CHANGED
|
@@ -29,25 +29,15 @@ test('Async/await listen with arguments', async t => {
|
|
|
29
29
|
t.fail('should not be deprecated')
|
|
30
30
|
})
|
|
31
31
|
|
|
32
|
-
t.plan(1)
|
|
33
32
|
const fastify = Fastify()
|
|
34
33
|
t.teardown(fastify.close.bind(fastify))
|
|
35
34
|
const addr = await fastify.listen({ port: 0, host: '0.0.0.0' })
|
|
36
35
|
const address = fastify.server.address()
|
|
37
|
-
t.equal(addr, `http
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
t.fail('should not be deprecated')
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
t.plan(1)
|
|
46
|
-
const fastify = Fastify()
|
|
47
|
-
t.teardown(fastify.close.bind(fastify))
|
|
48
|
-
fastify.listen({ port: 0, host: '0.0.0.0' }).then(addr => {
|
|
49
|
-
const address = fastify.server.address()
|
|
50
|
-
t.equal(addr, `http://${address.address}:${address.port}`)
|
|
36
|
+
t.equal(addr, `http://127.0.0.1:${address.port}`)
|
|
37
|
+
t.same(address, {
|
|
38
|
+
address: '0.0.0.0',
|
|
39
|
+
family: 'IPv4',
|
|
40
|
+
port: address.port
|
|
51
41
|
})
|
|
52
42
|
})
|
|
53
43
|
|