fix(har): account for socket reuse
This commit is contained in:
parent
0a63427c77
commit
15414fb59e
|
|
@ -329,6 +329,11 @@ export abstract class APIRequestContext extends SdkObject {
|
|||
blocked: -1,
|
||||
};
|
||||
|
||||
if (request.reusedSocket) {
|
||||
timings.connect = -1;
|
||||
timings.dns = -1;
|
||||
}
|
||||
|
||||
const requestFinishedEvent: APIRequestFinishedEvent = {
|
||||
requestEvent,
|
||||
httpVersion: response.httpVersion,
|
||||
|
|
@ -491,8 +496,13 @@ export abstract class APIRequestContext extends SdkObject {
|
|||
request.on('socket', socket => {
|
||||
// happy eyeballs don't emit lookup and connect events, so we use our custom ones
|
||||
const happyEyeBallsTimings = timingForSocket(socket);
|
||||
dnsLookupAt = happyEyeBallsTimings.dnsLookupAt;
|
||||
tcpConnectionAt ??= happyEyeBallsTimings.tcpConnectionAt;
|
||||
if (request.reusedSocket) {
|
||||
dnsLookupAt = startAt;
|
||||
tcpConnectionAt = startAt;
|
||||
} else {
|
||||
dnsLookupAt = happyEyeBallsTimings.dnsLookupAt;
|
||||
tcpConnectionAt ??= happyEyeBallsTimings.tcpConnectionAt;
|
||||
}
|
||||
|
||||
// non-happy-eyeballs sockets
|
||||
listeners.push(
|
||||
|
|
|
|||
|
|
@ -877,6 +877,18 @@ it('should include timings when using socks proxy', async ({ contextFactory, ser
|
|||
expect(log.entries[0].timings.connect).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should not have connect and dns timings when socket is reused', async ({ contextFactory, server }, testInfo) => {
|
||||
const { page, getLog } = await pageWithHar(contextFactory, testInfo);
|
||||
await page.request.get(server.EMPTY_PAGE);
|
||||
await page.request.get(server.EMPTY_PAGE);
|
||||
|
||||
const log = await getLog();
|
||||
expect(log.entries).toHaveLength(2);
|
||||
const request2 = log.entries[1];
|
||||
expect.soft(request2.timings.connect).toBe(-1);
|
||||
expect.soft(request2.timings.dns).toBe(-1);
|
||||
});
|
||||
|
||||
it('should include redirects from API request', async ({ contextFactory, server }, testInfo) => {
|
||||
server.setRedirect('/redirect-me', '/simple.json');
|
||||
const { page, getLog } = await pageWithHar(contextFactory, testInfo);
|
||||
|
|
|
|||
Loading…
Reference in a new issue