From e10a55561d06baec355c030e609fe678c43e7981 Mon Sep 17 00:00:00 2001 From: Luke Karrys Date: Fri, 29 Mar 2024 16:43:37 -0700 Subject: [PATCH] Make getName() public and add tests for it --- packages/agent-base/src/index.ts | 6 +- packages/agent-base/test/test.ts | 98 ++++++++++++++++++-------------- 2 files changed, 59 insertions(+), 45 deletions(-) diff --git a/packages/agent-base/src/index.ts b/packages/agent-base/src/index.ts index 7a6cb2c8..fcf2b57c 100644 --- a/packages/agent-base/src/index.ts +++ b/packages/agent-base/src/index.ts @@ -124,7 +124,11 @@ export abstract class Agent extends http.Agent { // In order to properly update the socket pool, we need to call `getName()` on // the core `https.Agent` if it is a secureEndpoint. - private getName({ secureEndpoint, ...options }: AgentConnectOpts) { + getName(options: AgentConnectOpts): string { + const secureEndpoint = + typeof options.secureEndpoint === 'boolean' + ? options.secureEndpoint + : this.isSecureEndpoint(options); if (secureEndpoint) { // @ts-expect-error `getName()` isn't defined in `@types/node` return HttpsAgent.prototype.getName.call(this, options); diff --git a/packages/agent-base/test/test.ts b/packages/agent-base/test/test.ts index d4a631a9..e3566370 100644 --- a/packages/agent-base/test/test.ts +++ b/packages/agent-base/test/test.ts @@ -79,6 +79,7 @@ describe('Agent (TypeScript)', () => { ) { gotCallback = true; assert(opts.secureEndpoint === false); + assert.equal(this.getName(opts), `127.0.0.1:${port}:`); return net.connect(opts); } } @@ -308,55 +309,60 @@ describe('Agent (TypeScript)', () => { server2.close(); } }); - }); - it('should support `keepAlive: true` with `maxSockets`', async () => { - let reqCount = 0; - let connectCount = 0; + it('should support `keepAlive: true` with `maxSockets`', async () => { + let reqCount = 0; + let connectCount = 0; - class MyAgent extends Agent { - async connect(_req: http.ClientRequest, opts: AgentConnectOpts) { - connectCount++; - assert(opts.secureEndpoint === false); - await sleep(10); - return net.connect(opts); + class MyAgent extends Agent { + async connect( + _req: http.ClientRequest, + opts: AgentConnectOpts + ) { + connectCount++; + assert(opts.secureEndpoint === false); + await sleep(10); + return net.connect(opts); + } } - } - const agent = new MyAgent({ keepAlive: true, maxSockets: 1 }); + const agent = new MyAgent({ keepAlive: true, maxSockets: 1 }); + + const server = http.createServer(async (req, res) => { + expect(req.headers.connection).toEqual('keep-alive'); + reqCount++; + await sleep(10); + res.end(); + }); + const addr = await listen(server); - const server = http.createServer(async (req, res) => { - expect(req.headers.connection).toEqual('keep-alive'); - reqCount++; - await sleep(10); - res.end(); + try { + const resPromise = req(new URL('/foo', addr), { agent }); + const res2Promise = req(new URL('/another', addr), { + agent, + }); + + const res = await resPromise; + expect(reqCount).toEqual(1); + expect(connectCount).toEqual(1); + expect(res.headers.connection).toEqual('keep-alive'); + + res.resume(); + const s1 = res.socket; + await once(s1, 'free'); + + const res2 = await res2Promise; + expect(reqCount).toEqual(2); + expect(connectCount).toEqual(1); + expect(res2.headers.connection).toEqual('keep-alive'); + assert(res2.socket === s1); + + res2.resume(); + await once(res2.socket, 'free'); + } finally { + agent.destroy(); + server.close(); + } }); - const addr = await listen(server); - - try { - const resPromise = req(new URL('/foo', addr), { agent }); - const res2Promise = req(new URL('/another', addr), { agent }); - - const res = await resPromise; - expect(reqCount).toEqual(1); - expect(connectCount).toEqual(1); - expect(res.headers.connection).toEqual('keep-alive'); - - res.resume(); - const s1 = res.socket; - await once(s1, 'free'); - - const res2 = await res2Promise; - expect(reqCount).toEqual(2); - expect(connectCount).toEqual(1); - expect(res2.headers.connection).toEqual('keep-alive'); - assert(res2.socket === s1); - - res2.resume(); - await once(res2.socket, 'free'); - } finally { - agent.destroy(); - server.close(); - } }); describe('"https" module', () => { @@ -371,6 +377,10 @@ describe('Agent (TypeScript)', () => { ): net.Socket { gotCallback = true; assert(opts.secureEndpoint === true); + assert.equal( + this.getName(opts), + `127.0.0.1:${port}::::::::false:::::::::::::` + ); return tls.connect(opts); } }