@fastify/reply-from 12.0.2 → 12.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.
Files changed (107) hide show
  1. package/.github/workflows/ci.yml +6 -0
  2. package/CLAUDE.md +66 -0
  3. package/LICENSE +4 -1
  4. package/README.md +24 -0
  5. package/index.js +12 -1
  6. package/lib/request.js +16 -6
  7. package/lib/utils.js +1 -0
  8. package/package.json +6 -8
  9. package/test/async-route-handler.test.js +29 -32
  10. package/test/balanced-pool.test.js +48 -0
  11. package/test/base-get.test.js +27 -30
  12. package/test/base-path.test.js +27 -24
  13. package/test/base-querystring.test.js +27 -30
  14. package/test/build-url.test.js +17 -15
  15. package/test/core-with-path-in-base.test.js +30 -33
  16. package/test/custom-undici-instance.test.js +28 -36
  17. package/test/disable-request-logging.test.js +38 -52
  18. package/test/fastify-multipart-incompatibility.test.js +43 -49
  19. package/test/fix-GHSA-v2v2-hph8-q5xp.test.js +3 -2
  20. package/test/full-delete-http2.test.js +12 -11
  21. package/test/full-get-test.test.js +27 -30
  22. package/test/full-https-get.test.js +30 -30
  23. package/test/full-post-extended-content-type.test.js +40 -44
  24. package/test/full-post-http2.test.js +18 -13
  25. package/test/full-post-stream-core.test.js +39 -43
  26. package/test/full-post-stream.test.js +39 -43
  27. package/test/full-post.test.js +36 -38
  28. package/test/full-querystring-rewrite-option-complex.test.js +27 -31
  29. package/test/full-querystring-rewrite-option-function-request.test.js +30 -36
  30. package/test/full-querystring-rewrite-option-function.test.js +30 -33
  31. package/test/full-querystring-rewrite-option.test.js +28 -31
  32. package/test/full-querystring-rewrite-string.test.js +27 -30
  33. package/test/full-querystring-rewrite.test.js +27 -30
  34. package/test/full-querystring.test.js +27 -30
  35. package/test/full-rewrite-body-content-type.test.js +37 -41
  36. package/test/full-rewrite-body-http.test.js +39 -43
  37. package/test/full-rewrite-body-to-empty-string.test.js +37 -41
  38. package/test/full-rewrite-body-to-null.test.js +37 -41
  39. package/test/full-rewrite-body.test.js +39 -43
  40. package/test/get-upstream-cache.test.js +12 -11
  41. package/test/get-upstream-http.test.js +35 -41
  42. package/test/get-upstream-type.test.js +24 -27
  43. package/test/get-upstream-undici.test.js +23 -26
  44. package/test/host-header.test.js +22 -18
  45. package/test/http-agents.test.js +27 -30
  46. package/test/http-global-agent.test.js +20 -33
  47. package/test/http-http2.test.js +13 -18
  48. package/test/http-invalid-target.test.js +13 -17
  49. package/test/http-retry.test.js +22 -29
  50. package/test/http-timeout.test.js +87 -27
  51. package/test/http2-canceled-streams-cleanup.test.js +117 -0
  52. package/test/http2-http2.test.js +8 -8
  53. package/test/http2-https.test.js +29 -27
  54. package/test/http2-invalid-base.test.js +2 -2
  55. package/test/http2-invalid-target.test.js +13 -17
  56. package/test/http2-target-crash.test.js +16 -20
  57. package/test/http2-target-multi-crash.test.js +22 -27
  58. package/test/http2-timeout-disabled.test.js +20 -15
  59. package/test/http2-timeout.test.js +94 -43
  60. package/test/http2-unix-socket.test.js +2 -2
  61. package/test/https-agents.test.js +31 -30
  62. package/test/https-global-agent.test.js +22 -31
  63. package/test/method.test.js +37 -42
  64. package/test/modifyCoreObjects-false.test.js +27 -30
  65. package/test/no-body-opts-with-get.test.js +25 -31
  66. package/test/no-body-opts-with-head.test.js +28 -32
  67. package/test/no-stream-body-option.test.js +34 -36
  68. package/test/on-error.test.js +21 -23
  69. package/test/on-invalid-upstream-response.test.js +30 -37
  70. package/test/onResponse.test.js +25 -32
  71. package/test/padded-body.test.js +38 -43
  72. package/test/post-formbody.test.js +35 -40
  73. package/test/post-plain-text.test.js +35 -39
  74. package/test/post-with-custom-encoded-contenttype.test.js +37 -39
  75. package/test/post-with-octet-stream.test.js +18 -88
  76. package/test/retry-on-503.test.js +27 -26
  77. package/test/retry-with-a-custom-handler.test.js +33 -40
  78. package/test/rewrite-headers-type.test.js +24 -29
  79. package/test/rewrite-headers.test.js +31 -36
  80. package/test/rewrite-request-headers-type.test.js +25 -28
  81. package/test/rewrite-request-headers.test.js +26 -30
  82. package/test/transform-body.test.js +37 -43
  83. package/test/undici-agent.test.js +27 -31
  84. package/test/undici-body.test.js +37 -42
  85. package/test/undici-chaining.test.js +35 -42
  86. package/test/undici-connect-timeout.test.js +13 -13
  87. package/test/undici-custom-dispatcher.test.js +11 -11
  88. package/test/undici-global-agent.test.js +14 -33
  89. package/test/undici-no-destroy.test.js +2 -2
  90. package/test/undici-options.test.js +21 -24
  91. package/test/undici-proxy-agent.test.js +4 -3
  92. package/test/undici-retry.test.js +24 -31
  93. package/test/undici-timeout-body-partial.test.js +14 -16
  94. package/test/undici-timeout-body.test.js +17 -19
  95. package/test/undici-timeout.test.js +86 -23
  96. package/test/undici-with-path-in-base.test.js +28 -31
  97. package/test/undici.test.js +28 -31
  98. package/test/unexpected-error.test.js +13 -18
  99. package/test/unix-http-undici-from.test.js +22 -31
  100. package/test/unix-http-undici.test.js +32 -40
  101. package/test/unix-http.test.js +31 -39
  102. package/test/unix-https-undici.test.js +30 -35
  103. package/test/unix-https.test.js +35 -40
  104. package/types/index.d.ts +13 -5
  105. package/types/index.test-d.ts +6 -6
  106. package/test/get-with-body.test.js +0 -55
  107. package/test/head-with-body.test.js +0 -57
