1
1
'use strict'
2
2
3
- const { test } = require ( 'tap ' )
3
+ const { test } = require ( 'node:test ' )
4
4
const { AbortController : NPMAbortController } = require ( 'abort-controller' )
5
- const { Client, errors } = require ( '..' )
5
+ const { Client, errors } = require ( '../.. ' )
6
6
const { createServer } = require ( 'http' )
7
7
const { createReadStream } = require ( 'fs' )
8
- const { wrapWithAsyncIterable } = require ( './utils/async-iterators' )
8
+ const { wrapWithAsyncIterable } = require ( '../utils/async-iterators' )
9
+ const { tspl } = require ( '@matteo.collina/tspl' )
9
10
10
11
const controllers = [ {
11
12
AbortControllerImpl : NPMAbortController ,
@@ -19,87 +20,93 @@ if (global.AbortController) {
19
20
} )
20
21
}
21
22
for ( const { AbortControllerImpl, controllerName } of controllers ) {
22
- test ( `Abort ${ controllerName } before creating request` , ( t ) => {
23
- t . plan ( 1 )
23
+ test ( `Abort ${ controllerName } before creating request` , async ( t ) => {
24
+ const p = tspl ( t , { plan : 1 } )
24
25
25
26
const server = createServer ( ( req , res ) => {
26
- t . fail ( )
27
+ p . fail ( )
27
28
} )
28
- t . teardown ( server . close . bind ( server ) )
29
+ t . after ( server . close . bind ( server ) )
29
30
30
31
server . listen ( 0 , ( ) => {
31
32
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
32
33
const abortController = new AbortControllerImpl ( )
33
- t . teardown ( client . destroy . bind ( client ) )
34
+ t . after ( client . destroy . bind ( client ) )
34
35
35
36
abortController . abort ( )
36
37
37
38
client . request ( { path : '/' , method : 'GET' , signal : abortController . signal } , ( err , response ) => {
38
- t . type ( err , errors . RequestAbortedError )
39
+ p . ok ( err instanceof errors . RequestAbortedError )
39
40
} )
40
41
} )
42
+
43
+ await p . completed
41
44
} )
42
45
43
- test ( `Abort ${ controllerName } before sending request (no body)` , ( t ) => {
44
- t . plan ( 3 )
46
+ test ( `Abort ${ controllerName } before sending request (no body)` , async ( t ) => {
47
+ const p = tspl ( t , { plan : 3 } )
45
48
46
49
let count = 0
47
50
const server = createServer ( ( req , res ) => {
48
51
if ( count === 1 ) {
49
- t . fail ( 'The second request should never be executed' )
52
+ p . fail ( 'The second request should never be executed' )
50
53
}
51
54
count += 1
52
55
res . end ( 'hello' )
53
56
} )
54
- t . teardown ( server . close . bind ( server ) )
57
+ t . after ( server . close . bind ( server ) )
55
58
56
59
server . listen ( 0 , ( ) => {
57
60
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
58
61
const abortController = new AbortControllerImpl ( )
59
- t . teardown ( client . destroy . bind ( client ) )
62
+ t . after ( client . destroy . bind ( client ) )
60
63
61
64
client . request ( { path : '/' , method : 'GET' } , ( err , response ) => {
62
- t . error ( err )
65
+ p . ifError ( err )
63
66
const bufs = [ ]
64
67
response . body . on ( 'data' , ( buf ) => {
65
68
bufs . push ( buf )
66
69
} )
67
70
response . body . on ( 'end' , ( ) => {
68
- t . equal ( 'hello' , Buffer . concat ( bufs ) . toString ( 'utf8' ) )
71
+ p . strictEqual ( 'hello' , Buffer . concat ( bufs ) . toString ( 'utf8' ) )
69
72
} )
70
73
} )
71
74
72
75
client . request ( { path : '/' , method : 'GET' , signal : abortController . signal } , ( err , response ) => {
73
- t . type ( err , errors . RequestAbortedError )
76
+ p . ok ( err instanceof errors . RequestAbortedError )
74
77
} )
75
78
76
79
abortController . abort ( )
77
80
} )
81
+
82
+ await p . completed
78
83
} )
79
84
80
- test ( `Abort ${ controllerName } while waiting response (no body)` , ( t ) => {
81
- t . plan ( 1 )
85
+ test ( `Abort ${ controllerName } while waiting response (no body)` , async ( t ) => {
86
+ const p = tspl ( t , { plan : 1 } )
82
87
83
88
const abortController = new AbortControllerImpl ( )
84
89
const server = createServer ( ( req , res ) => {
85
90
abortController . abort ( )
86
91
res . setHeader ( 'content-type' , 'text/plain' )
87
92
res . end ( 'hello world' )
88
93
} )
89
- t . teardown ( server . close . bind ( server ) )
94
+ t . after ( server . close . bind ( server ) )
90
95
91
96
server . listen ( 0 , ( ) => {
92
97
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
93
- t . teardown ( client . destroy . bind ( client ) )
98
+ t . after ( client . destroy . bind ( client ) )
94
99
95
100
client . request ( { path : '/' , method : 'GET' , signal : abortController . signal } , ( err , response ) => {
96
- t . type ( err , errors . RequestAbortedError )
101
+ p . ok ( err instanceof errors . RequestAbortedError )
97
102
} )
98
103
} )
104
+
105
+ await p . completed
99
106
} )
100
107
101
- test ( `Abort ${ controllerName } while waiting response (write headers started) (no body)` , ( t ) => {
102
- t . plan ( 1 )
108
+ test ( `Abort ${ controllerName } while waiting response (write headers started) (no body)` , async ( t ) => {
109
+ const p = tspl ( t , { plan : 1 } )
103
110
104
111
const abortController = new AbortControllerImpl ( )
105
112
const server = createServer ( ( req , res ) => {
@@ -108,64 +115,69 @@ for (const { AbortControllerImpl, controllerName } of controllers) {
108
115
abortController . abort ( )
109
116
res . end ( 'hello world' )
110
117
} )
111
- t . teardown ( server . close . bind ( server ) )
118
+ t . after ( server . close . bind ( server ) )
112
119
113
120
server . listen ( 0 , ( ) => {
114
121
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
115
- t . teardown ( client . destroy . bind ( client ) )
122
+ t . after ( client . destroy . bind ( client ) )
116
123
117
124
client . request ( { path : '/' , method : 'GET' , signal : abortController . signal } , ( err , response ) => {
118
- t . type ( err , errors . RequestAbortedError )
125
+ p . ok ( err instanceof errors . RequestAbortedError )
119
126
} )
120
127
} )
128
+
129
+ await p . completed
121
130
} )
122
131
123
- test ( `Abort ${ controllerName } while waiting response (write headers and write body started) (no body)` , ( t ) => {
124
- t . plan ( 2 )
132
+ test ( `Abort ${ controllerName } while waiting response (write headers and write body started) (no body)` , async ( t ) => {
133
+ const p = tspl ( t , { plan : 2 } )
125
134
126
135
const abortController = new AbortControllerImpl ( )
127
136
const server = createServer ( ( req , res ) => {
128
137
res . writeHead ( 200 , { 'content-type' : 'text/plain' } )
129
138
res . write ( 'hello' )
130
139
} )
131
- t . teardown ( server . close . bind ( server ) )
140
+ t . after ( server . close . bind ( server ) )
132
141
133
142
server . listen ( 0 , ( ) => {
134
143
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
135
- t . teardown ( client . destroy . bind ( client ) )
144
+ t . after ( client . destroy . bind ( client ) )
136
145
137
146
client . request ( { path : '/' , method : 'GET' , signal : abortController . signal } , ( err , response ) => {
138
- t . error ( err )
147
+ p . ifError ( err )
139
148
response . body . on ( 'data' , ( ) => {
140
149
abortController . abort ( )
141
150
} )
142
151
response . body . on ( 'error' , err => {
143
- t . type ( err , errors . RequestAbortedError )
152
+ p . ok ( err instanceof errors . RequestAbortedError )
144
153
} )
145
154
} )
146
155
} )
156
+
157
+ await p . completed
147
158
} )
148
159
149
160
function waitingWithBody ( body , type ) { // eslint-disable-line
150
- test ( `Abort ${ controllerName } while waiting response (with body ${ type } )` , ( t ) => {
151
- t . plan ( 1 )
161
+ test ( `Abort ${ controllerName } while waiting response (with body ${ type } )` , async ( t ) => {
162
+ const p = tspl ( t , { plan : 1 } )
152
163
153
164
const abortController = new AbortControllerImpl ( )
154
165
const server = createServer ( ( req , res ) => {
155
166
abortController . abort ( )
156
167
res . setHeader ( 'content-type' , 'text/plain' )
157
168
res . end ( 'hello world' )
158
169
} )
159
- t . teardown ( server . close . bind ( server ) )
170
+ t . after ( server . close . bind ( server ) )
160
171
161
172
server . listen ( 0 , ( ) => {
162
173
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
163
- t . teardown ( client . destroy . bind ( client ) )
174
+ t . after ( client . destroy . bind ( client ) )
164
175
165
176
client . request ( { path : '/' , method : 'POST' , body, signal : abortController . signal } , ( err , response ) => {
166
- t . type ( err , errors . RequestAbortedError )
177
+ p . ok ( err instanceof errors . RequestAbortedError )
167
178
} )
168
179
} )
180
+ await p . completed
169
181
} )
170
182
}
171
183
@@ -175,8 +187,8 @@ for (const { AbortControllerImpl, controllerName } of controllers) {
175
187
waitingWithBody ( wrapWithAsyncIterable ( createReadStream ( __filename ) ) , 'async-iterator' )
176
188
177
189
function writeHeadersStartedWithBody ( body , type ) { // eslint-disable-line
178
- test ( `Abort ${ controllerName } while waiting response (write headers started) (with body ${ type } )` , ( t ) => {
179
- t . plan ( 1 )
190
+ test ( `Abort ${ controllerName } while waiting response (write headers started) (with body ${ type } )` , async ( t ) => {
191
+ const p = tspl ( t , { plan : 1 } )
180
192
181
193
const abortController = new AbortControllerImpl ( )
182
194
const server = createServer ( ( req , res ) => {
@@ -185,16 +197,17 @@ for (const { AbortControllerImpl, controllerName } of controllers) {
185
197
abortController . abort ( )
186
198
res . end ( 'hello world' )
187
199
} )
188
- t . teardown ( server . close . bind ( server ) )
200
+ t . after ( server . close . bind ( server ) )
189
201
190
202
server . listen ( 0 , ( ) => {
191
203
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
192
- t . teardown ( client . destroy . bind ( client ) )
204
+ t . after ( client . destroy . bind ( client ) )
193
205
194
206
client . request ( { path : '/' , method : 'POST' , body, signal : abortController . signal } , ( err , response ) => {
195
- t . type ( err , errors . RequestAbortedError )
207
+ p . ok ( err instanceof errors . RequestAbortedError )
196
208
} )
197
209
} )
210
+ await p . completed
198
211
} )
199
212
}
200
213
@@ -204,30 +217,31 @@ for (const { AbortControllerImpl, controllerName } of controllers) {
204
217
writeHeadersStartedWithBody ( wrapWithAsyncIterable ( createReadStream ( __filename ) ) , 'async-iterator' )
205
218
206
219
function writeBodyStartedWithBody ( body , type ) { // eslint-disable-line
207
- test ( `Abort ${ controllerName } while waiting response (write headers and write body started) (with body ${ type } )` , ( t ) => {
208
- t . plan ( 2 )
220
+ test ( `Abort ${ controllerName } while waiting response (write headers and write body started) (with body ${ type } )` , async ( t ) => {
221
+ const p = tspl ( t , { plan : 2 } )
209
222
210
223
const abortController = new AbortControllerImpl ( )
211
224
const server = createServer ( ( req , res ) => {
212
225
res . writeHead ( 200 , { 'content-type' : 'text/plain' } )
213
226
res . write ( 'hello' )
214
227
} )
215
- t . teardown ( server . close . bind ( server ) )
228
+ t . after ( server . close . bind ( server ) )
216
229
217
230
server . listen ( 0 , ( ) => {
218
231
const client = new Client ( `http://localhost:${ server . address ( ) . port } ` )
219
- t . teardown ( client . destroy . bind ( client ) )
232
+ t . after ( client . destroy . bind ( client ) )
220
233
221
234
client . request ( { path : '/' , method : 'POST' , body, signal : abortController . signal } , ( err , response ) => {
222
- t . error ( err )
235
+ p . ifError ( err )
223
236
response . body . on ( 'data' , ( ) => {
224
237
abortController . abort ( )
225
238
} )
226
239
response . body . on ( 'error' , err => {
227
- t . type ( err , errors . RequestAbortedError )
240
+ p . ok ( err instanceof errors . RequestAbortedError )
228
241
} )
229
242
} )
230
243
} )
244
+ await p . completed
231
245
} )
232
246
}
233
247
0 commit comments