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/decorator.test.js
CHANGED
|
@@ -1,14 +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('..')
|
|
8
6
|
const fp = require('fastify-plugin')
|
|
9
7
|
const sget = require('simple-get').concat
|
|
10
8
|
const symbols = require('../lib/symbols.js')
|
|
11
|
-
const proxyquire = require('proxyquire')
|
|
12
9
|
|
|
13
10
|
test('server methods should exist', t => {
|
|
14
11
|
t.plan(2)
|
|
@@ -789,49 +786,44 @@ test('decorate* should throw if called after ready', async t => {
|
|
|
789
786
|
await fastify.close()
|
|
790
787
|
})
|
|
791
788
|
|
|
792
|
-
test('decorate* should emit
|
|
793
|
-
t.plan(
|
|
789
|
+
test('decorate* should emit error if an array is passed', t => {
|
|
790
|
+
t.plan(2)
|
|
794
791
|
|
|
795
|
-
|
|
796
|
-
|
|
792
|
+
const fastify = Fastify()
|
|
793
|
+
try {
|
|
794
|
+
fastify.decorateRequest('test_array', [])
|
|
795
|
+
t.fail('should not decorate')
|
|
796
|
+
} catch (err) {
|
|
797
|
+
t.same(err.code, 'FST_ERR_DEC_REFERENCE_TYPE')
|
|
798
|
+
t.same(err.message, "The decorator 'test_array' of type 'object' is a reference type. Use the { getter, setter } interface instead.")
|
|
797
799
|
}
|
|
800
|
+
})
|
|
798
801
|
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
fastify.
|
|
802
|
+
test('server.decorate should not emit error if reference type is passed', async t => {
|
|
803
|
+
t.plan(1)
|
|
804
|
+
|
|
805
|
+
const fastify = Fastify()
|
|
806
|
+
fastify.decorate('test_array', [])
|
|
807
|
+
fastify.decorate('test_object', {})
|
|
808
|
+
await fastify.ready()
|
|
809
|
+
t.pass('Done')
|
|
806
810
|
})
|
|
807
811
|
|
|
808
812
|
test('decorate* should emit warning if object type is passed', t => {
|
|
809
|
-
t.plan(
|
|
813
|
+
t.plan(2)
|
|
810
814
|
|
|
811
|
-
|
|
812
|
-
|
|
815
|
+
const fastify = Fastify()
|
|
816
|
+
try {
|
|
817
|
+
fastify.decorateRequest('test_object', { foo: 'bar' })
|
|
818
|
+
t.fail('should not decorate')
|
|
819
|
+
} catch (err) {
|
|
820
|
+
t.same(err.code, 'FST_ERR_DEC_REFERENCE_TYPE')
|
|
821
|
+
t.same(err.message, "The decorator 'test_object' of type 'object' is a reference type. Use the { getter, setter } interface instead.")
|
|
813
822
|
}
|
|
814
|
-
|
|
815
|
-
const decorate = proxyquire('../lib/decorate', {
|
|
816
|
-
'./warnings': {
|
|
817
|
-
FSTDEP006: onWarning
|
|
818
|
-
}
|
|
819
|
-
})
|
|
820
|
-
const fastify = proxyquire('..', { './lib/decorate.js': decorate })()
|
|
821
|
-
fastify.decorateRequest('test_object', { foo: 'bar' })
|
|
822
823
|
})
|
|
823
824
|
|
|
824
825
|
test('decorate* should not emit warning if object with getter/setter is passed', t => {
|
|
825
|
-
|
|
826
|
-
t.fail('Should not call a warn')
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
const decorate = proxyquire('../lib/decorate', {
|
|
830
|
-
'./warnings': {
|
|
831
|
-
FSTDEP006: onWarning
|
|
832
|
-
}
|
|
833
|
-
})
|
|
834
|
-
const fastify = proxyquire('..', { './lib/decorate.js': decorate })()
|
|
826
|
+
const fastify = Fastify()
|
|
835
827
|
|
|
836
828
|
fastify.decorateRequest('test_getter_setter', {
|
|
837
829
|
setter (val) {
|
|
@@ -844,17 +836,74 @@ test('decorate* should not emit warning if object with getter/setter is passed',
|
|
|
844
836
|
t.end('Done')
|
|
845
837
|
})
|
|
846
838
|
|
|
847
|
-
test('
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
}
|
|
839
|
+
test('decorateRequest with getter/setter can handle encapsulation', async t => {
|
|
840
|
+
t.plan(24)
|
|
841
|
+
|
|
842
|
+
const fastify = Fastify({ logger: true })
|
|
843
|
+
|
|
844
|
+
fastify.decorateRequest('test_getter_setter_holder')
|
|
845
|
+
fastify.decorateRequest('test_getter_setter', {
|
|
846
|
+
getter () {
|
|
847
|
+
this.test_getter_setter_holder ??= {}
|
|
848
|
+
return this.test_getter_setter_holder
|
|
849
|
+
}
|
|
850
|
+
})
|
|
851
|
+
|
|
852
|
+
fastify.get('/', async function (req, reply) {
|
|
853
|
+
t.same(req.test_getter_setter, {}, 'a getter')
|
|
854
|
+
req.test_getter_setter.a = req.id
|
|
855
|
+
t.same(req.test_getter_setter, { a: req.id })
|
|
856
|
+
})
|
|
857
|
+
|
|
858
|
+
fastify.addHook('onResponse', async function hook (req, reply) {
|
|
859
|
+
t.same(req.test_getter_setter, { a: req.id })
|
|
860
|
+
})
|
|
851
861
|
|
|
852
|
-
|
|
853
|
-
'
|
|
854
|
-
|
|
862
|
+
await Promise.all([
|
|
863
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
864
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
865
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
866
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
867
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
868
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200))
|
|
869
|
+
])
|
|
870
|
+
})
|
|
871
|
+
|
|
872
|
+
test('decorateRequest with getter/setter can handle encapsulation with arrays', async t => {
|
|
873
|
+
t.plan(24)
|
|
874
|
+
|
|
875
|
+
const fastify = Fastify({ logger: true })
|
|
876
|
+
|
|
877
|
+
fastify.decorateRequest('array_holder')
|
|
878
|
+
fastify.decorateRequest('my_array', {
|
|
879
|
+
getter () {
|
|
880
|
+
this.array_holder ??= []
|
|
881
|
+
return this.array_holder
|
|
855
882
|
}
|
|
856
883
|
})
|
|
857
|
-
|
|
884
|
+
|
|
885
|
+
fastify.get('/', async function (req, reply) {
|
|
886
|
+
t.same(req.my_array, [])
|
|
887
|
+
req.my_array.push(req.id)
|
|
888
|
+
t.same(req.my_array, [req.id])
|
|
889
|
+
})
|
|
890
|
+
|
|
891
|
+
fastify.addHook('onResponse', async function hook (req, reply) {
|
|
892
|
+
t.same(req.my_array, [req.id])
|
|
893
|
+
})
|
|
894
|
+
|
|
895
|
+
await Promise.all([
|
|
896
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
897
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
898
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
899
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
900
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200)),
|
|
901
|
+
fastify.inject('/').then(res => t.same(res.statusCode, 200))
|
|
902
|
+
])
|
|
903
|
+
})
|
|
904
|
+
|
|
905
|
+
test('decorate* should not emit error if string,bool,numbers are passed', t => {
|
|
906
|
+
const fastify = Fastify()
|
|
858
907
|
|
|
859
908
|
fastify.decorateRequest('test_str', 'foo')
|
|
860
909
|
fastify.decorateRequest('test_bool', true)
|
package/test/delete.test.js
CHANGED
|
@@ -300,8 +300,28 @@ fastify.listen({ port: 0 }, err => {
|
|
|
300
300
|
})
|
|
301
301
|
})
|
|
302
302
|
|
|
303
|
+
test('shorthand - delete with application/json Content-Type header and null body', t => {
|
|
304
|
+
t.plan(4)
|
|
305
|
+
const fastify = require('..')()
|
|
306
|
+
fastify.delete('/', {}, (req, reply) => {
|
|
307
|
+
t.equal(req.body, null)
|
|
308
|
+
reply.send(req.body)
|
|
309
|
+
})
|
|
310
|
+
fastify.inject({
|
|
311
|
+
method: 'DELETE',
|
|
312
|
+
url: '/',
|
|
313
|
+
headers: { 'Content-Type': 'application/json' },
|
|
314
|
+
body: 'null'
|
|
315
|
+
}, (err, response) => {
|
|
316
|
+
t.error(err)
|
|
317
|
+
t.equal(response.statusCode, 200)
|
|
318
|
+
t.same(response.payload.toString(), 'null')
|
|
319
|
+
})
|
|
320
|
+
})
|
|
321
|
+
|
|
303
322
|
// https://github.com/fastify/fastify/issues/936
|
|
304
|
-
|
|
323
|
+
// Skip this test because this is an invalid request
|
|
324
|
+
test('shorthand - delete with application/json Content-Type header and without body', { skip: 'https://github.com/fastify/fastify/pull/5419' }, t => {
|
|
305
325
|
t.plan(4)
|
|
306
326
|
const fastify = require('..')()
|
|
307
327
|
fastify.delete('/', {}, (req, reply) => {
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
|
+
const Fastify = require('../..')
|
|
8
|
+
const { getServerUrl } = require('../helper')
|
|
9
|
+
const Request = require('../../lib/request')
|
|
10
|
+
const Reply = require('../../lib/reply')
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel sync events fire in expected order', t => {
|
|
13
|
+
t.plan(9)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
let firstEncounteredMessage
|
|
16
|
+
|
|
17
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
18
|
+
t.equal(callOrder++, 0)
|
|
19
|
+
firstEncounteredMessage = msg
|
|
20
|
+
t.ok(msg.request instanceof Request)
|
|
21
|
+
t.ok(msg.reply instanceof Reply)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
|
|
25
|
+
t.ok(msg.request instanceof Request)
|
|
26
|
+
t.ok(msg.reply instanceof Reply)
|
|
27
|
+
t.equal(callOrder++, 1)
|
|
28
|
+
t.equal(msg, firstEncounteredMessage)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
32
|
+
t.fail('should not trigger error channel')
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const fastify = Fastify()
|
|
36
|
+
fastify.route({
|
|
37
|
+
method: 'GET',
|
|
38
|
+
url: '/',
|
|
39
|
+
handler: function (req, reply) {
|
|
40
|
+
reply.callNotFound()
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
45
|
+
if (err) t.error(err)
|
|
46
|
+
|
|
47
|
+
t.teardown(() => { fastify.close() })
|
|
48
|
+
|
|
49
|
+
sget({
|
|
50
|
+
method: 'GET',
|
|
51
|
+
url: getServerUrl(fastify) + '/'
|
|
52
|
+
}, (err, response, body) => {
|
|
53
|
+
t.error(err)
|
|
54
|
+
t.equal(response.statusCode, 404)
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
})
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
|
+
const Fastify = require('../..')
|
|
8
|
+
const { getServerUrl } = require('../helper')
|
|
9
|
+
const Request = require('../../lib/request')
|
|
10
|
+
const Reply = require('../../lib/reply')
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel async events fire in expected order', t => {
|
|
13
|
+
t.plan(19)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
let firstEncounteredMessage
|
|
16
|
+
|
|
17
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
18
|
+
t.equal(callOrder++, 0)
|
|
19
|
+
firstEncounteredMessage = msg
|
|
20
|
+
t.ok(msg.request instanceof Request)
|
|
21
|
+
t.ok(msg.reply instanceof Reply)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
|
|
25
|
+
t.equal(callOrder++, 1)
|
|
26
|
+
t.ok(msg.request instanceof Request)
|
|
27
|
+
t.ok(msg.reply instanceof Reply)
|
|
28
|
+
t.equal(msg, firstEncounteredMessage)
|
|
29
|
+
t.equal(msg.async, true)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
diagnostics.subscribe('tracing:fastify.request.handler:asyncStart', (msg) => {
|
|
33
|
+
t.equal(callOrder++, 2)
|
|
34
|
+
t.ok(msg.request instanceof Request)
|
|
35
|
+
t.ok(msg.reply instanceof Reply)
|
|
36
|
+
t.equal(msg, firstEncounteredMessage)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
diagnostics.subscribe('tracing:fastify.request.handler:asyncEnd', (msg) => {
|
|
40
|
+
t.equal(callOrder++, 3)
|
|
41
|
+
t.ok(msg.request instanceof Request)
|
|
42
|
+
t.ok(msg.reply instanceof Reply)
|
|
43
|
+
t.equal(msg, firstEncounteredMessage)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
47
|
+
t.fail('should not trigger error channel')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const fastify = Fastify()
|
|
51
|
+
fastify.route({
|
|
52
|
+
method: 'GET',
|
|
53
|
+
url: '/',
|
|
54
|
+
handler: async function (req, reply) {
|
|
55
|
+
setImmediate(() => reply.send({ hello: 'world' }))
|
|
56
|
+
return reply
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
61
|
+
if (err) t.error(err)
|
|
62
|
+
|
|
63
|
+
t.teardown(() => { fastify.close() })
|
|
64
|
+
|
|
65
|
+
sget({
|
|
66
|
+
method: 'GET',
|
|
67
|
+
url: getServerUrl(fastify) + '/'
|
|
68
|
+
}, (err, response, body) => {
|
|
69
|
+
t.error(err)
|
|
70
|
+
t.equal(response.statusCode, 200)
|
|
71
|
+
t.same(JSON.parse(body), { hello: 'world' })
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
})
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
|
+
const Fastify = require('../..')
|
|
8
|
+
const { getServerUrl } = require('../helper')
|
|
9
|
+
const Request = require('../../lib/request')
|
|
10
|
+
const Reply = require('../../lib/reply')
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel async events fire in expected order', t => {
|
|
13
|
+
t.plan(18)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
let firstEncounteredMessage
|
|
16
|
+
|
|
17
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
18
|
+
t.equal(callOrder++, 0)
|
|
19
|
+
firstEncounteredMessage = msg
|
|
20
|
+
t.ok(msg.request instanceof Request)
|
|
21
|
+
t.ok(msg.reply instanceof Reply)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
|
|
25
|
+
t.equal(callOrder++, 1)
|
|
26
|
+
t.ok(msg.request instanceof Request)
|
|
27
|
+
t.ok(msg.reply instanceof Reply)
|
|
28
|
+
t.equal(msg, firstEncounteredMessage)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
diagnostics.subscribe('tracing:fastify.request.handler:asyncStart', (msg) => {
|
|
32
|
+
t.equal(callOrder++, 2)
|
|
33
|
+
t.ok(msg.request instanceof Request)
|
|
34
|
+
t.ok(msg.reply instanceof Reply)
|
|
35
|
+
t.equal(msg, firstEncounteredMessage)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
diagnostics.subscribe('tracing:fastify.request.handler:asyncEnd', (msg) => {
|
|
39
|
+
t.equal(callOrder++, 3)
|
|
40
|
+
t.ok(msg.request instanceof Request)
|
|
41
|
+
t.ok(msg.reply instanceof Reply)
|
|
42
|
+
t.equal(msg, firstEncounteredMessage)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
46
|
+
t.fail('should not trigger error channel')
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
const fastify = Fastify()
|
|
50
|
+
fastify.route({
|
|
51
|
+
method: 'GET',
|
|
52
|
+
url: '/',
|
|
53
|
+
handler: async function (req, reply) {
|
|
54
|
+
return { hello: 'world' }
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
59
|
+
if (err) t.error(err)
|
|
60
|
+
|
|
61
|
+
t.teardown(() => { fastify.close() })
|
|
62
|
+
|
|
63
|
+
sget({
|
|
64
|
+
method: 'GET',
|
|
65
|
+
url: getServerUrl(fastify) + '/'
|
|
66
|
+
}, (err, response, body) => {
|
|
67
|
+
t.error(err)
|
|
68
|
+
t.equal(response.statusCode, 200)
|
|
69
|
+
t.same(JSON.parse(body), { hello: 'world' })
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
})
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
require('../../lib/hooks').onSendHookRunner = function Stub () {}
|
|
7
|
+
const Request = require('../../lib/request')
|
|
8
|
+
const Reply = require('../../lib/reply')
|
|
9
|
+
const symbols = require('../../lib/symbols.js')
|
|
10
|
+
const { preHandlerCallback } = require('../../lib/handleRequest')[Symbol.for('internals')]
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel handles an error before calling context handler', t => {
|
|
13
|
+
t.plan(3)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
|
|
16
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
17
|
+
t.equal(callOrder++, 0)
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
21
|
+
t.equal(callOrder++, 1)
|
|
22
|
+
t.equal(msg.error.message, 'oh no')
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
const error = new Error('oh no')
|
|
26
|
+
const request = new Request()
|
|
27
|
+
const reply = new Reply({}, request)
|
|
28
|
+
request[symbols.kRouteContext] = {
|
|
29
|
+
config: {
|
|
30
|
+
url: '/foo',
|
|
31
|
+
method: 'GET'
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
preHandlerCallback(error, request, reply)
|
|
36
|
+
})
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
|
+
const Fastify = require('../..')
|
|
8
|
+
const { getServerUrl } = require('../helper')
|
|
9
|
+
const Request = require('../../lib/request')
|
|
10
|
+
const Reply = require('../../lib/reply')
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel events report on errors', t => {
|
|
13
|
+
t.plan(14)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
let firstEncounteredMessage
|
|
16
|
+
|
|
17
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
18
|
+
t.equal(callOrder++, 0)
|
|
19
|
+
firstEncounteredMessage = msg
|
|
20
|
+
t.ok(msg.request instanceof Request)
|
|
21
|
+
t.ok(msg.reply instanceof Reply)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
|
|
25
|
+
t.ok(msg.request instanceof Request)
|
|
26
|
+
t.ok(msg.reply instanceof Reply)
|
|
27
|
+
t.equal(callOrder++, 2)
|
|
28
|
+
t.equal(msg, firstEncounteredMessage)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
32
|
+
t.ok(msg.request instanceof Request)
|
|
33
|
+
t.ok(msg.reply instanceof Reply)
|
|
34
|
+
t.ok(msg.error instanceof Error)
|
|
35
|
+
t.equal(callOrder++, 1)
|
|
36
|
+
t.equal(msg.error.message, 'borked')
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const fastify = Fastify()
|
|
40
|
+
fastify.route({
|
|
41
|
+
method: 'GET',
|
|
42
|
+
url: '/',
|
|
43
|
+
handler: function (req, reply) {
|
|
44
|
+
throw new Error('borked')
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
49
|
+
if (err) t.error(err)
|
|
50
|
+
|
|
51
|
+
t.teardown(() => { fastify.close() })
|
|
52
|
+
|
|
53
|
+
sget({
|
|
54
|
+
method: 'GET',
|
|
55
|
+
url: getServerUrl(fastify) + '/'
|
|
56
|
+
}, (err, response, body) => {
|
|
57
|
+
t.error(err)
|
|
58
|
+
t.equal(response.statusCode, 500)
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
})
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const test = t.test
|
|
5
|
+
const Fastify = require('../..')
|
|
6
|
+
const statusCodes = require('node:http').STATUS_CODES
|
|
7
|
+
const diagnostics = require('dc-polyfill')
|
|
8
|
+
|
|
9
|
+
test('Error.status property support', t => {
|
|
10
|
+
t.plan(4)
|
|
11
|
+
const fastify = Fastify()
|
|
12
|
+
t.teardown(fastify.close.bind(fastify))
|
|
13
|
+
const err = new Error('winter is coming')
|
|
14
|
+
err.status = 418
|
|
15
|
+
|
|
16
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
17
|
+
t.equal(msg.error.message, 'winter is coming')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
fastify.get('/', () => {
|
|
21
|
+
return Promise.reject(err)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
fastify.inject({
|
|
25
|
+
method: 'GET',
|
|
26
|
+
url: '/'
|
|
27
|
+
}, (error, res) => {
|
|
28
|
+
t.error(error)
|
|
29
|
+
t.equal(res.statusCode, 418)
|
|
30
|
+
t.same(
|
|
31
|
+
{
|
|
32
|
+
error: statusCodes['418'],
|
|
33
|
+
message: err.message,
|
|
34
|
+
statusCode: 418
|
|
35
|
+
},
|
|
36
|
+
JSON.parse(res.payload)
|
|
37
|
+
)
|
|
38
|
+
})
|
|
39
|
+
})
|
|
@@ -9,7 +9,7 @@ test('diagnostics_channel when present and subscribers', t => {
|
|
|
9
9
|
|
|
10
10
|
let fastifyInHook
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const diagnostics = {
|
|
13
13
|
channel (name) {
|
|
14
14
|
t.equal(name, 'fastify.initialization')
|
|
15
15
|
return {
|
|
@@ -23,8 +23,8 @@ test('diagnostics_channel when present and subscribers', t => {
|
|
|
23
23
|
'@noCallThru': true
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
const fastify = proxyquire('
|
|
27
|
-
'
|
|
26
|
+
const fastify = proxyquire('../../fastify', {
|
|
27
|
+
'dc-polyfill': diagnostics
|
|
28
28
|
})()
|
|
29
29
|
t.equal(fastifyInHook, fastify)
|
|
30
30
|
})
|
|
@@ -32,7 +32,7 @@ test('diagnostics_channel when present and subscribers', t => {
|
|
|
32
32
|
test('diagnostics_channel when present and no subscribers', t => {
|
|
33
33
|
t.plan(1)
|
|
34
34
|
|
|
35
|
-
const
|
|
35
|
+
const diagnostics = {
|
|
36
36
|
channel (name) {
|
|
37
37
|
t.equal(name, 'fastify.initialization')
|
|
38
38
|
return {
|
|
@@ -45,17 +45,7 @@ test('diagnostics_channel when present and no subscribers', t => {
|
|
|
45
45
|
'@noCallThru': true
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
proxyquire('
|
|
49
|
-
'
|
|
48
|
+
proxyquire('../../fastify', {
|
|
49
|
+
'dc-polyfill': diagnostics
|
|
50
50
|
})()
|
|
51
51
|
})
|
|
52
|
-
|
|
53
|
-
test('diagnostics_channel when not present', t => {
|
|
54
|
-
t.plan(1)
|
|
55
|
-
|
|
56
|
-
t.doesNotThrow(() => {
|
|
57
|
-
proxyquire('../fastify', {
|
|
58
|
-
'node:diagnostics_channel': null
|
|
59
|
-
})()
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const t = require('tap')
|
|
4
|
+
const diagnostics = require('dc-polyfill')
|
|
5
|
+
const test = t.test
|
|
6
|
+
const sget = require('simple-get').concat
|
|
7
|
+
const Fastify = require('../..')
|
|
8
|
+
const { getServerUrl } = require('../helper')
|
|
9
|
+
const Request = require('../../lib/request')
|
|
10
|
+
const Reply = require('../../lib/reply')
|
|
11
|
+
|
|
12
|
+
test('diagnostics channel sync events fire in expected order', t => {
|
|
13
|
+
t.plan(10)
|
|
14
|
+
let callOrder = 0
|
|
15
|
+
let firstEncounteredMessage
|
|
16
|
+
|
|
17
|
+
diagnostics.subscribe('tracing:fastify.request.handler:start', (msg) => {
|
|
18
|
+
t.equal(callOrder++, 0)
|
|
19
|
+
firstEncounteredMessage = msg
|
|
20
|
+
t.ok(msg.request instanceof Request)
|
|
21
|
+
t.ok(msg.reply instanceof Reply)
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
diagnostics.subscribe('tracing:fastify.request.handler:end', (msg) => {
|
|
25
|
+
t.ok(msg.request instanceof Request)
|
|
26
|
+
t.ok(msg.reply instanceof Reply)
|
|
27
|
+
t.equal(callOrder++, 1)
|
|
28
|
+
t.equal(msg, firstEncounteredMessage)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
diagnostics.subscribe('tracing:fastify.request.handler:error', (msg) => {
|
|
32
|
+
t.fail('should not trigger error channel')
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const fastify = Fastify()
|
|
36
|
+
fastify.route({
|
|
37
|
+
method: 'GET',
|
|
38
|
+
url: '/',
|
|
39
|
+
handler: function (req, reply) {
|
|
40
|
+
setImmediate(() => reply.send({ hello: 'world' }))
|
|
41
|
+
}
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
fastify.listen({ port: 0 }, function (err) {
|
|
45
|
+
if (err) t.error(err)
|
|
46
|
+
|
|
47
|
+
t.teardown(() => { fastify.close() })
|
|
48
|
+
|
|
49
|
+
sget({
|
|
50
|
+
method: 'GET',
|
|
51
|
+
url: getServerUrl(fastify) + '/'
|
|
52
|
+
}, (err, response, body) => {
|
|
53
|
+
t.error(err)
|
|
54
|
+
t.equal(response.statusCode, 200)
|
|
55
|
+
t.same(JSON.parse(body), { hello: 'world' })
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
})
|