@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,10 +1,10 @@
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 fastifyReplyFrom = 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(fastifyReplyFrom)
@@ -12,51 +12,47 @@ instance.register(fastifyReplyFrom)
12
12
  const payload = { hello: 'world' }
13
13
  const msgPackPayload = Buffer.from([0x81, 0xa5, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0xa5, 0x77, 0x6f, 0x72, 0x6c, 0x64])
14
14
 
15
- t.plan(9)
16
- t.teardown(instance.close.bind(instance))
17
-
18
- const target = http.createServer((req, res) => {
19
- t.pass('request proxied')
20
- t.equal(req.method, 'POST')
21
- t.equal(req.headers['content-type'], 'application/msgpack')
22
- const data = []
23
- req.on('data', (d) => {
24
- data.push(d)
25
- })
26
- req.on('end', () => {
27
- t.same(Buffer.concat(data), msgPackPayload)
28
- res.statusCode = 200
29
- res.setHeader('content-type', 'application/json')
30
- res.end(JSON.stringify({ something: 'else' }))
15
+ t.test('full rewrite body content-type', async (t) => {
16
+ t.plan(6)
17
+ t.after(() => instance.close())
18
+
19
+ const target = http.createServer((req, res) => {
20
+ t.assert.ok('request proxied')
21
+ t.assert.strictEqual(req.method, 'POST')
22
+ t.assert.strictEqual(req.headers['content-type'], 'application/msgpack')
23
+ const data = []
24
+ req.on('data', (d) => {
25
+ data.push(d)
26
+ })
27
+ req.on('end', () => {
28
+ t.assert.deepStrictEqual(Buffer.concat(data), msgPackPayload)
29
+ res.statusCode = 200
30
+ res.setHeader('content-type', 'application/json')
31
+ res.end(JSON.stringify({ something: 'else' }))
32
+ })
31
33
  })
32
- })
33
34
 
34
- instance.post('/', (request, reply) => {
35
- t.same(request.body, payload)
36
- reply.from(`http://localhost:${target.address().port}`, {
37
- contentType: 'application/msgpack',
38
- body: msgPackPayload
35
+ instance.post('/', (request, reply) => {
36
+ t.assert.deepStrictEqual(request.body, payload)
37
+ reply.from(`http://localhost:${target.address().port}`, {
38
+ contentType: 'application/msgpack',
39
+ body: msgPackPayload
40
+ })
39
41
  })
40
- })
41
42
 
42
- t.teardown(target.close.bind(target))
43
+ t.after(() => target.close())
43
44
 
44
- instance.listen({ port: 0 }, (err) => {
45
- t.error(err)
45
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
46
46
 
47
- target.listen({ port: 0 }, (err) => {
48
- t.error(err)
47
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
49
48
 
50
- get({
51
- url: `http://localhost:${instance.server.address().port}`,
52
- method: 'POST',
53
- json: true,
54
- body: {
55
- hello: 'world'
56
- }
57
- }, (err, _res, data) => {
58
- t.error(err)
59
- t.same(data, { something: 'else' })
60
- })
49
+ const result = await request(`http://localhost:${instance.server.address().port}`, {
50
+ method: 'POST',
51
+ headers: {
52
+ 'content-type': 'application/json'
53
+ },
54
+ body: JSON.stringify({ hello: 'world' }),
61
55
  })
56
+
57
+ t.assert.deepStrictEqual(await result.body.json(), { something: 'else' })
62
58
  })
@@ -1,63 +1,59 @@
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
  http: true
12
12
  })
13
13
 
14
- t.plan(9)
15
- t.teardown(instance.close.bind(instance))
16
-
17
- const target = http.createServer((req, res) => {
18
- t.pass('request proxied')
19
- t.equal(req.method, 'POST')
20
- t.equal(req.headers['content-type'], 'application/json')
21
- t.equal(req.headers['content-length'], '20')
22
- let data = ''
23
- req.setEncoding('utf8')
24
- req.on('data', (d) => {
25
- data += d
26
- })
27
- req.on('end', () => {
28
- t.same(JSON.parse(data), { something: 'else' })
29
- res.statusCode = 200
30
- res.setHeader('content-type', 'application/json')
31
- res.end(JSON.stringify({ hello: 'fastify' }))
14
+ t.test('full rewrite body', async (t) => {
15
+ t.plan(6)
16
+ t.after(() => instance.close())
17
+
18
+ const target = http.createServer((req, res) => {
19
+ t.assert.ok('request proxied')
20
+ t.assert.strictEqual(req.method, 'POST')
21
+ t.assert.strictEqual(req.headers['content-type'], 'application/json')
22
+ t.assert.strictEqual(req.headers['content-length'], '20')
23
+ let data = ''
24
+ req.setEncoding('utf8')
25
+ req.on('data', (d) => {
26
+ data += d
27
+ })
28
+ req.on('end', () => {
29
+ t.assert.deepStrictEqual(JSON.parse(data), { something: 'else' })
30
+ res.statusCode = 200
31
+ res.setHeader('content-type', 'application/json')
32
+ res.end(JSON.stringify({ hello: 'fastify' }))
33
+ })
32
34
  })
33
- })
34
35
 
35
- instance.post('/', (_request, reply) => {
36
- reply.from(`http://localhost:${target.address().port}`, {
37
- body: {
38
- something: 'else'
39
- }
36
+ instance.post('/', (_request, reply) => {
37
+ reply.from(`http://localhost:${target.address().port}`, {
38
+ body: {
39
+ something: 'else'
40
+ }
41
+ })
40
42
  })
41
- })
42
43
 
43
- t.teardown(target.close.bind(target))
44
+ t.after(() => target.close())
44
45
 
45
- instance.listen({ port: 0 }, (err) => {
46
- t.error(err)
46
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
47
47
 
48
- target.listen({ port: 0 }, (err) => {
49
- t.error(err)
48
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
50
49
 
51
- get({
52
- url: `http://localhost:${instance.server.address().port}`,
53
- method: 'POST',
54
- json: true,
55
- body: {
56
- hello: 'world'
57
- }
58
- }, (err, _res, data) => {
59
- t.error(err)
60
- t.same(data, { hello: 'fastify' })
61
- })
50
+ const result = await request(`http://localhost:${instance.server.address().port}`, {
51
+ method: 'POST',
52
+ headers: {
53
+ 'content-type': 'application/json'
54
+ },
55
+ body: JSON.stringify({ hello: 'world' }),
62
56
  })
57
+
58
+ t.assert.deepStrictEqual(await result.body.json(), { hello: 'fastify' })
63
59
  })
@@ -1,61 +1,57 @@
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
  http: true
12
12
  })
13
13
 
14
- t.plan(9)
15
- t.teardown(instance.close.bind(instance))
16
-
17
- const target = http.createServer((req, res) => {
18
- t.pass('request proxied')
19
- t.equal(req.method, 'POST')
20
- t.equal(req.headers['content-type'], 'application/json')
21
- t.equal(req.headers['content-length'], '2')
22
- let data = ''
23
- req.setEncoding('utf8')
24
- req.on('data', (d) => {
25
- data += d
26
- })
27
- req.on('end', () => {
28
- t.same(JSON.parse(data), '')
29
- res.statusCode = 200
30
- res.setHeader('content-type', 'application/json')
31
- res.end(JSON.stringify({ hello: 'fastify' }))
14
+ t.test('full rewrite body to empty string', async (t) => {
15
+ t.plan(6)
16
+ t.after(() => instance.close())
17
+
18
+ const target = http.createServer((req, res) => {
19
+ t.assert.ok('request proxied')
20
+ t.assert.strictEqual(req.method, 'POST')
21
+ t.assert.strictEqual(req.headers['content-type'], 'application/json')
22
+ t.assert.strictEqual(req.headers['content-length'], '2')
23
+ let data = ''
24
+ req.setEncoding('utf8')
25
+ req.on('data', (d) => {
26
+ data += d
27
+ })
28
+ req.on('end', () => {
29
+ t.assert.deepStrictEqual(JSON.parse(data), '')
30
+ res.statusCode = 200
31
+ res.setHeader('content-type', 'application/json')
32
+ res.end(JSON.stringify({ hello: 'fastify' }))
33
+ })
32
34
  })
33
- })
34
35
 
35
- instance.post('/', (_request, reply) => {
36
- reply.from(`http://localhost:${target.address().port}`, {
37
- body: ''
36
+ instance.post('/', (_request, reply) => {
37
+ reply.from(`http://localhost:${target.address().port}`, {
38
+ body: ''
39
+ })
38
40
  })
39
- })
40
41
 
41
- t.teardown(target.close.bind(target))
42
+ t.after(() => target.close())
42
43
 
43
- instance.listen({ port: 0 }, (err) => {
44
- t.error(err)
44
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
45
45
 
46
- target.listen({ port: 0 }, (err) => {
47
- t.error(err)
46
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
48
47
 
49
- get({
50
- url: `http://localhost:${instance.server.address().port}`,
51
- method: 'POST',
52
- json: true,
53
- body: {
54
- hello: 'world'
55
- }
56
- }, (err, _res, data) => {
57
- t.error(err)
58
- t.same(data, { hello: 'fastify' })
59
- })
48
+ const result = await request(`http://localhost:${instance.server.address().port}`, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'content-type': 'application/json'
52
+ },
53
+ body: JSON.stringify({ hello: 'world' }),
60
54
  })
55
+
56
+ t.assert.deepStrictEqual(await result.body.json(), { hello: 'fastify' })
61
57
  })
@@ -1,61 +1,57 @@
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
  http: true
12
12
  })
13
13
 
14
- t.plan(9)
15
- t.teardown(instance.close.bind(instance))
16
-
17
- const target = http.createServer((req, res) => {
18
- t.pass('request proxied')
19
- t.equal(req.method, 'POST')
20
- t.notOk('content-type' in req.headers)
21
- t.equal(req.headers['content-length'], '0')
22
- let data = ''
23
- req.setEncoding('utf8')
24
- req.on('data', (d) => {
25
- data += d
26
- })
27
- req.on('end', () => {
28
- t.equal(data.length, 0)
29
- res.statusCode = 200
30
- res.setHeader('content-type', 'application/json')
31
- res.end(JSON.stringify({ hello: 'fastify' }))
14
+ t.test('full rewrite body to null', async (t) => {
15
+ t.plan(6)
16
+ t.after(() => instance.close())
17
+
18
+ const target = http.createServer((req, res) => {
19
+ t.assert.ok('request proxied')
20
+ t.assert.strictEqual(req.method, 'POST')
21
+ t.assert.ok(!('content-type' in req.headers))
22
+ t.assert.strictEqual(req.headers['content-length'], '0')
23
+ let data = ''
24
+ req.setEncoding('utf8')
25
+ req.on('data', (d) => {
26
+ data += d
27
+ })
28
+ req.on('end', () => {
29
+ t.assert.strictEqual(data.length, 0)
30
+ res.statusCode = 200
31
+ res.setHeader('content-type', 'application/json')
32
+ res.end(JSON.stringify({ hello: 'fastify' }))
33
+ })
32
34
  })
33
- })
34
35
 
35
- instance.post('/', (_request, reply) => {
36
- reply.from(`http://localhost:${target.address().port}`, {
37
- body: null
36
+ instance.post('/', (_request, reply) => {
37
+ reply.from(`http://localhost:${target.address().port}`, {
38
+ body: null
39
+ })
38
40
  })
39
- })
40
41
 
41
- t.teardown(target.close.bind(target))
42
+ t.after(() => target.close())
42
43
 
43
- instance.listen({ port: 0 }, (err) => {
44
- t.error(err)
44
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
45
45
 
46
- target.listen({ port: 0 }, (err) => {
47
- t.error(err)
46
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
48
47
 
49
- get({
50
- url: `http://localhost:${instance.server.address().port}`,
51
- method: 'POST',
52
- json: true,
53
- body: {
54
- hello: 'world'
55
- }
56
- }, (err, _res, data) => {
57
- t.error(err)
58
- t.same(data, { hello: 'fastify' })
59
- })
48
+ const result = await request(`http://localhost:${instance.server.address().port}`, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'content-type': 'application/json'
52
+ },
53
+ body: JSON.stringify({ hello: 'world' }),
60
54
  })
55
+
56
+ t.assert.deepStrictEqual(await result.body.json(), { hello: 'fastify' })
61
57
  })
@@ -1,61 +1,57 @@
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
 
12
- t.plan(9)
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, 'POST')
18
- t.equal(req.headers['content-type'], 'application/json')
19
- t.equal(req.headers['content-length'], '20')
20
- let data = ''
21
- req.setEncoding('utf8')
22
- req.on('data', (d) => {
23
- data += d
24
- })
25
- req.on('end', () => {
26
- t.same(JSON.parse(data), { something: 'else' })
27
- res.statusCode = 200
28
- res.setHeader('content-type', 'application/json')
29
- res.end(JSON.stringify({ hello: 'fastify' }))
12
+ t.test('full rewrite body', async (t) => {
13
+ t.plan(6)
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, 'POST')
19
+ t.assert.strictEqual(req.headers['content-type'], 'application/json')
20
+ t.assert.strictEqual(req.headers['content-length'], '20')
21
+ let data = ''
22
+ req.setEncoding('utf8')
23
+ req.on('data', (d) => {
24
+ data += d
25
+ })
26
+ req.on('end', () => {
27
+ t.assert.deepStrictEqual(JSON.parse(data), { something: 'else' })
28
+ res.statusCode = 200
29
+ res.setHeader('content-type', 'application/json')
30
+ res.end(JSON.stringify({ hello: 'fastify' }))
31
+ })
30
32
  })
31
- })
32
33
 
33
- instance.post('/', (_request, reply) => {
34
- reply.from(`http://localhost:${target.address().port}`, {
35
- body: {
36
- something: 'else'
37
- }
34
+ instance.post('/', (_request, reply) => {
35
+ reply.from(`http://localhost:${target.address().port}`, {
36
+ body: {
37
+ something: 'else'
38
+ }
39
+ })
38
40
  })
39
- })
40
41
 
41
- t.teardown(target.close.bind(target))
42
+ t.after(() => target.close())
42
43
 
43
- instance.listen({ port: 0 }, (err) => {
44
- t.error(err)
44
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
45
45
 
46
- target.listen({ port: 0 }, (err) => {
47
- t.error(err)
46
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
48
47
 
49
- get({
50
- url: `http://localhost:${instance.server.address().port}`,
51
- method: 'POST',
52
- json: true,
53
- body: {
54
- hello: 'world'
55
- }
56
- }, (err, _res, data) => {
57
- t.error(err)
58
- t.same(data, { hello: 'fastify' })
59
- })
48
+ const result = await request(`http://localhost:${instance.server.address().port}`, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'content-type': 'application/json'
52
+ },
53
+ body: JSON.stringify({ hello: 'world' }),
60
54
  })
55
+
56
+ t.assert.deepStrictEqual(await result.body.json(), { hello: 'fastify' })
61
57
  })
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const t = require('tap')
3
+ const t = require('node:test')
4
4
  const Fastify = require('fastify')
5
5
  const From = require('..')
6
6
 
@@ -13,13 +13,11 @@ async function createTarget (i) {
13
13
  return `Hello from target ${i}`
14
14
  })
15
15
 
16
- t.teardown(() => target.close())
16
+ t.after(() => target.close())
17
17
  await target.listen({ port: 3000 + i })
18
18
  }
19
19
 
20
- t.plan(4)
21
-
22
- async function run () {
20
+ async function run (t) {
23
21
  await Promise.all([
24
22
  createTarget(1),
25
23
  createTarget(2)
@@ -45,7 +43,7 @@ async function run () {
45
43
  })
46
44
  })
47
45
 
48
- t.teardown(() => instance.close())
46
+ t.after(() => instance.close())
49
47
  await instance.listen({ port: 3000 })
50
48
 
51
49
  const res1 = await instance.inject({
@@ -55,8 +53,8 @@ async function run () {
55
53
  'x-host-number': 1
56
54
  }
57
55
  })
58
- t.equal(res1.statusCode, 200)
59
- t.equal(res1.body, 'Hello from target 1')
56
+ t.assert.strictEqual(res1.statusCode, 200)
57
+ t.assert.strictEqual(res1.body, 'Hello from target 1')
60
58
 
61
59
  const res2 = await instance.inject({
62
60
  method: 'GET',
@@ -65,8 +63,11 @@ async function run () {
65
63
  'x-host-number': 2
66
64
  }
67
65
  })
68
- t.equal(res2.statusCode, 200)
69
- t.equal(res2.body, 'Hello from target 2')
66
+ t.assert.strictEqual(res2.statusCode, 200)
67
+ t.assert.strictEqual(res2.body, 'Hello from target 2')
70
68
  }
71
69
 
72
- run()
70
+ t.test('get-upstream-cache', async (t) => {
71
+ t.plan(4)
72
+ await run(t)
73
+ })
@@ -1,10 +1,10 @@
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
  const instanceWithoutBase = Fastify()
@@ -19,52 +19,46 @@ instanceWithoutBase.register(From, {
19
19
  disableCache: true
20
20
  })
21
21
 
22
- t.plan(13)
23
- t.teardown(instance.close.bind(instance))
24
- t.teardown(instanceWithoutBase.close.bind(instanceWithoutBase))
22
+ t.test('getUpstream http', async (t) => {
23
+ t.plan(8)
24
+ t.after(() => instance.close())
25
+ t.after(() => instanceWithoutBase.close())
25
26
 
26
- const target = http.createServer((req, res) => {
27
- t.pass('request proxied')
28
- t.equal(req.method, 'GET')
29
- res.end(req.headers.host)
30
- })
27
+ const target = http.createServer((req, res) => {
28
+ t.assert.ok('request proxied')
29
+ t.assert.strictEqual(req.method, 'GET')
30
+ res.end(req.headers.host)
31
+ })
31
32
 
32
- instance.get('/test', (_request, reply) => {
33
- reply.from('/test', {
34
- getUpstream: (_req, base) => {
35
- t.pass('getUpstream called')
36
- return `${base}:${target.address().port}`
37
- }
33
+ instance.get('/test', (_request, reply) => {
34
+ reply.from('/test', {
35
+ getUpstream: (_req, base) => {
36
+ t.assert.ok('getUpstream called')
37
+ return `${base}:${target.address().port}`
38
+ }
39
+ })
38
40
  })
39
- })
40
41
 
41
- instanceWithoutBase.get('/test2', (_request, reply) => {
42
- reply.from('/test2', {
43
- getUpstream: () => {
44
- t.pass('getUpstream called')
45
- return `http://localhost:${target.address().port}`
46
- }
42
+ instanceWithoutBase.get('/test2', (_request, reply) => {
43
+ reply.from('/test2', {
44
+ getUpstream: () => {
45
+ t.assert.ok('getUpstream called')
46
+ return `http://localhost:${target.address().port}`
47
+ }
48
+ })
47
49
  })
48
- })
49
50
 
50
- t.teardown(target.close.bind(target))
51
+ t.after(() => target.close())
51
52
 
52
- instance.listen({ port: 0 }, (err) => {
53
- t.error(err)
54
- instanceWithoutBase.listen({ port: 0 }, (err) => {
55
- t.error(err)
56
- target.listen({ port: 0 }, (err) => {
57
- t.error(err)
53
+ await new Promise(resolve => instance.listen({ port: 0 }, resolve))
58
54
 
59
- get(`http://localhost:${instance.server.address().port}/test`, (err, res) => {
60
- t.error(err)
61
- t.equal(res.statusCode, 200)
62
- })
55
+ await new Promise(resolve => instanceWithoutBase.listen({ port: 0 }, resolve))
63
56
 
64
- get(`http://localhost:${instanceWithoutBase.server.address().port}/test2`, (err, res) => {
65
- t.error(err)
66
- t.equal(res.statusCode, 200)
67
- })
68
- })
69
- })
57
+ await new Promise(resolve => target.listen({ port: 0 }, resolve))
58
+
59
+ const result = await request(`http://localhost:${instance.server.address().port}/test`)
60
+ t.assert.strictEqual(result.statusCode, 200)
61
+
62
+ const result1 = await request(`http://localhost:${instanceWithoutBase.server.address().port}/test2`)
63
+ t.assert.strictEqual(result1.statusCode, 200)
70
64
  })