@@ -1,46 +1,43 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
3
+ const t = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request } = require('undici')
5
6
  const From = require('..')
6
7
  const http = require('node:http')
7
- const get = require('simple-get').concat
8
8
 
9
9
  const instance = Fastify()
10
10
  instance.register(From, {
11
11
  disableCache: true
12
12
  })
13
13
 
14
- t.plan(8)
15
- t.teardown(instance.close.bind(instance))
14
+ t.test('getUpstream type', async (t) => {
15
+ t.plan(5)
16
+ t.after(() => instance.close())
16
17
 
17
- const target = http.createServer((req, res) => {
18
- t.pass('request proxied')
19
- t.equal(req.method, 'GET')
20
- res.end(req.headers.host)
21
- })
18
+ const target = http.createServer((req, res) => {
19
+ t.assert.ok('request proxied')
20
+ t.assert.strictEqual(req.method, 'GET')
21
+ res.end(req.headers.host)
22
+ })
22
23
 
23
- instance.get('/', (request, reply) => {
24
- reply.from(`http://localhost:${target.address().port}`, {
25
- getUpstream: (req) => {
26
- t.pass('getUpstream called with correct request parameter')
27
- t.equal(req, request)
28
- return `http://localhost:${target.address().port}`
29
- }
24
+ instance.get('/', (request, reply) => {
25
+ reply.from(`http://localhost:${target.address().port}`, {
26
+ getUpstream: (req) => {
27
+ t.assert.ok('getUpstream called with correct request parameter')
28
+ t.assert.strictEqual(req, request)
29
+ return `http://localhost:${target.address().port}`
30
+ }
31
+ })
30
32
  })
31
- })
32
33
 
33
- t.teardown(target.close.bind(target))
34
+ t.after(() => target.close())
34
35
 
35
- instance.listen({ port: 0 }, (err) => {
36
- t.error(err)
36
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
37
37
 
38
- target.listen({ port: 0 }, (err) => {
39
- t.error(err)
38
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
40
39
 
41
- get(`http://localhost:${instance.server.address().port}`, (err, res) => {
42
- t.error(err)
43
- t.equal(res.statusCode, 200)
44
- })
45
- })
40
+ const result = await request(`http://localhost:${instance.server.address().port}`)
41
+
42
+ t.assert.strictEqual(result.statusCode, 200)
46
43
  })
@@ -1,45 +1,42 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
3
+ const t = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request } = require('undici')
5
6
  const From = require('..')
6
7
  const http = require('node:http')
7
- const get = require('simple-get').concat
8
8
 
9
9
  const instance = Fastify()
10
10
  instance.register(From, {
11
11
  disableCache: true
12
12
  })
13
13
 
14
- t.plan(7)
15
- t.teardown(instance.close.bind(instance))
14
+ t.test('getUpstream undici', async (t) => {
15
+ t.plan(4)
16
+ t.after(() => instance.close())
16
17
 
17
- const target = http.createServer((req, res) => {
18
- t.pass('request proxied')
19
- t.equal(req.method, 'GET')
20
- res.end(req.headers.host)
21
- })
18
+ const target = http.createServer((req, res) => {
19
+ t.assert.ok('request proxied')
20
+ t.assert.strictEqual(req.method, 'GET')
21
+ res.end(req.headers.host)
22
+ })
22
23
 
23
- instance.get('/test', (_request, reply) => {
24
- reply.from('/test', {
25
- getUpstream: () => {
26
- t.pass('getUpstream called')
27
- return `http://localhost:${target.address().port}`
28
- }
24
+ instance.get('/test', (_request, reply) => {
25
+ reply.from('/test', {
26
+ getUpstream: () => {
27
+ t.assert.ok('getUpstream called')
28
+ return `http://localhost:${target.address().port}`
29
+ }
30
+ })
29
31
  })
30
- })
31
32
 
32
- t.teardown(target.close.bind(target))
33
+ t.after(() => target.close())
33
34
 
34
- instance.listen({ port: 0 }, (err) => {
35
- t.error(err)
35
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
36
36
 
37
- target.listen({ port: 0 }, (err) => {
38
- t.error(err)
37
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
39
38
 
40
- get(`http://localhost:${instance.server.address().port}/test`, (err, res) => {
41
- t.error(err)
42
- t.equal(res.statusCode, 200)
43
- })
44
- })
39
+ const result = await request(`http://localhost:${instance.server.address().port}/test`)
40
+
41
+ t.assert.strictEqual(result.statusCode, 200)
45
42
  })
@@ -1,27 +1,27 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request, Agent } = require('undici')
5
6
  const From = require('..')
6
7
  const nock = require('nock')
7
- const got = require('got')
8
8
 
9
9
  test('hostname', async (t) => {
10
10
  const instance = Fastify()
11
- t.teardown(instance.close.bind(instance))
11
+ t.after(() => instance.close())
12
12
 
13
13
  nock('http://httpbin.org')
14
14
  .get('/ip')
15
15
  .reply(200, function () {
16
- t.equal(this.req.headers.host, 'httpbin.org')
16
+ t.assert.strictEqual(this.req.headers.host, 'httpbin.org')
17
17
  return { origin: '127.0.0.1' }
18
18
  })
19
19
 
20
20
  instance.get('*', (_request, reply) => {
21
21
  reply.from(null, {
22
22
  rewriteRequestHeaders: (originalReq, headers) => {
23
- t.equal(headers.host, 'httpbin.org')
24
- t.equal(originalReq.headers.host, `localhost:${instance.server.address().port}`)
23
+ t.assert.strictEqual(headers.host, 'httpbin.org')
24
+ t.assert.strictEqual(originalReq.headers.host, `localhost:${instance.server.address().port}`)
25
25
  return headers
26
26
  }
27
27
  })
@@ -34,22 +34,24 @@ test('hostname', async (t) => {
34
34
 
35
35
  await instance.listen({ port: 0 })
36
36
 
37
- const res = await got.get(`http://localhost:${instance.server.address().port}/ip`, {
38
- retry: 0
37
+ const res = await request(`http://localhost:${instance.server.address().port}/ip`, {
38
+ dispatcher: new Agent({
39
+ pipelining: 0
40
+ })
39
41
  })
40
- t.equal(res.statusCode, 200)
41
- t.equal(res.headers['content-type'], 'application/json')
42
- t.equal(typeof JSON.parse(res.body).origin, 'string')
42
+ t.assert.strictEqual(res.statusCode, 200)
43
+ t.assert.strictEqual(res.headers['content-type'], 'application/json')
44
+ t.assert.strictEqual(typeof (await res.body.json()).origin, 'string')
43
45
  })
44
46
 
45
47
  test('hostname and port', async (t) => {
46
48
  const instance = Fastify()
47
- t.teardown(instance.close.bind(instance))
49
+ t.after(() => instance.close())
48
50
 
49
51
  nock('http://httpbin.org:8080')
50
52
  .get('/ip')
51
53
  .reply(200, function () {
52
- t.equal(this.req.headers.host, 'httpbin.org:8080')
54
+ t.assert.strictEqual(this.req.headers.host, 'httpbin.org:8080')
53
55
  return { origin: '127.0.0.1' }
54
56
  })
55
57
 
@@ -64,10 +66,12 @@ test('hostname and port', async (t) => {
64
66
 
65
67
  await instance.listen({ port: 0 })
66
68
 
67
- const res = await got.get(`http://localhost:${instance.server.address().port}/ip`, {
68
- retry: 0
69
+ const res = await request(`http://localhost:${instance.server.address().port}/ip`, {
70
+ dispatcher: new Agent({
71
+ pipelining: 0
72
+ })
69
73
  })
70
- t.equal(res.statusCode, 200)
71
- t.equal(res.headers['content-type'], 'application/json')
72
- t.equal(typeof JSON.parse(res.body).origin, 'string')
74
+ t.assert.strictEqual(res.statusCode, 200)
75
+ t.assert.strictEqual(res.headers['content-type'], 'application/json')
76
+ t.assert.strictEqual(typeof (await res.body.json()).origin, 'string')
73
77
  })
@@ -1,35 +1,35 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
3
+ const t = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request } = require('undici')
5
6
  const From = require('..')
6
7
  const http = require('node:http')
7
8
  const https = require('node:https')
8
- const get = require('simple-get').concat
9
9
 
10
10
  const instance = Fastify()
11
11
 
12
- t.plan(10)
13
- t.teardown(instance.close.bind(instance))
14
-
15
- const target = http.createServer((req, res) => {
16
- t.pass('request proxied')
17
- t.equal(req.method, 'GET')
18
- t.equal(req.url, '/')
19
- res.statusCode = 205
20
- res.setHeader('Content-Type', 'text/plain')
21
- res.setHeader('x-my-header', 'hello!')
22
- res.end('hello world')
23
- })
12
+ t.test('http agents', async (t) => {
13
+ t.plan(7)
14
+ t.after(() => instance.close())
15
+
16
+ const target = http.createServer((req, res) => {
17
+ t.assert.ok('request proxied')
18
+ t.assert.strictEqual(req.method, 'GET')
19
+ t.assert.strictEqual(req.url, '/')
20
+ res.statusCode = 205
21
+ res.setHeader('Content-Type', 'text/plain')
22
+ res.setHeader('x-my-header', 'hello!')
23
+ res.end('hello world')
24
+ })
24
25
 
25
- instance.get('/', (_request, reply) => {
26
- reply.from()
27
- })
26
+ instance.get('/', (_request, reply) => {
27
+ reply.from()
28
+ })
28
29
 
29
- t.teardown(target.close.bind(target))
30
+ t.after(() => target.close())
30
31
 
31
- target.listen({ port: 0 }, (err) => {
32
- t.error(err)
32
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
33
33
 
34
34
  instance.register(From, {
35
35
  base: `http://localhost:${target.address().port}`,
@@ -41,15 +41,12 @@ target.listen({ port: 0 }, (err) => {
41
41
  }
42
42
  })
43
43
 
44
- instance.listen({ port: 0 }, (err) => {
45
- t.error(err)
44
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
46
45
 
47
- get(`http://localhost:${instance.server.address().port}`, (err, res, data) => {
48
- t.error(err)
49
- t.equal(res.headers['content-type'], 'text/plain')
50
- t.equal(res.headers['x-my-header'], 'hello!')
51
- t.equal(res.statusCode, 205)
52
- t.equal(data.toString(), 'hello world')
53
- })
54
- })
46
+ const result = await request(`http://localhost:${instance.server.address().port}`)
47
+
48
+ t.assert.strictEqual(result.headers['content-type'], 'text/plain')
49
+ t.assert.strictEqual(result.headers['x-my-header'], 'hello!')
50
+ t.assert.strictEqual(result.statusCode, 205)
51
+ t.assert.strictEqual(await result.body.text(), 'hello world')
55
52
  })
@@ -1,57 +1,44 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request } = require('undici')
5
6
  const From = require('..')
6
7
  const http = require('node:http')
7
- const get = require('simple-get').concat
8
8
 
9
9
  test('http global agent is used, but not destroyed', async (t) => {
10
10
  http.globalAgent.destroy = () => {
11
11
  t.fail()
12
12
  }
13
13
  const instance = Fastify()
14
- t.teardown(instance.close.bind(instance))
14
+ t.after(() => instance.close())
15
15
  instance.get('/', (_request, reply) => {
16
16
  reply.from()
17
17
  })
18
18
 
19
19
  const target = http.createServer((req, res) => {
20
- t.pass('request proxied')
21
- t.equal(req.method, 'GET')
22
- t.equal(req.url, '/')
20
+ t.assert.ok('request proxied')
21
+ t.assert.strictEqual(req.method, 'GET')
22
+ t.assert.strictEqual(req.url, '/')
23
23
  res.statusCode = 200
24
24
  res.end()
25
25
  })
26
- t.teardown(target.close.bind(target))
27
-
28
- const executionFlow = () => new Promise((resolve) => {
29
- target.listen({ port: 0 }, (err) => {
30
- t.error(err)
31
-
32
- instance.register(From, {
33
- base: `http://localhost:${target.address().port}`,
34
- globalAgent: true,
35
- http: {
36
- }
37
- })
38
-
39
- instance.listen({ port: 0 }, (err) => {
40
- t.error(err)
41
-
42
- get(
43
- `http://localhost:${instance.server.address().port}`,
44
- (err, res) => {
45
- t.error(err)
46
- t.equal(res.statusCode, 200)
47
- resolve()
48
- }
49
- )
50
- })
51
- })
26
+ t.after(() => target.close())
27
+
28
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
29
+
30
+ instance.register(From, {
31
+ base: `http://localhost:${target.address().port}`,
32
+ globalAgent: true,
33
+ http: {
34
+ }
52
35
  })
53
36
 
54
- await executionFlow()
37
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
38
+
39
+ const result = await request(`http://localhost:${instance.server.address().port}`)
40
+
41
+ t.assert.strictEqual(result.statusCode, 200)
55
42
 
56
43
  target.close()
57
44
  })
@@ -1,21 +1,21 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request, Agent } = require('undici')
5
6
  const From = require('..')
6
- const got = require('got')
7
7
 
8
8
  test('http -> http2', async (t) => {
9
9
  const instance = Fastify()
10
10
 
11
- t.teardown(instance.close.bind(instance))
11
+ t.after(() => instance.close())
12
12
 
13
13
  const target = Fastify({
14
14
  http2: true
15
15
  })
16
16
 
17
17
  target.get('/', (_request, reply) => {
18
- t.pass('request proxied')
18
+ t.assert.ok('request proxied')
19
19
  reply.code(404).header('x-my-header', 'hello!').send({
20
20
  hello: 'world'
21
21
  })
@@ -25,7 +25,7 @@ test('http -> http2', async (t) => {
25
25
  reply.from()
26
26
  })
27
27
 
28
- t.teardown(target.close.bind(target))
28
+ t.after(() => target.close())
29
29
 
30
30
  await target.listen({ port: 0 })
31
31
 
@@ -36,17 +36,12 @@ test('http -> http2', async (t) => {
36
36
 
37
37
  await instance.listen({ port: 0 })
38
38
 
39
- try {
40
- await got(`http://localhost:${instance.server.address().port}`)
41
- } catch (err) {
42
- t.equal(err.response.statusCode, 404)
43
- t.equal(err.response.headers['x-my-header'], 'hello!')
44
- t.match(err.response.headers['content-type'], /application\/json/)
45
- t.same(JSON.parse(err.response.body), { hello: 'world' })
46
- instance.close()
47
- target.close()
48
- return
49
- }
50
-
51
- t.fail()
39
+ const result = await request(`http://localhost:${instance.server.address().port}`, { dispatcher: new Agent({ pipelining: 0 }) })
40
+
41
+ t.assert.strictEqual(result.statusCode, 404)
42
+ t.assert.strictEqual(result.headers['x-my-header'], 'hello!')
43
+ t.assert.match(result.headers['content-type'], /application\/json/)
44
+ t.assert.deepStrictEqual(await result.body.json(), { hello: 'world' })
45
+ instance.close()
46
+ target.close()
52
47
  })
@@ -1,14 +1,14 @@
1
1
  'use strict'
2
2
 
3
- const { test } = require('tap')
3
+ const { test } = require('node:test')
4
4
  const Fastify = require('fastify')
5
+ const { request } = require('undici')
5
6
  const From = require('..')
6
- const got = require('got')
7
7
 
8
8
  test('http invalid target', async (t) => {
9
9
  const instance = Fastify()
10
10
 
11
- t.teardown(instance.close.bind(instance))
11
+ t.after(() => instance.close())
12
12
 
13
13
  instance.get('/', (_request, reply) => {
14
14
  reply.from()
@@ -19,18 +19,14 @@ test('http invalid target', async (t) => {
19
19
 
20
20
  await instance.listen({ port: 0 })
21
21
 
22
- try {
23
- await got(`http://localhost:${instance.server.address().port}`)
24
- } catch (err) {
25
- t.equal(err.response.statusCode, 503)
26
- t.match(err.response.headers['content-type'], /application\/json/)
27
- t.same(JSON.parse(err.response.body), {
28
- statusCode: 503,
29
- code: 'FST_REPLY_FROM_SERVICE_UNAVAILABLE',
30
- error: 'Service Unavailable',
31
- message: 'Service Unavailable'
32
- })
33
- return
34
- }
35
- t.fail()
22
+ const result = await request(`http://localhost:${instance.server.address().port}`)
23
+
24
+ t.assert.strictEqual(result.statusCode, 503)
25
+ t.assert.match(result.headers['content-type'], /application\/json/)
26
+ t.assert.deepStrictEqual(await result.body.json(), {
27
+ statusCode: 503,
28
+ code: 'FST_REPLY_FROM_SERVICE_UNAVAILABLE',
29
+ error: 'Service Unavailable',
30
+ message: 'Service Unavailable'
31
+ })
36
32
  })
@@ -1,9 +1,9 @@
1
1
  'use strict'
2
2
 
3
3
  const Fastify = require('fastify')
4
+ const { request, Agent } = require('undici')
4
5
  const From = require('..')
5
- const got = require('got')
6
- const { test } = require('tap')
6
+ const { test } = require('node:test')
7
7
 
8
8
  let retryNum = 1
9
9
 
@@ -20,10 +20,10 @@ const target = require('node:http').createServer(function (req, res) {
20
20
  })
21
21
 
22
22
  test('Will retry', async function (t) {
23
- t.teardown(() => { retryNum = 1 })
23
+ t.after(() => { retryNum = 1 })
24
24
 
25
25
  await target.listen({ port: 0 })
26
- t.teardown(target.close.bind(target))
26
+ t.after(() => target.close())
27
27
 
28
28
  const instance = Fastify()
29
29
 
@@ -33,24 +33,24 @@ test('Will retry', async function (t) {
33
33
  reply.from(`http://localhost:${target.address().port}/`, {
34
34
  retriesCount: 1,
35
35
  onError: (reply, { error }) => {
36
- t.equal(error.code, 'ECONNRESET')
36
+ t.assert.strictEqual(error.code, 'ECONNRESET')
37
37
  reply.send(error)
38
38
  }
39
39
  })
40
40
  })
41
41
 
42
42
  await instance.listen({ port: 0 })
43
- t.teardown(instance.close.bind(instance))
43
+ t.after(() => instance.close())
44
44
 
45
- const { statusCode } = await got.get(`http://localhost:${instance.server.address().port}/`, { retry: 0 })
46
- t.equal(statusCode, 200)
45
+ const { statusCode } = await request(`http://localhost:${instance.server.address().port}/`, { dispatcher: new Agent({ pipelining: 0 }) })
46
+ t.assert.strictEqual(statusCode, 200)
47
47
  })
48
48
 
49
49
  test('will not retry', async function (t) {
50
- t.teardown(() => { retryNum = 1 })
50
+ t.after(() => { retryNum = 1 })
51
51
 
52
52
  await target.listen({ port: 0 })
53
- t.teardown(target.close.bind(target))
53
+ t.after(() => target.close())
54
54
 
55
55
  const instance = Fastify()
56
56
 
@@ -60,28 +60,25 @@ test('will not retry', async function (t) {
60
60
  reply.from(`http://localhost:${target.address().port}/`, {
61
61
  retriesCount: 0,
62
62
  onError: (reply, { error }) => {
63
- t.equal(error.code, 'ECONNRESET')
63
+ t.assert.strictEqual(error.code, 'ECONNRESET')
64
64
  reply.send(error)
65
65
  }
66
66
  })
67
67
  })
68
68
 
69
69
  await instance.listen({ port: 0 })
70
- t.teardown(instance.close.bind(instance))
70
+ t.after(() => instance.close())
71
71
 
72
- try {
73
- await got.get(`http://localhost:${instance.server.address().port}/`, { retry: 0 })
74
- t.fail()
75
- } catch (err) {
76
- t.equal(err.response.statusCode, 500)
77
- }
72
+ const result = await request(`http://localhost:${instance.server.address().port}/`, { dispatcher: new Agent({ pipelining: 0 }) })
73
+
74
+ t.assert.strictEqual(result.statusCode, 500)
78
75
  })
79
76
 
80
77
  test('will not retry unsupported method', async function (t) {
81
- t.teardown(() => { retryNum = 1 })
78
+ t.after(() => { retryNum = 1 })
82
79
 
83
- await target.listen({ port: 0 })
84
- t.teardown(target.close.bind(target))
80
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
81
+ t.after(() => target.close())
85
82
 
86
83
  const instance = Fastify()
87
84
 
@@ -91,19 +88,15 @@ test('will not retry unsupported method', async function (t) {
91
88
  reply.from(`http://localhost:${target.address().port}/`, {
92
89
  retriesCount: 1,
93
90
  onError: (reply, { error }) => {
94
- t.equal(error.code, 'ECONNRESET')
91
+ t.assert.strictEqual(error.code, 'ECONNRESET')
95
92
  reply.send(error)
96
93
  }
97
94
  })
98
95
  })
99
96
 
100
97
  await instance.listen({ port: 0 })
101
- t.teardown(instance.close.bind(instance))
98
+ t.after(() => instance.close())
102
99
 
103
- try {
104
- await got.get(`http://localhost:${instance.server.address().port}/`, { retry: 0 })
105
- t.fail()
106
- } catch (err) {
107
- t.equal(err.response.statusCode, 500)
108
- }
100
+ const result = await request(`http://localhost:${instance.server.address().port}/`, { dispatcher: new Agent({ pipelining: 0 }) })
101
+ t.assert.strictEqual(result.statusCode, 500)
109
102
  })