From 1e517731ef1e742b332953f3d60f2c382ee9b66f Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Thu, 8 Sep 2022 14:40:41 +0200 Subject: [PATCH] chore: have a socket timeout when downloading browsers (#17187) --- .../src/server/registry/download.ts | 1 + ...right-cdn-should-race-with-timeout.spec.ts | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tests/installation/playwright-cdn-should-race-with-timeout.spec.ts diff --git a/packages/playwright-core/src/server/registry/download.ts b/packages/playwright-core/src/server/registry/download.ts index d4c2065aab..35c46a1792 100644 --- a/packages/playwright-core/src/server/registry/download.ts +++ b/packages/playwright-core/src/server/registry/download.ts @@ -45,6 +45,7 @@ function downloadFile(url: string, destinationPath: string, options: DownloadFil headers: options.userAgent ? { 'User-Agent': options.userAgent, } : undefined, + timeout: 10_000, }, response => { log(`-- response status code: ${response.statusCode}`); if (response.statusCode !== 200) { diff --git a/tests/installation/playwright-cdn-should-race-with-timeout.spec.ts b/tests/installation/playwright-cdn-should-race-with-timeout.spec.ts new file mode 100644 index 0000000000..f5db1ada8f --- /dev/null +++ b/tests/installation/playwright-cdn-should-race-with-timeout.spec.ts @@ -0,0 +1,30 @@ +/** + * Copyright (c) Microsoft Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import http from 'http'; +import type { AddressInfo } from 'net'; +import { test, expect } from './npmTest'; + +test(`playwright cdn should race with a timeout`, async ({ exec }) => { + test.slow(); // This test will timeout on all the 3 fallback CDNs -> 30 seconds duration. + const server = http.createServer(() => {}); + await new Promise(resolve => server.listen(0, resolve)); + try { + const result = await exec('npm i --foreground-scripts playwright', { env: { PLAYWRIGHT_DOWNLOAD_HOST: `http://127.0.0.1:${(server.address() as AddressInfo).port}`, DEBUG: 'pw:install' }, expectToExitWithError: true }); + expect(result).toContain(`timed out after 10000ms`); + } finally { + await new Promise(resolve => server.close(resolve)); + } +});