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/plugin.4.test.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const Fastify = require('../fastify')
|
|
8
6
|
const fp = require('fastify-plugin')
|
|
9
7
|
const fakeTimer = require('@sinonjs/fake-timers')
|
|
8
|
+
const { FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER } = require('../lib/errors')
|
|
10
9
|
|
|
11
10
|
test('pluginTimeout', t => {
|
|
12
11
|
t.plan(5)
|
|
@@ -133,6 +132,9 @@ test('plugin metadata - version not matching requirement', t => {
|
|
|
133
132
|
test('plugin metadata - version not matching requirement 2', t => {
|
|
134
133
|
t.plan(2)
|
|
135
134
|
const fastify = Fastify()
|
|
135
|
+
Object.defineProperty(fastify, 'version', {
|
|
136
|
+
value: '99.0.0'
|
|
137
|
+
})
|
|
136
138
|
|
|
137
139
|
plugin[Symbol.for('skip-override')] = true
|
|
138
140
|
plugin[Symbol.for('plugin-meta')] = {
|
|
@@ -198,36 +200,75 @@ test('plugin metadata - release candidate', t => {
|
|
|
198
200
|
}
|
|
199
201
|
})
|
|
200
202
|
|
|
201
|
-
test('fastify-rc loads prior version plugins', t => {
|
|
202
|
-
t.
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
203
|
+
test('fastify-rc loads prior version plugins', async t => {
|
|
204
|
+
t.test('baseline (rc)', t => {
|
|
205
|
+
t.plan(2)
|
|
206
|
+
|
|
207
|
+
const fastify = Fastify()
|
|
208
|
+
Object.defineProperty(fastify, 'version', {
|
|
209
|
+
value: '99.0.0-rc.1'
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
plugin[Symbol.for('plugin-meta')] = {
|
|
213
|
+
name: 'plugin',
|
|
214
|
+
fastify: '^98.1.0'
|
|
215
|
+
}
|
|
216
|
+
plugin2[Symbol.for('plugin-meta')] = {
|
|
217
|
+
name: 'plugin2',
|
|
218
|
+
fastify: '98.x'
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
fastify.register(plugin)
|
|
222
|
+
|
|
223
|
+
fastify.ready((err) => {
|
|
224
|
+
t.error(err)
|
|
225
|
+
t.pass('everything right')
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
function plugin (instance, opts, done) {
|
|
229
|
+
done()
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function plugin2 (instance, opts, done) {
|
|
233
|
+
done()
|
|
234
|
+
}
|
|
206
235
|
})
|
|
207
236
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
fastify: '^98.1.0'
|
|
211
|
-
}
|
|
212
|
-
plugin2[Symbol.for('plugin-meta')] = {
|
|
213
|
-
name: 'plugin2',
|
|
214
|
-
fastify: '98.x'
|
|
215
|
-
}
|
|
237
|
+
t.test('pre', t => {
|
|
238
|
+
t.plan(2)
|
|
216
239
|
|
|
217
|
-
|
|
240
|
+
const fastify = Fastify()
|
|
241
|
+
Object.defineProperty(fastify, 'version', { value: '99.0.0-pre.1' })
|
|
218
242
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
243
|
+
plugin[Symbol.for('plugin-meta')] = { name: 'plugin', fastify: '^98.x' }
|
|
244
|
+
|
|
245
|
+
fastify.register(plugin)
|
|
246
|
+
|
|
247
|
+
fastify.ready((err) => {
|
|
248
|
+
t.error(err)
|
|
249
|
+
t.pass()
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
function plugin (instance, opts, done) { done() }
|
|
222
253
|
})
|
|
223
254
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
255
|
+
t.test('alpha', t => {
|
|
256
|
+
t.plan(2)
|
|
227
257
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
258
|
+
const fastify = Fastify()
|
|
259
|
+
Object.defineProperty(fastify, 'version', { value: '99.0.0-pre.1' })
|
|
260
|
+
|
|
261
|
+
plugin[Symbol.for('plugin-meta')] = { name: 'plugin', fastify: '^98.x' }
|
|
262
|
+
|
|
263
|
+
fastify.register(plugin)
|
|
264
|
+
|
|
265
|
+
fastify.ready((err) => {
|
|
266
|
+
t.error(err)
|
|
267
|
+
t.pass()
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
function plugin (instance, opts, done) { done() }
|
|
271
|
+
})
|
|
231
272
|
})
|
|
232
273
|
|
|
233
274
|
test('hasPlugin method exists as a function', t => {
|
|
@@ -415,49 +456,44 @@ test('hasPlugin returns true when using encapsulation', async t => {
|
|
|
415
456
|
await fastify.ready()
|
|
416
457
|
})
|
|
417
458
|
|
|
418
|
-
test('registering
|
|
419
|
-
t.plan(
|
|
420
|
-
|
|
421
|
-
const pluginNames = ['error-plugin', 'anonymous', 'anotherPlugin', 'anotherPluginNamed']
|
|
422
|
-
|
|
423
|
-
const oldWarnings = process.listeners('warning')
|
|
424
|
-
process.removeAllListeners('warning')
|
|
425
|
-
process.on('warning', onWarning)
|
|
426
|
-
function onWarning (warning) {
|
|
427
|
-
t.match(warning.message, new RegExp(`.*${pluginNames.shift()} plugin being registered mixes async and callback styles.*`))
|
|
428
|
-
t.equal(warning.name, 'FastifyWarning')
|
|
429
|
-
t.equal(warning.code, 'FSTWRN002')
|
|
430
|
-
}
|
|
431
|
-
t.teardown(() => {
|
|
432
|
-
process.removeListener('warning', onWarning)
|
|
433
|
-
for (const warning of oldWarnings) {
|
|
434
|
-
process.on('warning', warning)
|
|
435
|
-
}
|
|
436
|
-
})
|
|
459
|
+
test('registering anonymous plugin with mixed style should throw', async t => {
|
|
460
|
+
t.plan(2)
|
|
437
461
|
|
|
438
462
|
const fastify = Fastify()
|
|
439
463
|
|
|
440
|
-
const
|
|
441
|
-
const errorPlugin = async (app, opts, done) => {
|
|
464
|
+
const anonymousPlugin = async (app, opts, done) => {
|
|
442
465
|
done()
|
|
443
466
|
}
|
|
444
467
|
|
|
445
|
-
|
|
468
|
+
fastify.register(anonymousPlugin)
|
|
446
469
|
|
|
447
|
-
|
|
448
|
-
|
|
470
|
+
try {
|
|
471
|
+
await fastify.ready()
|
|
472
|
+
t.fail('should throw')
|
|
473
|
+
} catch (error) {
|
|
474
|
+
t.type(error, FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER)
|
|
475
|
+
t.equal(error.message, 'The anonymousPlugin plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
449
476
|
}
|
|
477
|
+
})
|
|
478
|
+
|
|
479
|
+
test('registering named plugin with mixed style should throw', async t => {
|
|
480
|
+
t.plan(2)
|
|
481
|
+
|
|
482
|
+
const fastify = Fastify()
|
|
450
483
|
|
|
451
|
-
const
|
|
484
|
+
const pluginName = 'error-plugin'
|
|
485
|
+
const errorPlugin = async (app, opts, done) => {
|
|
452
486
|
done()
|
|
453
487
|
}
|
|
488
|
+
const namedPlugin = fp(errorPlugin, { name: pluginName })
|
|
454
489
|
|
|
455
490
|
fastify.register(namedPlugin)
|
|
456
|
-
fastify.register(async (app, opts, done) => {
|
|
457
|
-
done()
|
|
458
|
-
})
|
|
459
|
-
fastify.register(anotherPlugin)
|
|
460
|
-
fastify.register(anotherPluginNamed)
|
|
461
491
|
|
|
462
|
-
|
|
492
|
+
try {
|
|
493
|
+
await fastify.ready()
|
|
494
|
+
t.fail('should throw')
|
|
495
|
+
} catch (error) {
|
|
496
|
+
t.type(error, FST_ERR_PLUGIN_INVALID_ASYNC_HANDLER)
|
|
497
|
+
t.equal(error.message, 'The error-plugin plugin being registered mixes async and callback styles. Async plugin should not mix async and callback style.')
|
|
498
|
+
}
|
|
463
499
|
})
|
package/test/register.test.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
/* eslint no-prototype-builtins: 0 */
|
|
4
|
-
|
|
5
3
|
const t = require('tap')
|
|
6
4
|
const test = t.test
|
|
7
5
|
const sget = require('simple-get').concat
|
|
@@ -14,7 +12,7 @@ test('register', t => {
|
|
|
14
12
|
|
|
15
13
|
fastify.register(function (instance, opts, done) {
|
|
16
14
|
t.not(instance, fastify)
|
|
17
|
-
t.ok(
|
|
15
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, instance))
|
|
18
16
|
|
|
19
17
|
t.equal(typeof opts, 'object')
|
|
20
18
|
t.equal(typeof done, 'function')
|
|
@@ -27,7 +25,7 @@ test('register', t => {
|
|
|
27
25
|
|
|
28
26
|
fastify.register(function (instance, opts, done) {
|
|
29
27
|
t.not(instance, fastify)
|
|
30
|
-
t.ok(
|
|
28
|
+
t.ok(Object.prototype.isPrototypeOf.call(fastify, instance))
|
|
31
29
|
|
|
32
30
|
t.equal(typeof opts, 'object')
|
|
33
31
|
t.equal(typeof done, 'function')
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const Fastify = require('..')
|
|
4
|
+
const { test } = require('tap')
|
|
5
|
+
const http = require('http')
|
|
6
|
+
const http2 = require('http2')
|
|
7
|
+
|
|
8
|
+
const testResBody = 'Hello, world!'
|
|
9
|
+
|
|
10
|
+
test('sends early hints', (t) => {
|
|
11
|
+
t.plan(6)
|
|
12
|
+
|
|
13
|
+
const fastify = Fastify({
|
|
14
|
+
logger: false
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
fastify.get('/', async (request, reply) => {
|
|
18
|
+
reply.writeEarlyHints({
|
|
19
|
+
link: '</styles.css>; rel=preload; as=style'
|
|
20
|
+
}, () => {
|
|
21
|
+
t.pass('callback called')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
return testResBody
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
fastify.listen({ port: 0 }, (err, address) => {
|
|
28
|
+
t.error(err)
|
|
29
|
+
|
|
30
|
+
const req = http.get(address)
|
|
31
|
+
|
|
32
|
+
req.on('information', (res) => {
|
|
33
|
+
t.equal(res.statusCode, 103)
|
|
34
|
+
t.equal(res.headers.link, '</styles.css>; rel=preload; as=style')
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
req.on('response', (res) => {
|
|
38
|
+
t.equal(res.statusCode, 200)
|
|
39
|
+
|
|
40
|
+
let data = ''
|
|
41
|
+
res.on('data', (chunk) => {
|
|
42
|
+
data += chunk
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
res.on('end', () => {
|
|
46
|
+
t.equal(data, testResBody)
|
|
47
|
+
fastify.close(t.end)
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
})
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('sends early hints (http2)', (t) => {
|
|
54
|
+
t.plan(6)
|
|
55
|
+
|
|
56
|
+
const fastify = Fastify({
|
|
57
|
+
http2: true,
|
|
58
|
+
logger: false
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
fastify.get('/', async (request, reply) => {
|
|
62
|
+
reply.writeEarlyHints({
|
|
63
|
+
link: '</styles.css>; rel=preload; as=style'
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
return testResBody
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
fastify.listen({ port: 0 }, (err, address) => {
|
|
70
|
+
t.error(err)
|
|
71
|
+
|
|
72
|
+
const client = http2.connect(address)
|
|
73
|
+
const req = client.request()
|
|
74
|
+
|
|
75
|
+
req.on('headers', (headers) => {
|
|
76
|
+
t.not(headers, undefined)
|
|
77
|
+
t.equal(headers[':status'], 103)
|
|
78
|
+
t.equal(headers.link, '</styles.css>; rel=preload; as=style')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
req.on('response', (headers) => {
|
|
82
|
+
t.equal(headers[':status'], 200)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
let data = ''
|
|
86
|
+
req.on('data', (chunk) => {
|
|
87
|
+
data += chunk
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
req.on('end', () => {
|
|
91
|
+
t.equal(data, testResBody)
|
|
92
|
+
client.close()
|
|
93
|
+
fastify.close(t.end)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
req.end()
|
|
97
|
+
})
|
|
98
|
+
})
|
package/test/reply-error.test.js
CHANGED
|
@@ -603,7 +603,6 @@ test('error handler is triggered when a string is thrown from sync handler', t =
|
|
|
603
603
|
const payload = 'error'
|
|
604
604
|
|
|
605
605
|
fastify.get('/', function (req, reply) {
|
|
606
|
-
// eslint-disable-next-line no-throw-literal
|
|
607
606
|
throw throwable
|
|
608
607
|
})
|
|
609
608
|
|
|
@@ -666,7 +665,6 @@ test('should trigger error handlers if a sync route throws any non-error object'
|
|
|
666
665
|
const payload = 'error'
|
|
667
666
|
|
|
668
667
|
fastify.get('/', function async (req, reply) {
|
|
669
|
-
// eslint-disable-next-line no-throw-literal
|
|
670
668
|
throw throwable
|
|
671
669
|
})
|
|
672
670
|
|
package/test/route-hooks.test.js
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const test = t.test
|
|
5
|
+
const sget = require('simple-get').concat
|
|
6
|
+
const Fastify = require('../fastify')
|
|
7
|
+
const supportedMethods = require('../lib/httpMethods').supportedMethods
|
|
8
|
+
|
|
9
|
+
test('route-shorthand', t => {
|
|
10
|
+
t.plan(supportedMethods.length + 1)
|
|
11
|
+
const test = t.test
|
|
12
|
+
|
|
13
|
+
for (const method of supportedMethods) {
|
|
14
|
+
test(`route-shorthand - ${method.toLowerCase()}`, t => {
|
|
15
|
+
t.plan(3)
|
|
16
|
+
const fastify = new Fastify()
|
|
17
|
+
fastify[method.toLowerCase()]('/', function (req, reply) {
|
|
18
|
+
t.equal(req.method, method)
|
|
19
|
+
reply.send()
|
|
20
|
+
})
|
|
21
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
22
|
+
if (err) t.error(err)
|
|
23
|
+
t.teardown(() => { fastify.close() })
|
|
24
|
+
sget({
|
|
25
|
+
method,
|
|
26
|
+
url: 'http://localhost:' + fastify.server.address().port
|
|
27
|
+
}, (err, response, body) => {
|
|
28
|
+
t.error(err)
|
|
29
|
+
t.equal(response.statusCode, 200)
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
test('route-shorthand - all', t => {
|
|
36
|
+
t.plan(3 * supportedMethods.length)
|
|
37
|
+
const fastify = new Fastify()
|
|
38
|
+
let currentMethod = ''
|
|
39
|
+
fastify.all('/', function (req, reply) {
|
|
40
|
+
t.equal(req.method, currentMethod)
|
|
41
|
+
reply.send()
|
|
42
|
+
})
|
|
43
|
+
fastify.listen({ port: 0 }, async function (err) {
|
|
44
|
+
if (err) t.error(err)
|
|
45
|
+
t.teardown(() => { fastify.close() })
|
|
46
|
+
for (const method of supportedMethods) {
|
|
47
|
+
currentMethod = method
|
|
48
|
+
await new Promise(resolve => sget({
|
|
49
|
+
method,
|
|
50
|
+
url: 'http://localhost:' + fastify.server.address().port
|
|
51
|
+
}, (err, response, body) => {
|
|
52
|
+
t.error(err)
|
|
53
|
+
t.equal(response.statusCode, 200)
|
|
54
|
+
resolve()
|
|
55
|
+
})
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
})
|
|
@@ -704,7 +704,7 @@ test('Custom schema object should not trigger FST_ERR_SCH_DUPLICATE', async t =>
|
|
|
704
704
|
})
|
|
705
705
|
|
|
706
706
|
test('The default schema compilers should not be called when overwritten by the user', async t => {
|
|
707
|
-
const Fastify = t.
|
|
707
|
+
const Fastify = t.mockRequire('../', {
|
|
708
708
|
'@fastify/ajv-compiler': () => {
|
|
709
709
|
t.fail('The default validator compiler should not be called')
|
|
710
710
|
},
|
package/test/server.test.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const t = require('tap')
|
|
4
4
|
const test = t.test
|
|
5
5
|
const Fastify = require('..')
|
|
6
|
-
const
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
7
|
const undici = require('undici')
|
|
8
8
|
|
|
9
9
|
test('listen should accept null port', t => {
|
|
@@ -72,7 +72,22 @@ test('listen should reject string port', async (t) => {
|
|
|
72
72
|
}
|
|
73
73
|
})
|
|
74
74
|
|
|
75
|
-
test('
|
|
75
|
+
test('Test for hostname and port', t => {
|
|
76
|
+
const app = Fastify()
|
|
77
|
+
t.teardown(app.close.bind(app))
|
|
78
|
+
app.get('/host', (req, res) => {
|
|
79
|
+
const host = 'localhost:8000'
|
|
80
|
+
t.equal(req.host, host)
|
|
81
|
+
t.equal(req.hostname, req.host.split(':')[0])
|
|
82
|
+
t.equal(req.port, Number(req.host.split(':')[1]))
|
|
83
|
+
res.send('ok')
|
|
84
|
+
})
|
|
85
|
+
app.listen({ port: 8000 }, () => {
|
|
86
|
+
sget('http://localhost:8000/host', () => { t.end() })
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
test('abort signal', t => {
|
|
76
91
|
t.test('listen should not start server', t => {
|
|
77
92
|
t.plan(2)
|
|
78
93
|
function onClose (instance, done) {
|
package/test/stream.2.test.js
CHANGED
|
@@ -68,7 +68,7 @@ test('onSend hook stream should work even if payload is not a proper stream', t
|
|
|
68
68
|
child: () => { return spyLogger }
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
const fastify = Fastify({
|
|
71
|
+
const fastify = Fastify({ loggerInstance: spyLogger })
|
|
72
72
|
fastify.get('/', function (req, reply) {
|
|
73
73
|
reply.send({ hello: 'world' })
|
|
74
74
|
})
|
package/test/stream.4.test.js
CHANGED
|
@@ -3,16 +3,12 @@
|
|
|
3
3
|
const t = require('tap')
|
|
4
4
|
const test = t.test
|
|
5
5
|
const sget = require('simple-get').concat
|
|
6
|
-
const fs = require('node:fs')
|
|
7
6
|
const errors = require('http-errors')
|
|
8
7
|
const JSONStream = require('JSONStream')
|
|
9
|
-
const send = require('send')
|
|
10
8
|
const Readable = require('node:stream').Readable
|
|
11
9
|
const split = require('split2')
|
|
12
|
-
const semver = require('semver')
|
|
13
10
|
const Fastify = require('..')
|
|
14
11
|
const { kDisableRequestLogging } = require('../lib/symbols.js')
|
|
15
|
-
const { getServerUrl } = require('./helper')
|
|
16
12
|
|
|
17
13
|
test('Destroying streams prematurely should call abort method', t => {
|
|
18
14
|
t.plan(7)
|
|
@@ -183,41 +179,3 @@ test('return a 404 if the stream emits a 404 error', t => {
|
|
|
183
179
|
})
|
|
184
180
|
})
|
|
185
181
|
})
|
|
186
|
-
|
|
187
|
-
test('should support send module 200 and 404', { skip: semver.gte(process.versions.node, '17.0.0') }, t => {
|
|
188
|
-
t.plan(8)
|
|
189
|
-
const fastify = Fastify()
|
|
190
|
-
|
|
191
|
-
fastify.get('/', function (req, reply) {
|
|
192
|
-
const stream = send(req.raw, __filename)
|
|
193
|
-
reply.code(200).send(stream)
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
fastify.get('/error', function (req, reply) {
|
|
197
|
-
const stream = send(req.raw, 'non-existing-file')
|
|
198
|
-
reply.code(200).send(stream)
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
fastify.listen({ port: 0 }, err => {
|
|
202
|
-
t.error(err)
|
|
203
|
-
t.teardown(() => { fastify.close() })
|
|
204
|
-
|
|
205
|
-
const url = getServerUrl(fastify)
|
|
206
|
-
|
|
207
|
-
sget(url, function (err, response, data) {
|
|
208
|
-
t.error(err)
|
|
209
|
-
t.equal(response.headers['content-type'], 'application/javascript; charset=UTF-8')
|
|
210
|
-
t.equal(response.statusCode, 200)
|
|
211
|
-
|
|
212
|
-
fs.readFile(__filename, (err, expected) => {
|
|
213
|
-
t.error(err)
|
|
214
|
-
t.equal(expected.toString(), data.toString())
|
|
215
|
-
})
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
sget(url + '/error', function (err, response) {
|
|
219
|
-
t.error(err)
|
|
220
|
-
t.equal(response.statusCode, 404)
|
|
221
|
-
})
|
|
222
|
-
})
|
|
223
|
-
})
|
package/test/stream.5.test.js
CHANGED
|
@@ -88,7 +88,7 @@ test('reply.send handles aborted requests', t => {
|
|
|
88
88
|
child: () => { return spyLogger }
|
|
89
89
|
}
|
|
90
90
|
const fastify = Fastify({
|
|
91
|
-
|
|
91
|
+
loggerInstance: spyLogger
|
|
92
92
|
})
|
|
93
93
|
|
|
94
94
|
fastify.get('/', (req, reply) => {
|
|
@@ -136,7 +136,7 @@ test('request terminated should not crash fastify', t => {
|
|
|
136
136
|
child: () => { return spyLogger }
|
|
137
137
|
}
|
|
138
138
|
const fastify = Fastify({
|
|
139
|
-
|
|
139
|
+
loggerInstance: spyLogger
|
|
140
140
|
})
|
|
141
141
|
|
|
142
142
|
fastify.get('/', async (req, reply) => {
|
package/test/trust-proxy.test.js
CHANGED
|
@@ -26,9 +26,11 @@ const testRequestValues = (t, req, options) => {
|
|
|
26
26
|
t.ok(req.ip, 'ip is defined')
|
|
27
27
|
t.equal(req.ip, options.ip, 'gets ip from x-forwarded-for')
|
|
28
28
|
}
|
|
29
|
-
if (options.
|
|
30
|
-
t.ok(req.
|
|
31
|
-
t.equal(req.
|
|
29
|
+
if (options.host) {
|
|
30
|
+
t.ok(req.host, 'host is defined')
|
|
31
|
+
t.equal(req.host, options.host, 'gets host from x-forwarded-host')
|
|
32
|
+
t.ok(req.hostname)
|
|
33
|
+
t.equal(req.hostname, options.host, 'gets hostname from x-forwarded-host')
|
|
32
34
|
}
|
|
33
35
|
if (options.ips) {
|
|
34
36
|
t.same(req.ips, options.ips, 'gets ips from x-forwarded-for')
|
|
@@ -37,6 +39,10 @@ const testRequestValues = (t, req, options) => {
|
|
|
37
39
|
t.ok(req.protocol, 'protocol is defined')
|
|
38
40
|
t.equal(req.protocol, options.protocol, 'gets protocol from x-forwarded-proto')
|
|
39
41
|
}
|
|
42
|
+
if (options.port) {
|
|
43
|
+
t.ok(req.port, 'port is defined')
|
|
44
|
+
t.equal(req.port, options.port, 'port is taken from x-forwarded-for or host')
|
|
45
|
+
}
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
let localhost
|
|
@@ -45,18 +51,18 @@ before(async function () {
|
|
|
45
51
|
})
|
|
46
52
|
|
|
47
53
|
test('trust proxy, not add properties to node req', (t) => {
|
|
48
|
-
t.plan(
|
|
54
|
+
t.plan(14)
|
|
49
55
|
const app = fastify({
|
|
50
56
|
trustProxy: true
|
|
51
57
|
})
|
|
52
58
|
app.get('/trustproxy', function (req, reply) {
|
|
53
|
-
testRequestValues(t, req, { ip: '1.1.1.1',
|
|
54
|
-
reply.code(200).send({ ip: req.ip,
|
|
59
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
60
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
55
61
|
})
|
|
56
62
|
|
|
57
63
|
app.get('/trustproxychain', function (req, reply) {
|
|
58
|
-
testRequestValues(t, req, { ip: '2.2.2.2', ips: [localhost, '1.1.1.1', '2.2.2.2'] })
|
|
59
|
-
reply.code(200).send({ ip: req.ip,
|
|
64
|
+
testRequestValues(t, req, { ip: '2.2.2.2', ips: [localhost, '1.1.1.1', '2.2.2.2'], port: app.server.address().port })
|
|
65
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
60
66
|
})
|
|
61
67
|
|
|
62
68
|
t.teardown(app.close.bind(app))
|
|
@@ -70,14 +76,14 @@ test('trust proxy, not add properties to node req', (t) => {
|
|
|
70
76
|
})
|
|
71
77
|
|
|
72
78
|
test('trust proxy chain', (t) => {
|
|
73
|
-
t.plan(
|
|
79
|
+
t.plan(9)
|
|
74
80
|
const app = fastify({
|
|
75
81
|
trustProxy: [localhost, '192.168.1.1']
|
|
76
82
|
})
|
|
77
83
|
|
|
78
84
|
app.get('/trustproxychain', function (req, reply) {
|
|
79
|
-
testRequestValues(t, req, { ip: '1.1.1.1' })
|
|
80
|
-
reply.code(200).send({ ip: req.ip,
|
|
85
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
86
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
81
87
|
})
|
|
82
88
|
|
|
83
89
|
t.teardown(app.close.bind(app))
|
|
@@ -90,13 +96,13 @@ test('trust proxy chain', (t) => {
|
|
|
90
96
|
})
|
|
91
97
|
|
|
92
98
|
test('trust proxy function', (t) => {
|
|
93
|
-
t.plan(
|
|
99
|
+
t.plan(9)
|
|
94
100
|
const app = fastify({
|
|
95
101
|
trustProxy: (address) => address === localhost
|
|
96
102
|
})
|
|
97
103
|
app.get('/trustproxyfunc', function (req, reply) {
|
|
98
|
-
testRequestValues(t, req, { ip: '1.1.1.1' })
|
|
99
|
-
reply.code(200).send({ ip: req.ip,
|
|
104
|
+
testRequestValues(t, req, { ip: '1.1.1.1', host: 'example.com', port: app.server.address().port })
|
|
105
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
100
106
|
})
|
|
101
107
|
|
|
102
108
|
t.teardown(app.close.bind(app))
|
|
@@ -109,13 +115,13 @@ test('trust proxy function', (t) => {
|
|
|
109
115
|
})
|
|
110
116
|
|
|
111
117
|
test('trust proxy number', (t) => {
|
|
112
|
-
t.plan(
|
|
118
|
+
t.plan(10)
|
|
113
119
|
const app = fastify({
|
|
114
120
|
trustProxy: 1
|
|
115
121
|
})
|
|
116
122
|
app.get('/trustproxynumber', function (req, reply) {
|
|
117
|
-
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })
|
|
118
|
-
reply.code(200).send({ ip: req.ip,
|
|
123
|
+
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'], host: 'example.com', port: app.server.address().port })
|
|
124
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
119
125
|
})
|
|
120
126
|
|
|
121
127
|
t.teardown(app.close.bind(app))
|
|
@@ -128,13 +134,13 @@ test('trust proxy number', (t) => {
|
|
|
128
134
|
})
|
|
129
135
|
|
|
130
136
|
test('trust proxy IP addresses', (t) => {
|
|
131
|
-
t.plan(
|
|
137
|
+
t.plan(10)
|
|
132
138
|
const app = fastify({
|
|
133
139
|
trustProxy: `${localhost}, 2.2.2.2`
|
|
134
140
|
})
|
|
135
141
|
app.get('/trustproxyipaddrs', function (req, reply) {
|
|
136
|
-
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'] })
|
|
137
|
-
reply.code(200).send({ ip: req.ip,
|
|
142
|
+
testRequestValues(t, req, { ip: '1.1.1.1', ips: [localhost, '1.1.1.1'], host: 'example.com', port: app.server.address().port })
|
|
143
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
138
144
|
})
|
|
139
145
|
|
|
140
146
|
t.teardown(app.close.bind(app))
|
|
@@ -147,21 +153,21 @@ test('trust proxy IP addresses', (t) => {
|
|
|
147
153
|
})
|
|
148
154
|
|
|
149
155
|
test('trust proxy protocol', (t) => {
|
|
150
|
-
t.plan(
|
|
156
|
+
t.plan(31)
|
|
151
157
|
const app = fastify({
|
|
152
158
|
trustProxy: true
|
|
153
159
|
})
|
|
154
160
|
app.get('/trustproxyprotocol', function (req, reply) {
|
|
155
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'lorem' })
|
|
156
|
-
reply.code(200).send({ ip: req.ip,
|
|
161
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'lorem', host: 'example.com', port: app.server.address().port })
|
|
162
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
157
163
|
})
|
|
158
164
|
app.get('/trustproxynoprotocol', function (req, reply) {
|
|
159
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'http' })
|
|
160
|
-
reply.code(200).send({ ip: req.ip,
|
|
165
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'http', host: 'example.com', port: app.server.address().port })
|
|
166
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
161
167
|
})
|
|
162
168
|
app.get('/trustproxyprotocols', function (req, reply) {
|
|
163
|
-
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'dolor' })
|
|
164
|
-
reply.code(200).send({ ip: req.ip,
|
|
169
|
+
testRequestValues(t, req, { ip: '1.1.1.1', protocol: 'dolor', host: 'example.com', port: app.server.address().port })
|
|
170
|
+
reply.code(200).send({ ip: req.ip, host: req.host })
|
|
165
171
|
})
|
|
166
172
|
|
|
167
173
|
t.teardown(app.close.bind(app))
|