From fa2fff4bac5342ab245a119029071822ef281f19 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 17 Sep 2024 19:41:17 +0200 Subject: [PATCH 1/3] feat(har): track address for api requests --- packages/playwright-core/src/server/fetch.ts | 9 +++++++++ packages/playwright-core/src/server/har/harTracer.ts | 2 ++ tests/library/har.spec.ts | 3 +++ 3 files changed, 14 insertions(+) diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index 2aa7f27feead8..5be77493767fc 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -73,6 +73,8 @@ export type APIRequestFinishedEvent = { statusMessage: string; body?: Buffer; timings: har.Timings; + serverIPAddress?: string; + serverPort?: number; }; type SendRequestOptions = https.RequestOptions & { @@ -302,6 +304,8 @@ export abstract class APIRequestContext extends SdkObject { let tcpConnectionAt: number | undefined; let tlsHandshakeAt: number | undefined; let requestFinishAt: number | undefined; + let serverIPAddress: string | undefined; + let serverPort: number | undefined; const request = requestConstructor(url, requestOptions as any, async response => { const responseAt = monotonicTime(); @@ -328,6 +332,8 @@ export abstract class APIRequestContext extends SdkObject { cookies, body, timings, + serverIPAddress, + serverPort, }; this.emit(APIRequestContext.Events.RequestFinished, requestFinishedEvent); }; @@ -483,6 +489,9 @@ export abstract class APIRequestContext extends SdkObject { socket.on('lookup', () => { dnsLookupAt = monotonicTime(); }); socket.on('connect', () => { tcpConnectionAt = monotonicTime(); }); socket.on('secureConnect', () => { tlsHandshakeAt = monotonicTime(); }); + + serverIPAddress = socket.remoteAddress; + serverPort = socket.remotePort; }); request.on('finish', () => { requestFinishAt = monotonicTime(); }); diff --git a/packages/playwright-core/src/server/har/harTracer.ts b/packages/playwright-core/src/server/har/harTracer.ts index 76da6682d4651..6dffaba894ad6 100644 --- a/packages/playwright-core/src/server/har/harTracer.ts +++ b/packages/playwright-core/src/server/har/harTracer.ts @@ -208,6 +208,8 @@ export class HarTracer { if (!harEntry) return; + harEntry.serverIPAddress = event.serverIPAddress; + harEntry._serverPort = event.serverPort; harEntry.response.status = event.statusCode; harEntry.response.statusText = event.statusMessage; harEntry.response.httpVersion = event.httpVersion; diff --git a/tests/library/har.spec.ts b/tests/library/har.spec.ts index cc65127e3fdf0..cd218e2ac50aa 100644 --- a/tests/library/har.spec.ts +++ b/tests/library/har.spec.ts @@ -831,6 +831,9 @@ it('should include API request', async ({ contextFactory, server }, testInfo) => ssl: expect.any(Number), wait: expect.any(Number), })); + + expect(entry.serverIPAddress).toBeDefined(); + expect(entry._serverPort).toEqual(server.PORT); }); it('should respect minimal mode for API Requests', async ({ contextFactory, server }, testInfo) => { From 72da91a9b421b0c05c0f567ac0aa43076aa61afb Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 17 Sep 2024 19:43:29 +0200 Subject: [PATCH 2/3] respect omitServerIP --- packages/playwright-core/src/server/har/harTracer.ts | 7 +++++-- tests/library/har.spec.ts | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/server/har/harTracer.ts b/packages/playwright-core/src/server/har/harTracer.ts index 6dffaba894ad6..41f4b1444812a 100644 --- a/packages/playwright-core/src/server/har/harTracer.ts +++ b/packages/playwright-core/src/server/har/harTracer.ts @@ -208,13 +208,16 @@ export class HarTracer { if (!harEntry) return; - harEntry.serverIPAddress = event.serverIPAddress; - harEntry._serverPort = event.serverPort; harEntry.response.status = event.statusCode; harEntry.response.statusText = event.statusMessage; harEntry.response.httpVersion = event.httpVersion; harEntry.response.redirectURL = event.headers.location || ''; + if (!this._options.omitServerIP) { + harEntry.serverIPAddress = event.serverIPAddress; + harEntry._serverPort = event.serverPort; + } + if (!this._options.omitTiming) { harEntry.timings = event.timings; this._computeHarEntryTotalTime(harEntry); diff --git a/tests/library/har.spec.ts b/tests/library/har.spec.ts index cd218e2ac50aa..17d562e2a98c6 100644 --- a/tests/library/har.spec.ts +++ b/tests/library/har.spec.ts @@ -847,6 +847,8 @@ it('should respect minimal mode for API Requests', async ({ contextFactory, serv expect(entries).toHaveLength(1); const [entry] = entries; expect(entry.timings).toEqual({ receive: -1, send: -1, wait: -1 }); + expect(entry.serverIPAddress).toBeUndefined(); + expect(entry._serverPort).toBeUndefined(); }); it('should include redirects from API request', async ({ contextFactory, server }, testInfo) => { From 717847414e2d3a724de9a75633808b5828043e3d Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 18 Sep 2024 08:42:04 +0200 Subject: [PATCH 3/3] lint lint --- packages/playwright-core/src/server/fetch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index f1ce58dad6070..7a9e57288afba 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -507,7 +507,7 @@ export abstract class APIRequestContext extends SdkObject { }; } }); - + serverIPAddress = socket.remoteAddress; serverPort = socket.remotePort; });