|
3 | 3 | const { tspl } = require('@matteo.collina/tspl') |
4 | 4 | const { readFileSync, createReadStream } = require('node:fs') |
5 | 5 | const { createServer } = require('node:http') |
| 6 | +const { createServer: createNetServer } = require('node:net') |
6 | 7 | const { Readable, PassThrough } = require('node:stream') |
7 | 8 | const { test, after } = require('node:test') |
8 | 9 | const { Client, errors } = require('..') |
@@ -1190,6 +1191,52 @@ test('ignore request header mutations', async (t) => { |
1190 | 1191 | await t.completed |
1191 | 1192 | }) |
1192 | 1193 |
|
| 1194 | +test('socket end completes response when body is paused by backpressure', async (t) => { |
| 1195 | + t = tspl(t, { plan: 2 }) |
| 1196 | + |
| 1197 | + const payload = Buffer.from('aa') |
| 1198 | + const server = createNetServer((socket) => { |
| 1199 | + socket.once('data', () => { |
| 1200 | + socket.write( |
| 1201 | + 'HTTP/1.1 200 OK\r\n' + |
| 1202 | + `Content-Length: ${payload.length}\r\n` + |
| 1203 | + 'Connection: close\r\n\r\n' |
| 1204 | + ) |
| 1205 | + socket.write(payload) |
| 1206 | + socket.end() |
| 1207 | + }) |
| 1208 | + }) |
| 1209 | + after(() => server.close()) |
| 1210 | + |
| 1211 | + server.listen(0, '127.0.0.1', () => { |
| 1212 | + const client = new Client(`http://127.0.0.1:${server.address().port}`) |
| 1213 | + after(() => client.close()) |
| 1214 | + |
| 1215 | + client.request({ |
| 1216 | + path: '/', |
| 1217 | + method: 'GET', |
| 1218 | + highWaterMark: 1 |
| 1219 | + }, (err, data) => { |
| 1220 | + t.ifError(err) |
| 1221 | + |
| 1222 | + let body = '' |
| 1223 | + data.body.setEncoding('utf8') |
| 1224 | + data.body.on('data', (chunk) => { |
| 1225 | + body += chunk |
| 1226 | + }) |
| 1227 | + data.body.on('end', () => { |
| 1228 | + t.strictEqual(body, payload.toString()) |
| 1229 | + }) |
| 1230 | + |
| 1231 | + setImmediate(() => { |
| 1232 | + data.body.resume() |
| 1233 | + }) |
| 1234 | + }) |
| 1235 | + }) |
| 1236 | + |
| 1237 | + await t.completed |
| 1238 | +}) |
| 1239 | + |
1193 | 1240 | test('url-like url', async (t) => { |
1194 | 1241 | t = tspl(t, { plan: 1 }) |
1195 | 1242 |
|
|
0 commit comments