fastify 5.0.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.borp.yaml +3 -0
- package/.vscode/settings.json +22 -0
- package/README.md +12 -7
- package/docs/Guides/Database.md +15 -15
- package/docs/Guides/Detecting-When-Clients-Abort.md +28 -28
- package/docs/Guides/Ecosystem.md +14 -15
- package/docs/Guides/Index.md +1 -1
- package/docs/Guides/Migration-Guide-V4.md +11 -11
- package/docs/Guides/Migration-Guide-V5.md +133 -9
- package/docs/Guides/Plugins-Guide.md +1 -1
- package/docs/Guides/Prototype-Poisoning.md +3 -3
- package/docs/Guides/Recommendations.md +9 -9
- package/docs/Guides/Serverless.md +5 -5
- package/docs/Guides/Testing.md +58 -57
- package/docs/Guides/Write-Plugin.md +2 -2
- package/docs/Guides/Write-Type-Provider.md +3 -3
- package/docs/Reference/ContentTypeParser.md +4 -4
- package/docs/Reference/Decorators.md +2 -2
- package/docs/Reference/Errors.md +3 -3
- package/docs/Reference/Hooks.md +7 -7
- package/docs/Reference/LTS.md +8 -0
- package/docs/Reference/Logging.md +5 -4
- package/docs/Reference/Reply.md +55 -58
- package/docs/Reference/Request.md +49 -42
- package/docs/Reference/Routes.md +16 -13
- package/docs/Reference/Server.md +32 -28
- package/docs/Reference/TypeScript.md +9 -9
- package/docs/Reference/Validation-and-Serialization.md +5 -5
- package/examples/typescript-server.ts +1 -1
- package/fastify.d.ts +14 -5
- package/fastify.js +8 -6
- package/lib/contentTypeParser.js +9 -7
- package/lib/context.js +1 -2
- package/lib/error-handler.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/fourOhFour.js +1 -1
- package/lib/hooks.js +4 -1
- package/lib/{logger.js → logger-factory.js} +70 -122
- package/lib/logger-pino.js +68 -0
- package/lib/pluginOverride.js +1 -1
- package/lib/pluginUtils.js +2 -2
- package/lib/reply.js +4 -5
- package/lib/request.js +16 -9
- package/lib/route.js +23 -22
- package/lib/validation.js +2 -2
- package/package.json +13 -15
- package/test/404s.test.js +675 -629
- package/test/500s.test.js +72 -63
- package/test/{allowUnsafeRegex.test.js → allow-unsafe-regex.test.js} +30 -26
- package/test/als.test.js +48 -45
- package/test/async-await.test.js +148 -134
- package/test/async-dispose.test.js +4 -5
- package/test/async_hooks.test.js +30 -28
- package/test/{bodyLimit.test.js → body-limit.test.js} +61 -58
- package/test/buffer.test.js +9 -10
- package/test/build/error-serializer.test.js +3 -4
- package/test/build/version.test.js +2 -3
- package/test/build-certificate.js +1 -1
- package/test/bundler/README.md +5 -5
- package/test/bundler/esbuild/bundler-test.js +10 -9
- package/test/bundler/webpack/bundler-test.js +10 -9
- package/test/case-insensitive.test.js +31 -28
- package/test/chainable.test.js +4 -5
- package/test/check.test.js +8 -10
- package/test/{childLoggerFactory.test.js → child-logger-factory.test.js} +56 -19
- package/test/client-timeout.test.js +5 -5
- package/test/close-pipelining.test.js +6 -8
- package/test/conditional-pino.test.js +47 -0
- package/test/{connectionTimeout.test.js → connection-timeout.test.js} +10 -11
- package/test/constrained-routes.test.js +243 -236
- package/test/content-length.test.js +53 -68
- package/test/content-parser.test.js +186 -158
- package/test/content-type.test.js +8 -9
- package/test/context-config.test.js +44 -54
- package/test/custom-http-server.test.js +16 -20
- package/test/custom-parser.5.test.js +32 -32
- package/test/diagnostics-channel/404.test.js +15 -15
- package/test/diagnostics-channel/async-delay-request.test.js +25 -25
- package/test/diagnostics-channel/async-request.test.js +24 -24
- package/test/diagnostics-channel/error-before-handler.test.js +4 -5
- package/test/diagnostics-channel/error-request.test.js +19 -19
- package/test/diagnostics-channel/error-status.test.js +8 -8
- package/test/diagnostics-channel/init.test.js +6 -7
- package/test/diagnostics-channel/sync-delay-request.test.js +16 -16
- package/test/diagnostics-channel/sync-request-reply.test.js +16 -16
- package/test/diagnostics-channel/sync-request.test.js +19 -19
- package/test/encapsulated-child-logger-factory.test.js +8 -8
- package/test/encapsulated-error-handler.test.js +20 -20
- package/test/esm/errorCodes.test.mjs +5 -5
- package/test/esm/esm.test.mjs +3 -3
- package/test/esm/named-exports.mjs +3 -3
- package/test/esm/other.mjs +2 -2
- package/test/fastify-instance.test.js +33 -34
- package/test/{findRoute.test.js → find-route.test.js} +11 -10
- package/test/fluent-schema.test.js +33 -36
- package/test/handler-context.test.js +11 -11
- package/test/has-route.test.js +12 -15
- package/test/header-overflow.test.js +13 -12
- package/test/hooks.on-ready.test.js +2 -2
- package/test/hooks.test.js +25 -25
- package/test/http-methods/copy.test.js +22 -24
- package/test/http-methods/custom-http-methods.test.js +24 -21
- package/test/http-methods/get.test.js +97 -84
- package/test/http-methods/head.test.js +63 -57
- package/test/http-methods/lock.test.js +21 -20
- package/test/http-methods/mkcalendar.test.js +31 -27
- package/test/http-methods/mkcol.test.js +10 -10
- package/test/http-methods/move.test.js +11 -11
- package/test/http-methods/propfind.test.js +32 -27
- package/test/http-methods/proppatch.test.js +21 -19
- package/test/http-methods/report.test.js +32 -27
- package/test/http-methods/search.test.js +52 -47
- package/test/http-methods/trace.test.js +3 -4
- package/test/http-methods/unlock.test.js +10 -10
- package/test/http2/closing.test.js +50 -58
- package/test/http2/constraint.test.js +47 -50
- package/test/http2/head.test.js +18 -19
- package/test/http2/missing-http2-module.test.js +4 -5
- package/test/http2/plain.test.js +31 -31
- package/test/http2/secure-with-fallback.test.js +61 -61
- package/test/http2/secure.test.js +28 -31
- package/test/http2/unknown-http-method.test.js +13 -14
- package/test/https/custom-https-server.test.js +6 -7
- package/test/https/https.test.js +78 -78
- package/test/imports.test.js +5 -6
- package/test/internals/all.test.js +8 -11
- package/test/internals/{contentTypeParser.test.js → content-type-parser.test.js} +5 -6
- package/test/internals/context.test.js +9 -11
- package/test/internals/decorator.test.js +20 -21
- package/test/internals/errors.test.js +427 -427
- package/test/internals/{handleRequest.test.js → handle-request.test.js} +53 -42
- package/test/internals/{hookRunner.test.js → hook-runner.test.js} +99 -100
- package/test/internals/hooks.test.js +31 -35
- package/test/internals/{initialConfig.test.js → initial-config.test.js} +92 -80
- package/test/internals/logger.test.js +28 -28
- package/test/internals/plugin.test.js +17 -18
- package/test/internals/reply-serialize.test.js +106 -106
- package/test/internals/reply.test.js +620 -585
- package/test/internals/{reqIdGenFactory.test.js → req-id-gen-factory.test.js} +31 -31
- package/test/internals/request-validate.test.js +218 -221
- package/test/internals/request.test.js +225 -107
- package/test/internals/server.test.js +15 -12
- package/test/internals/validation.test.js +35 -36
- package/test/{keepAliveTimeout.test.js → keep-alive-timeout.test.js} +9 -10
- package/test/listen.5.test.js +9 -9
- package/test/{maxRequestsPerSocket.test.js → max-requests-per-socket.test.js} +30 -30
- package/test/middleware.test.js +4 -5
- package/test/noop-set.test.js +5 -5
- package/test/post-empty-body.test.js +18 -11
- package/test/pretty-print.test.js +59 -49
- package/test/proto-poisoning.test.js +42 -37
- package/test/reply-code.test.js +34 -32
- package/test/{reply-earlyHints.test.js → reply-early-hints.test.js} +21 -19
- package/test/request-error.test.js +122 -0
- package/test/request-header-host.test.js +339 -0
- package/test/request-id.test.js +31 -25
- package/test/{requestTimeout.test.js → request-timeout.test.js} +11 -11
- package/test/route.1.test.js +79 -72
- package/test/route.2.test.js +17 -16
- package/test/route.3.test.js +32 -27
- package/test/route.4.test.js +21 -25
- package/test/route.5.test.js +45 -64
- package/test/route.6.test.js +70 -89
- package/test/route.7.test.js +61 -65
- package/test/route.8.test.js +80 -18
- package/test/router-options.test.js +80 -77
- package/test/same-shape.test.js +5 -5
- package/test/schema-examples.test.js +72 -38
- package/test/serialize-response.test.js +9 -10
- package/test/server.test.js +75 -78
- package/test/set-error-handler.test.js +2 -3
- package/test/stream-serializers.test.js +10 -7
- package/test/sync-routes.test.js +18 -18
- package/test/test-reporter.mjs +68 -0
- package/test/trust-proxy.test.js +51 -45
- package/test/type-provider.test.js +8 -6
- package/test/types/content-type-parser.test-d.ts +1 -1
- package/test/types/fastify.test-d.ts +16 -4
- package/test/types/hooks.test-d.ts +2 -1
- package/test/types/instance.test-d.ts +13 -13
- package/test/types/logger.test-d.ts +2 -2
- package/test/types/plugin.test-d.ts +17 -9
- package/test/types/register.test-d.ts +22 -6
- package/test/types/reply.test-d.ts +1 -1
- package/test/types/route.test-d.ts +34 -4
- package/test/types/serverFactory.test-d.ts +1 -1
- package/test/types/type-provider.test-d.ts +1 -1
- package/test/url-rewriting.test.js +35 -38
- package/test/{useSemicolonDelimiter.test.js → use-semicolon-delimiter.test.js} +30 -30
- package/test/validation-error-handling.test.js +259 -285
- package/test/versioned-routes.test.js +126 -113
- package/test/web-api.test.js +48 -37
- package/test/{wrapThenable.test.js → wrap-thenable.test.js} +10 -9
- package/types/hooks.d.ts +2 -1
- package/types/instance.d.ts +9 -2
- package/types/register.d.ts +12 -3
- package/types/reply.d.ts +1 -1
- package/types/request.d.ts +2 -6
- package/types/serverFactory.d.ts +3 -3
- package/types/utils.d.ts +13 -5
- package/test/types/import.js +0 -2
|
@@ -1,120 +1,123 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const Fastify = require('..')
|
|
6
5
|
const sget = require('simple-get').concat
|
|
7
6
|
|
|
8
|
-
test('case insensitive', t => {
|
|
7
|
+
test('case insensitive', (t, done) => {
|
|
9
8
|
t.plan(4)
|
|
10
9
|
|
|
11
10
|
const fastify = Fastify({
|
|
12
11
|
caseSensitive: false
|
|
13
12
|
})
|
|
14
|
-
t.
|
|
13
|
+
t.after(() => fastify.close())
|
|
15
14
|
|
|
16
15
|
fastify.get('/foo', (req, reply) => {
|
|
17
16
|
reply.send({ hello: 'world' })
|
|
18
17
|
})
|
|
19
18
|
|
|
20
19
|
fastify.listen({ port: 0 }, err => {
|
|
21
|
-
t.
|
|
20
|
+
t.assert.ifError(err)
|
|
22
21
|
|
|
23
22
|
sget({
|
|
24
23
|
method: 'GET',
|
|
25
24
|
url: 'http://localhost:' + fastify.server.address().port + '/FOO'
|
|
26
25
|
}, (err, response, body) => {
|
|
27
|
-
t.
|
|
28
|
-
t.
|
|
29
|
-
t.
|
|
26
|
+
t.assert.ifError(err)
|
|
27
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
28
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
30
29
|
hello: 'world'
|
|
31
30
|
})
|
|
31
|
+
done()
|
|
32
32
|
})
|
|
33
33
|
})
|
|
34
34
|
})
|
|
35
35
|
|
|
36
|
-
test('case insensitive inject', t => {
|
|
36
|
+
test('case insensitive inject', (t, done) => {
|
|
37
37
|
t.plan(4)
|
|
38
38
|
|
|
39
39
|
const fastify = Fastify({
|
|
40
40
|
caseSensitive: false
|
|
41
41
|
})
|
|
42
|
-
t.
|
|
42
|
+
t.after(() => fastify.close())
|
|
43
43
|
|
|
44
44
|
fastify.get('/foo', (req, reply) => {
|
|
45
45
|
reply.send({ hello: 'world' })
|
|
46
46
|
})
|
|
47
47
|
|
|
48
48
|
fastify.listen({ port: 0 }, err => {
|
|
49
|
-
t.
|
|
49
|
+
t.assert.ifError(err)
|
|
50
50
|
|
|
51
51
|
fastify.inject({
|
|
52
52
|
method: 'GET',
|
|
53
53
|
url: 'http://localhost:' + fastify.server.address().port + '/FOO'
|
|
54
54
|
}, (err, response) => {
|
|
55
|
-
t.
|
|
56
|
-
t.
|
|
57
|
-
t.
|
|
55
|
+
t.assert.ifError(err)
|
|
56
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
57
|
+
t.assert.deepStrictEqual(JSON.parse(response.payload), {
|
|
58
58
|
hello: 'world'
|
|
59
59
|
})
|
|
60
|
+
done()
|
|
60
61
|
})
|
|
61
62
|
})
|
|
62
63
|
})
|
|
63
64
|
|
|
64
|
-
test('case insensitive (parametric)', t => {
|
|
65
|
+
test('case insensitive (parametric)', (t, done) => {
|
|
65
66
|
t.plan(5)
|
|
66
67
|
|
|
67
68
|
const fastify = Fastify({
|
|
68
69
|
caseSensitive: false
|
|
69
70
|
})
|
|
70
|
-
t.
|
|
71
|
+
t.after(() => fastify.close())
|
|
71
72
|
|
|
72
73
|
fastify.get('/foo/:param', (req, reply) => {
|
|
73
|
-
t.
|
|
74
|
+
t.assert.strictEqual(req.params.param, 'bAr')
|
|
74
75
|
reply.send({ hello: 'world' })
|
|
75
76
|
})
|
|
76
77
|
|
|
77
78
|
fastify.listen({ port: 0 }, err => {
|
|
78
|
-
t.
|
|
79
|
+
t.assert.ifError(err)
|
|
79
80
|
|
|
80
81
|
sget({
|
|
81
82
|
method: 'GET',
|
|
82
83
|
url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr'
|
|
83
84
|
}, (err, response, body) => {
|
|
84
|
-
t.
|
|
85
|
-
t.
|
|
86
|
-
t.
|
|
85
|
+
t.assert.ifError(err)
|
|
86
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
87
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
87
88
|
hello: 'world'
|
|
88
89
|
})
|
|
90
|
+
done()
|
|
89
91
|
})
|
|
90
92
|
})
|
|
91
93
|
})
|
|
92
94
|
|
|
93
|
-
test('case insensitive (wildcard)', t => {
|
|
95
|
+
test('case insensitive (wildcard)', (t, done) => {
|
|
94
96
|
t.plan(5)
|
|
95
97
|
|
|
96
98
|
const fastify = Fastify({
|
|
97
99
|
caseSensitive: false
|
|
98
100
|
})
|
|
99
|
-
t.
|
|
101
|
+
t.after(() => fastify.close())
|
|
100
102
|
|
|
101
103
|
fastify.get('/foo/*', (req, reply) => {
|
|
102
|
-
t.
|
|
104
|
+
t.assert.strictEqual(req.params['*'], 'bAr/baZ')
|
|
103
105
|
reply.send({ hello: 'world' })
|
|
104
106
|
})
|
|
105
107
|
|
|
106
108
|
fastify.listen({ port: 0 }, err => {
|
|
107
|
-
t.
|
|
109
|
+
t.assert.ifError(err)
|
|
108
110
|
|
|
109
111
|
sget({
|
|
110
112
|
method: 'GET',
|
|
111
113
|
url: 'http://localhost:' + fastify.server.address().port + '/FoO/bAr/baZ'
|
|
112
114
|
}, (err, response, body) => {
|
|
113
|
-
t.
|
|
114
|
-
t.
|
|
115
|
-
t.
|
|
115
|
+
t.assert.ifError(err)
|
|
116
|
+
t.assert.strictEqual(response.statusCode, 200)
|
|
117
|
+
t.assert.deepStrictEqual(JSON.parse(body), {
|
|
116
118
|
hello: 'world'
|
|
117
119
|
})
|
|
120
|
+
done()
|
|
118
121
|
})
|
|
119
122
|
})
|
|
120
123
|
})
|
package/test/chainable.test.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const fastify = require('..')()
|
|
6
5
|
|
|
7
6
|
const noop = () => {}
|
|
@@ -22,17 +21,17 @@ const opts = {
|
|
|
22
21
|
|
|
23
22
|
test('chainable - get', t => {
|
|
24
23
|
t.plan(1)
|
|
25
|
-
t.
|
|
24
|
+
t.assert.strictEqual(fastify.get('/', opts, noop), fastify)
|
|
26
25
|
})
|
|
27
26
|
|
|
28
27
|
test('chainable - post', t => {
|
|
29
28
|
t.plan(1)
|
|
30
|
-
t.
|
|
29
|
+
t.assert.strictEqual(fastify.post('/', opts, noop), fastify)
|
|
31
30
|
})
|
|
32
31
|
|
|
33
32
|
test('chainable - route', t => {
|
|
34
33
|
t.plan(1)
|
|
35
|
-
t.
|
|
34
|
+
t.assert.strictEqual(fastify.route({
|
|
36
35
|
method: 'GET',
|
|
37
36
|
url: '/other',
|
|
38
37
|
schema: opts.schema,
|
package/test/check.test.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const { S } = require('fluent-json-schema')
|
|
6
5
|
const Fastify = require('..')
|
|
7
6
|
const sget = require('simple-get').concat
|
|
@@ -73,7 +72,6 @@ const options = {
|
|
|
73
72
|
}
|
|
74
73
|
|
|
75
74
|
const handler = (request, reply) => {
|
|
76
|
-
console.log('in handler')
|
|
77
75
|
if (request.body.id === '400') {
|
|
78
76
|
return reply.status(400).send({
|
|
79
77
|
statusCode: 400,
|
|
@@ -107,15 +105,15 @@ const handler = (request, reply) => {
|
|
|
107
105
|
})
|
|
108
106
|
}
|
|
109
107
|
|
|
110
|
-
test('serialize the response for a Bad Request error, as defined on the schema', t => {
|
|
108
|
+
test('serialize the response for a Bad Request error, as defined on the schema', (t, done) => {
|
|
111
109
|
const fastify = Fastify({})
|
|
112
110
|
|
|
113
|
-
t.
|
|
111
|
+
t.after(() => fastify.close())
|
|
114
112
|
|
|
115
113
|
fastify.post('/', options, handler)
|
|
116
114
|
|
|
117
115
|
fastify.listen({ port: 0 }, err => {
|
|
118
|
-
t.
|
|
116
|
+
t.assert.ifError(err)
|
|
119
117
|
|
|
120
118
|
const url = `http://localhost:${fastify.server.address().port}/`
|
|
121
119
|
|
|
@@ -124,14 +122,14 @@ test('serialize the response for a Bad Request error, as defined on the schema',
|
|
|
124
122
|
url,
|
|
125
123
|
json: true
|
|
126
124
|
}, (err, response, body) => {
|
|
127
|
-
t.
|
|
128
|
-
t.
|
|
129
|
-
t.
|
|
125
|
+
t.assert.ifError(err)
|
|
126
|
+
t.assert.strictEqual(response.statusCode, 400)
|
|
127
|
+
t.assert.deepStrictEqual(body, {
|
|
130
128
|
statusCode: 400,
|
|
131
129
|
error: 'Bad Request',
|
|
132
130
|
message: 'body must be object'
|
|
133
131
|
})
|
|
134
|
-
|
|
132
|
+
done()
|
|
135
133
|
})
|
|
136
134
|
})
|
|
137
135
|
})
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
const Fastify = require('..')
|
|
5
5
|
|
|
6
|
-
test('Should accept a custom childLoggerFactory function', t => {
|
|
6
|
+
test('Should accept a custom childLoggerFactory function', (t, done) => {
|
|
7
7
|
t.plan(4)
|
|
8
8
|
|
|
9
9
|
const fastify = Fastify()
|
|
10
10
|
fastify.setChildLoggerFactory(function (logger, bindings, opts) {
|
|
11
|
-
t.ok(bindings.reqId)
|
|
12
|
-
t.ok(opts)
|
|
11
|
+
t.assert.ok(bindings.reqId)
|
|
12
|
+
t.assert.ok(opts)
|
|
13
13
|
this.log.debug(bindings, 'created child logger')
|
|
14
14
|
return logger.child(bindings, opts)
|
|
15
15
|
})
|
|
@@ -19,19 +19,52 @@ test('Should accept a custom childLoggerFactory function', t => {
|
|
|
19
19
|
reply.send()
|
|
20
20
|
})
|
|
21
21
|
|
|
22
|
+
t.after(() => fastify.close())
|
|
23
|
+
|
|
24
|
+
fastify.listen({ port: 0 }, err => {
|
|
25
|
+
t.assert.ifError(err)
|
|
26
|
+
fastify.inject({
|
|
27
|
+
method: 'GET',
|
|
28
|
+
url: 'http://localhost:' + fastify.server.address().port
|
|
29
|
+
}, (err, res) => {
|
|
30
|
+
t.assert.ifError(err)
|
|
31
|
+
done()
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
test('Should accept a custom childLoggerFactory function as option', (t, done) => {
|
|
37
|
+
t.plan(2)
|
|
38
|
+
|
|
39
|
+
const fastify = Fastify({
|
|
40
|
+
childLoggerFactory: function (logger, bindings, opts) {
|
|
41
|
+
t.ok(bindings.reqId)
|
|
42
|
+
t.ok(opts)
|
|
43
|
+
this.log.debug(bindings, 'created child logger')
|
|
44
|
+
return logger.child(bindings, opts)
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
fastify.get('/', (req, reply) => {
|
|
49
|
+
req.log.info('log message')
|
|
50
|
+
reply.send()
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
t.after(() => fastify.close())
|
|
54
|
+
|
|
22
55
|
fastify.listen({ port: 0 }, err => {
|
|
23
|
-
t.
|
|
56
|
+
t.assert.ifError(err)
|
|
24
57
|
fastify.inject({
|
|
25
58
|
method: 'GET',
|
|
26
59
|
url: 'http://localhost:' + fastify.server.address().port
|
|
27
60
|
}, (err, res) => {
|
|
28
|
-
t.
|
|
29
|
-
|
|
61
|
+
t.assert.ifError(err)
|
|
62
|
+
done()
|
|
30
63
|
})
|
|
31
64
|
})
|
|
32
65
|
})
|
|
33
66
|
|
|
34
|
-
test('req.log should be the instance returned by the factory', t => {
|
|
67
|
+
test('req.log should be the instance returned by the factory', (t, done) => {
|
|
35
68
|
t.plan(3)
|
|
36
69
|
|
|
37
70
|
const fastify = Fastify()
|
|
@@ -41,24 +74,26 @@ test('req.log should be the instance returned by the factory', t => {
|
|
|
41
74
|
})
|
|
42
75
|
|
|
43
76
|
fastify.get('/', (req, reply) => {
|
|
44
|
-
t.
|
|
77
|
+
t.assert.strictEqual(req.log, fastify.log)
|
|
45
78
|
req.log.info('log message')
|
|
46
79
|
reply.send()
|
|
47
80
|
})
|
|
48
81
|
|
|
82
|
+
t.after(() => fastify.close())
|
|
83
|
+
|
|
49
84
|
fastify.listen({ port: 0 }, err => {
|
|
50
|
-
t.
|
|
85
|
+
t.assert.ifError(err)
|
|
51
86
|
fastify.inject({
|
|
52
87
|
method: 'GET',
|
|
53
88
|
url: 'http://localhost:' + fastify.server.address().port
|
|
54
89
|
}, (err, res) => {
|
|
55
|
-
t.
|
|
56
|
-
|
|
90
|
+
t.assert.ifError(err)
|
|
91
|
+
done()
|
|
57
92
|
})
|
|
58
93
|
})
|
|
59
94
|
})
|
|
60
95
|
|
|
61
|
-
test('should throw error if invalid logger is returned', t => {
|
|
96
|
+
test('should throw error if invalid logger is returned', (t, done) => {
|
|
62
97
|
t.plan(2)
|
|
63
98
|
|
|
64
99
|
const fastify = Fastify()
|
|
@@ -71,20 +106,22 @@ test('should throw error if invalid logger is returned', t => {
|
|
|
71
106
|
reply.send()
|
|
72
107
|
})
|
|
73
108
|
|
|
109
|
+
t.after(() => fastify.close())
|
|
110
|
+
|
|
74
111
|
fastify.listen({ port: 0 }, err => {
|
|
75
|
-
t.
|
|
76
|
-
t.throws(() => {
|
|
112
|
+
t.assert.ifError(err)
|
|
113
|
+
t.assert.throws(() => {
|
|
77
114
|
try {
|
|
78
115
|
fastify.inject({
|
|
79
116
|
method: 'GET',
|
|
80
117
|
url: 'http://localhost:' + fastify.server.address().port
|
|
81
118
|
}, (err) => {
|
|
82
|
-
t.fail('request should have failed but did not')
|
|
83
|
-
t.
|
|
84
|
-
|
|
119
|
+
t.assert.fail('request should have failed but did not')
|
|
120
|
+
t.assert.ifError(err)
|
|
121
|
+
done()
|
|
85
122
|
})
|
|
86
123
|
} finally {
|
|
87
|
-
|
|
124
|
+
done()
|
|
88
125
|
}
|
|
89
126
|
}, { code: 'FST_ERR_LOG_INVALID_LOGGER' })
|
|
90
127
|
})
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { test } = require('
|
|
3
|
+
const { test } = require('node:test')
|
|
4
4
|
const fastify = require('..')({ requestTimeout: 5, http: { connectionsCheckingInterval: 1000 } })
|
|
5
5
|
const { connect } = require('node:net')
|
|
6
6
|
|
|
7
|
-
test('requestTimeout should return 408', t => {
|
|
7
|
+
test('requestTimeout should return 408', (t, done) => {
|
|
8
8
|
t.plan(1)
|
|
9
9
|
|
|
10
|
-
t.
|
|
10
|
+
t.after(() => {
|
|
11
11
|
fastify.close()
|
|
12
12
|
})
|
|
13
13
|
|
|
@@ -28,11 +28,11 @@ test('requestTimeout should return 408', t => {
|
|
|
28
28
|
|
|
29
29
|
socket.on('data', c => (data = Buffer.concat([data, c])))
|
|
30
30
|
socket.on('end', () => {
|
|
31
|
-
t.
|
|
31
|
+
t.assert.strictEqual(
|
|
32
32
|
data.toString('utf-8'),
|
|
33
33
|
'HTTP/1.1 408 Request Timeout\r\nContent-Length: 71\r\nContent-Type: application/json\r\n\r\n{"error":"Request Timeout","message":"Client Timeout","statusCode":408}'
|
|
34
34
|
)
|
|
35
|
-
|
|
35
|
+
done()
|
|
36
36
|
})
|
|
37
37
|
})
|
|
38
38
|
})
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
const test = t.test
|
|
3
|
+
const { test } = require('node:test')
|
|
5
4
|
const Fastify = require('..')
|
|
6
5
|
const { Client } = require('undici')
|
|
7
6
|
|
|
@@ -29,8 +28,7 @@ test('Should return 503 while closing - pipelining', async t => {
|
|
|
29
28
|
instance.request({ path: '/', method: 'GET' })
|
|
30
29
|
])
|
|
31
30
|
const actual = responses.map(r => r.statusCode)
|
|
32
|
-
|
|
33
|
-
t.same(actual, codes)
|
|
31
|
+
t.assert.deepStrictEqual(actual, codes)
|
|
34
32
|
|
|
35
33
|
await instance.close()
|
|
36
34
|
})
|
|
@@ -61,10 +59,10 @@ test('Should close the socket abruptly - pipelining - return503OnClosing: false'
|
|
|
61
59
|
instance.request({ path: '/', method: 'GET' })
|
|
62
60
|
])
|
|
63
61
|
|
|
64
|
-
t.
|
|
65
|
-
t.
|
|
66
|
-
t.
|
|
67
|
-
t.
|
|
62
|
+
t.assert.strictEqual(responses[0].status, 'fulfilled')
|
|
63
|
+
t.assert.strictEqual(responses[1].status, 'fulfilled')
|
|
64
|
+
t.assert.strictEqual(responses[2].status, 'rejected')
|
|
65
|
+
t.assert.strictEqual(responses[3].status, 'rejected')
|
|
68
66
|
|
|
69
67
|
await instance.close()
|
|
70
68
|
})
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { test } = require('node:test')
|
|
4
|
+
|
|
5
|
+
test("pino is not require'd if logger is not passed", t => {
|
|
6
|
+
t.plan(1)
|
|
7
|
+
|
|
8
|
+
const fastify = require('..')
|
|
9
|
+
|
|
10
|
+
fastify()
|
|
11
|
+
|
|
12
|
+
t.assert.strictEqual(require.cache[require.resolve('pino')], undefined)
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test("pino is require'd if logger is passed", t => {
|
|
16
|
+
t.plan(1)
|
|
17
|
+
|
|
18
|
+
const fastify = require('..')
|
|
19
|
+
|
|
20
|
+
fastify({
|
|
21
|
+
logger: true
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
t.assert.notStrictEqual(require.cache[require.resolve('pino')], undefined)
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test("pino is require'd if loggerInstance is passed", t => {
|
|
28
|
+
t.plan(1)
|
|
29
|
+
|
|
30
|
+
const fastify = require('..')
|
|
31
|
+
|
|
32
|
+
const loggerInstance = {
|
|
33
|
+
fatal: (msg) => { },
|
|
34
|
+
error: (msg) => { },
|
|
35
|
+
warn: (msg) => { },
|
|
36
|
+
info: (msg) => { },
|
|
37
|
+
debug: (msg) => { },
|
|
38
|
+
trace: (msg) => { },
|
|
39
|
+
child: () => loggerInstance
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
fastify({
|
|
43
|
+
loggerInstance
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
t.assert.notStrictEqual(require.cache[require.resolve('pino')], undefined)
|
|
47
|
+
})
|
|
@@ -2,34 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
const Fastify = require('..')
|
|
4
4
|
const http = require('node:http')
|
|
5
|
-
const
|
|
6
|
-
const test = t.test
|
|
5
|
+
const { test } = require('node:test')
|
|
7
6
|
|
|
8
|
-
test('connectionTimeout', t => {
|
|
7
|
+
test('connectionTimeout', async t => {
|
|
9
8
|
t.plan(6)
|
|
10
9
|
|
|
11
10
|
try {
|
|
12
11
|
Fastify({ connectionTimeout: 1.3 })
|
|
13
|
-
t.fail('option must be an integer')
|
|
12
|
+
t.assert.fail('option must be an integer')
|
|
14
13
|
} catch (err) {
|
|
15
|
-
t.ok(err)
|
|
14
|
+
t.assert.ok(err)
|
|
16
15
|
}
|
|
17
16
|
|
|
18
17
|
try {
|
|
19
18
|
Fastify({ connectionTimeout: [] })
|
|
20
|
-
t.fail('option must be an integer')
|
|
19
|
+
t.assert.fail('option must be an integer')
|
|
21
20
|
} catch (err) {
|
|
22
|
-
t.ok(err)
|
|
21
|
+
t.assert.ok(err)
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
const httpServer = Fastify({ connectionTimeout: 1 }).server
|
|
26
|
-
t.
|
|
25
|
+
t.assert.strictEqual(httpServer.timeout, 1)
|
|
27
26
|
|
|
28
27
|
const httpsServer = Fastify({ connectionTimeout: 2, https: {} }).server
|
|
29
|
-
t.
|
|
28
|
+
t.assert.strictEqual(httpsServer.timeout, 2)
|
|
30
29
|
|
|
31
30
|
const http2Server = Fastify({ connectionTimeout: 3, http2: true }).server
|
|
32
|
-
t.
|
|
31
|
+
t.assert.strictEqual(http2Server.timeout, 3)
|
|
33
32
|
|
|
34
33
|
const serverFactory = (handler, _) => {
|
|
35
34
|
const server = http.createServer((req, res) => {
|
|
@@ -39,5 +38,5 @@ test('connectionTimeout', t => {
|
|
|
39
38
|
return server
|
|
40
39
|
}
|
|
41
40
|
const customServer = Fastify({ connectionTimeout: 4, serverFactory }).server
|
|
42
|
-
t.
|
|
41
|
+
t.assert.strictEqual(customServer.timeout, 5)
|
|
43
42
|
})
|