fix tests
This commit is contained in:
parent
1eb18daab0
commit
91552ae73b
|
|
@ -201,7 +201,7 @@ export abstract class APIRequestContext extends SdkObject {
|
||||||
setHeader(headers, 'content-length', String(postData.byteLength));
|
setHeader(headers, 'content-length', String(postData.byteLength));
|
||||||
const controller = new ProgressController(metadata, this);
|
const controller = new ProgressController(metadata, this);
|
||||||
const fetchResponse = await controller.run(progress => {
|
const fetchResponse = await controller.run(progress => {
|
||||||
return this._sendRequestWithRetries(progress, requestUrl, options, postData);
|
return this._sendRequestWithRetries(progress, requestUrl, options, postData, params.maxRetries);
|
||||||
});
|
});
|
||||||
const fetchUid = this._storeResponseBody(fetchResponse.body);
|
const fetchUid = this._storeResponseBody(fetchResponse.body);
|
||||||
this.fetchLog.set(fetchUid, controller.metadata.log);
|
this.fetchLog.set(fetchUid, controller.metadata.log);
|
||||||
|
|
@ -247,14 +247,16 @@ export abstract class APIRequestContext extends SdkObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _sendRequestWithRetries(progress: Progress, url: URL, options: SendRequestOptions, postData?: Buffer): Promise<Omit<channels.APIResponse, 'fetchUid'> & { body: Buffer }>{
|
private async _sendRequestWithRetries(progress: Progress, url: URL, options: SendRequestOptions, postData?: Buffer, maxRetries?: number): Promise<Omit<channels.APIResponse, 'fetchUid'> & { body: Buffer }>{
|
||||||
const maxRetries = 5;
|
maxRetries ??= 5;
|
||||||
let backoff = 250;
|
let backoff = 250;
|
||||||
for (let i = 0; i <= maxRetries; i++) {
|
for (let i = 0; i <= maxRetries; i++) {
|
||||||
try {
|
try {
|
||||||
return await this._sendRequest(progress, url, options, postData);
|
return await this._sendRequest(progress, url, options, postData);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (i === maxRetries - 1 || (options.deadline && monotonicTime() + backoff > options.deadline))
|
if (maxRetries === 0)
|
||||||
|
throw e;
|
||||||
|
if (i === maxRetries || (options.deadline && monotonicTime() + backoff > options.deadline))
|
||||||
throw new Error(`Failed after ${i + 1} attempt(s): ${e}`);
|
throw new Error(`Failed after ${i + 1} attempt(s): ${e}`);
|
||||||
// Retry on connection reset only.
|
// Retry on connection reset only.
|
||||||
if (e.code !== 'ECONNRESET')
|
if (e.code !== 'ECONNRESET')
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ it('should throw on network error', async ({ context, server }) => {
|
||||||
server.setRoute('/test', (req, res) => {
|
server.setRoute('/test', (req, res) => {
|
||||||
req.socket.destroy();
|
req.socket.destroy();
|
||||||
});
|
});
|
||||||
const error = await context.request.get(server.PREFIX + '/test').catch(e => e);
|
const error = await context.request.get(server.PREFIX + '/test', { maxRetries: 0 }).catch(e => e);
|
||||||
expect(error.message).toContain('apiRequestContext.get: socket hang up');
|
expect(error.message).toContain('apiRequestContext.get: socket hang up');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -68,7 +68,7 @@ it('should throw on network error after redirect', async ({ context, server }) =
|
||||||
server.setRoute('/test', (req, res) => {
|
server.setRoute('/test', (req, res) => {
|
||||||
req.socket.destroy();
|
req.socket.destroy();
|
||||||
});
|
});
|
||||||
const error = await context.request.get(server.PREFIX + '/redirect').catch(e => e);
|
const error = await context.request.get(server.PREFIX + '/redirect', { maxRetries: 0 }).catch(e => e);
|
||||||
expect(error.message).toContain('apiRequestContext.get: socket hang up');
|
expect(error.message).toContain('apiRequestContext.get: socket hang up');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -436,7 +436,7 @@ it('should throw an error when maxRedirects is less than 0', async ({ playwright
|
||||||
|
|
||||||
const request = await playwright.request.newContext();
|
const request = await playwright.request.newContext();
|
||||||
for (const method of ['GET', 'PUT', 'POST', 'OPTIONS', 'HEAD', 'PATCH'])
|
for (const method of ['GET', 'PUT', 'POST', 'OPTIONS', 'HEAD', 'PATCH'])
|
||||||
await expect(async () => request.fetch(`${server.PREFIX}/a/redirect1`, { method, maxRedirects: -1 })).rejects.toThrow(`'maxRedirects' should be greater than or equal to '0'`);
|
await expect(async () => request.fetch(`${server.PREFIX}/a/redirect1`, { method, maxRedirects: -1 })).rejects.toThrow(`'maxRedirects' must be greater than or equal to '0'`);
|
||||||
await request.dispose();
|
await request.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue