diff --git a/lib/adapters/http.js b/lib/adapters/http.js index 20ba3cf8..ad52b7e6 100755 --- a/lib/adapters/http.js +++ b/lib/adapters/http.js @@ -108,6 +108,9 @@ class Http2Sessions { } else { entries.splice(i, 1); } + if (!session.closed) { + session.close(); + } return; } } diff --git a/test/unit/adapters/http.js b/test/unit/adapters/http.js index 77bbe495..dfdc3b49 100644 --- a/test/unit/adapters/http.js +++ b/test/unit/adapters/http.js @@ -3045,6 +3045,37 @@ describe('supports http with nodejs', function () { assert.strictEqual(data1, 'OK'); assert.strictEqual(data2, 'OK'); }); + + it('should close connection after sessionTimeout ends', async () => { + server = await startHTTPServer( + (req, res) => { + setTimeout(() => res.end('OK'), 100); + }, + { + useHTTP2: true, + } + ); + + const response = await http2Axios.get(LOCAL_SERVER_URL, { + responseType: 'stream', + http2Options: { + sessionTimeout: 1000, + }, + }); + + assert.strictEqual(response.data.session.closed, false); + + let sessionClosed = false; + response.data.session.once('close', () => { + sessionClosed = true; + }); + + const data = await getStream(response.data); + assert.strictEqual(data, 'OK'); + + await setTimeoutAsync(1100); + assert.strictEqual(sessionClosed, true); + }); }); });