From fa4da0446a9902fc52b59272f2da51b5a2752cb3 Mon Sep 17 00:00:00 2001 From: Tim Nederhoff Date: Mon, 26 Sep 2022 12:49:27 +0200 Subject: [PATCH 1/6] feat: also check for Podman to determine if running in container --- package.json | 1 + src/.eslintrc | 2 +- .../provider/built-in/dedicated/chrome/build-chrome-args.js | 4 ++-- src/browser/provider/built-in/dedicated/chrome/index.js | 2 +- .../provider/built-in/dedicated/chrome/runtime-info.ts | 5 +++-- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 35d2f0609a..2abe96a618 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "is-ci": "^1.0.10", "is-docker": "^2.0.0", "is-glob": "^2.0.1", + "is-podman": "^1.0.1", "is-stream": "^2.0.0", "json5": "^2.1.0", "lodash": "^4.17.13", diff --git a/src/.eslintrc b/src/.eslintrc index 00f6aea6ed..755110fb71 100644 --- a/src/.eslintrc +++ b/src/.eslintrc @@ -1,6 +1,6 @@ { "parserOptions": { - "project": "./src/tsconfig.json" + "project": "./tsconfig.json" }, "rules": { "arrow-parens": [2, "as-needed"], diff --git a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js index 98d04612c1..f474ba89df 100644 --- a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +++ b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js @@ -1,6 +1,6 @@ export const IN_DOCKER_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; -export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inDocker }) { +export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inDocker: inContainer }) { let chromeArgs = [] .concat( cdpPort ? [`--remote-debugging-port=${cdpPort}`] : [], @@ -11,7 +11,7 @@ export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir ) .join(' '); - if (inDocker) { + if (inContainer) { IN_DOCKER_FLAGS.forEach(inDockerFlag => { if (!chromeArgs.includes(inDockerFlag)) chromeArgs = chromeArgs.concat(' ', inDockerFlag); diff --git a/src/browser/provider/built-in/dedicated/chrome/index.js b/src/browser/provider/built-in/dedicated/chrome/index.js index 8541aeb110..2e183ca2af 100644 --- a/src/browser/provider/built-in/dedicated/chrome/index.js +++ b/src/browser/provider/built-in/dedicated/chrome/index.js @@ -68,7 +68,7 @@ export default { }; //NOTE: A not-working tab is opened when the browser start in the docker so we should create a new tab. - if (runtimeInfo.inDocker) + if (runtimeInfo.inContainer) await startLocalChromeOnDocker(pageUrl, runtimeInfo); else await startLocalChrome(pageUrl, runtimeInfo); diff --git a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts index aa97e4bb2c..2252ffc50d 100644 --- a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts +++ b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts @@ -1,6 +1,7 @@ import { getFreePort } from 'endpoint-utils'; import createTempProfile from './create-temp-profile'; import isDocker from 'is-docker'; +import isPodman from 'is-podman'; import TempDirectory from '../../../../../utils/temp-directory'; import { Config } from './interfaces'; @@ -8,14 +9,14 @@ export default class ChromeRuntimeInfo { public config: Config; public tempProfileDir: null | TempDirectory; public cdpPort: number; - public inDocker: boolean; + public inContainer: boolean; public browserName?: string; protected constructor (config: Config) { this.config = config; this.tempProfileDir = null; this.cdpPort = this.config.cdpPort; - this.inDocker = isDocker(); + this.inContainer = isDocker() || isPodman(); } protected async createTempProfile (proxyHostName: string, disableMultipleWindows: boolean): Promise { From 32815e48813fa42f3b4c79c838740737eb0417a3 Mon Sep 17 00:00:00 2001 From: Tim Nederhoff Date: Mon, 26 Sep 2022 12:55:54 +0200 Subject: [PATCH 2/6] fix: wrong type declaration --- .../provider/built-in/dedicated/chrome/build-chrome-args.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js index f474ba89df..0bbb02a314 100644 --- a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +++ b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js @@ -1,6 +1,6 @@ export const IN_DOCKER_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; -export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inDocker: inContainer }) { +export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inContainer }) { let chromeArgs = [] .concat( cdpPort ? [`--remote-debugging-port=${cdpPort}`] : [], From 26e029785ae5a11f45fbbdee015e6c26238fa9a8 Mon Sep 17 00:00:00 2001 From: Tim Nederhoff Date: Tue, 27 Sep 2022 08:16:58 +0200 Subject: [PATCH 3/6] fix: reverted project path of tsconfig.json --- src/.eslintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/.eslintrc b/src/.eslintrc index 755110fb71..00f6aea6ed 100644 --- a/src/.eslintrc +++ b/src/.eslintrc @@ -1,6 +1,6 @@ { "parserOptions": { - "project": "./tsconfig.json" + "project": "./src/tsconfig.json" }, "rules": { "arrow-parens": [2, "as-needed"], From c513f46e951e61391cb13a0529cc5de60fd000a1 Mon Sep 17 00:00:00 2001 From: Andrey Belym Date: Tue, 27 Sep 2022 17:42:46 +0400 Subject: [PATCH 4/6] refactor: rename the flag, fix tests --- .../dedicated/chrome/build-chrome-args.js | 12 +++---- .../built-in/dedicated/chrome/index.js | 2 +- .../built-in/dedicated/chrome/local-chrome.js | 8 ++--- .../built-in/dedicated/chrome/runtime-info.ts | 10 +++--- test/server/util-test.js | 32 +++++++++++-------- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js index 0bbb02a314..f438d5b0bc 100644 --- a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +++ b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js @@ -1,6 +1,6 @@ -export const IN_DOCKER_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; +export const CONTAINERIZED_CHROME_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; -export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inContainer }) { +export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, isContainerized }) { let chromeArgs = [] .concat( cdpPort ? [`--remote-debugging-port=${cdpPort}`] : [], @@ -11,10 +11,10 @@ export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir ) .join(' '); - if (inContainer) { - IN_DOCKER_FLAGS.forEach(inDockerFlag => { - if (!chromeArgs.includes(inDockerFlag)) - chromeArgs = chromeArgs.concat(' ', inDockerFlag); + if (isContainerized) { + CONTAINERIZED_CHROME_FLAGS.forEach(flag => { + if (!chromeArgs.includes(flag)) + chromeArgs = chromeArgs.concat(' ', flag); }); } diff --git a/src/browser/provider/built-in/dedicated/chrome/index.js b/src/browser/provider/built-in/dedicated/chrome/index.js index 2e183ca2af..e7bc279a86 100644 --- a/src/browser/provider/built-in/dedicated/chrome/index.js +++ b/src/browser/provider/built-in/dedicated/chrome/index.js @@ -68,7 +68,7 @@ export default { }; //NOTE: A not-working tab is opened when the browser start in the docker so we should create a new tab. - if (runtimeInfo.inContainer) + if (runtimeInfo.isContainerized) await startLocalChromeOnDocker(pageUrl, runtimeInfo); else await startLocalChrome(pageUrl, runtimeInfo); diff --git a/src/browser/provider/built-in/dedicated/chrome/local-chrome.js b/src/browser/provider/built-in/dedicated/chrome/local-chrome.js index c63f9d5187..677f6f400d 100644 --- a/src/browser/provider/built-in/dedicated/chrome/local-chrome.js +++ b/src/browser/provider/built-in/dedicated/chrome/local-chrome.js @@ -11,11 +11,11 @@ const browserStarter = new BrowserStarter(); const LIST_TABS_TIMEOUT = 10000; const LIST_TABS_DELAY = 500; -export async function start (pageUrl, { browserName, config, cdpPort, tempProfileDir, inDocker }) { +export async function start (pageUrl, { browserName, config, cdpPort, tempProfileDir, isContainerized }) { const chromeInfo = await browserTools.getBrowserInfo(config.path || browserName); const chromeOpenParameters = Object.assign({}, chromeInfo); - chromeOpenParameters.cmd = buildChromeArgs({ config, cdpPort, platformArgs: chromeOpenParameters.cmd, tempProfileDir, inDocker }); + chromeOpenParameters.cmd = buildChromeArgs({ config, cdpPort, platformArgs: chromeOpenParameters.cmd, tempProfileDir, isContainerized }); await browserStarter.startBrowser(chromeOpenParameters, pageUrl); } @@ -29,8 +29,8 @@ async function tryListTabs (cdpPort) { } } -export async function startOnDocker (pageUrl, { browserName, config, cdpPort, tempProfileDir, inDocker }) { - await start('', { browserName, config, cdpPort, tempProfileDir, inDocker }); +export async function startOnDocker (pageUrl, { browserName, config, cdpPort, tempProfileDir, isContainerized }) { + await start('', { browserName, config, cdpPort, tempProfileDir, isContainerized }); let { tabs, error } = await tryListTabs(cdpPort); const timer = new Timer(LIST_TABS_TIMEOUT); diff --git a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts index 2252ffc50d..3a27809a35 100644 --- a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts +++ b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts @@ -9,14 +9,14 @@ export default class ChromeRuntimeInfo { public config: Config; public tempProfileDir: null | TempDirectory; public cdpPort: number; - public inContainer: boolean; + public isContainerized: boolean; public browserName?: string; protected constructor (config: Config) { - this.config = config; - this.tempProfileDir = null; - this.cdpPort = this.config.cdpPort; - this.inContainer = isDocker() || isPodman(); + this.config = config; + this.tempProfileDir = null; + this.cdpPort = this.config.cdpPort; + this.isContainerized = isDocker() || isPodman(); } protected async createTempProfile (proxyHostName: string, disableMultipleWindows: boolean): Promise { diff --git a/test/server/util-test.js b/test/server/util-test.js index 84fec03afc..ba4f5b0db6 100644 --- a/test/server/util-test.js +++ b/test/server/util-test.js @@ -589,23 +589,29 @@ describe('Utils', () => { const IN_DOCKER_FLAGS_RE = new RegExp(IN_DOCKER_FLAGS.join(' ')); const SANDBOX_FLAG_RE = new RegExp('--no-sandbox'); const DISABLE_DEV_SHM_USAGE_RE = new RegExp('--disable-dev-shm-usage'); - let inDockerFlagMatch = null; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: false }); - inDockerFlagMatch = chromeArgs.match(IN_DOCKER_FLAGS_RE); - expect(inDockerFlagMatch).eql(null); + let containerizedChromeFlags = null; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: true }); - inDockerFlagMatch = chromeArgs.match(IN_DOCKER_FLAGS_RE); - expect(inDockerFlagMatch.length).eql(1); + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: false }); + containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); + + expect(containerizedChromeFlags).eql(null); + + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); + containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); + + expect(containerizedChromeFlags.length).eql(1); // NOTE: Flag should not be duplicated - config.userArgs = '--no-sandbox --disable-dev-shm-usage'; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: true }); - inDockerFlagMatch = chromeArgs.match(SANDBOX_FLAG_RE); - expect(inDockerFlagMatch.length).eql(1); - inDockerFlagMatch = chromeArgs.match(DISABLE_DEV_SHM_USAGE_RE); - expect(inDockerFlagMatch.length).eql(1); + config.userArgs = '--no-sandbox --disable-dev-shm-usage'; + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); + containerizedChromeFlags = chromeArgs.match(SANDBOX_FLAG_RE); + + expect(containerizedChromeFlags.length).eql(1); + + containerizedChromeFlags = chromeArgs.match(DISABLE_DEV_SHM_USAGE_RE); + + expect(containerizedChromeFlags.length).eql(1); }); describe('Create temporary profile for the Google Chrome browser', () => { From 9bbbec8d4086449b3fd4df44908a0e4e85f1b914 Mon Sep 17 00:00:00 2001 From: Andrey Belym Date: Wed, 28 Sep 2022 10:38:20 +0400 Subject: [PATCH 5/6] test: fix lint --- test/server/util-test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/server/util-test.js b/test/server/util-test.js index ba4f5b0db6..96badfc39c 100644 --- a/test/server/util-test.js +++ b/test/server/util-test.js @@ -594,23 +594,23 @@ describe('Utils', () => { chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: false }); containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); - + expect(containerizedChromeFlags).eql(null); chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); - + expect(containerizedChromeFlags.length).eql(1); // NOTE: Flag should not be duplicated config.userArgs = '--no-sandbox --disable-dev-shm-usage'; chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); containerizedChromeFlags = chromeArgs.match(SANDBOX_FLAG_RE); - + expect(containerizedChromeFlags.length).eql(1); - + containerizedChromeFlags = chromeArgs.match(DISABLE_DEV_SHM_USAGE_RE); - + expect(containerizedChromeFlags.length).eql(1); }); From 39cafc772efe2d605f7d73592fcf5ac3f76ef5e6 Mon Sep 17 00:00:00 2001 From: Andrey Belym Date: Fri, 21 Oct 2022 15:46:09 +0300 Subject: [PATCH 6/6] test: use correct export for chrome flags --- test/server/util-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/server/util-test.js b/test/server/util-test.js index 96badfc39c..3f840d6810 100644 --- a/test/server/util-test.js +++ b/test/server/util-test.js @@ -31,7 +31,7 @@ const { } = require('../../lib/errors/test-run/utils'); const { buildChromeArgs, - IN_DOCKER_FLAGS, + CONTAINERIZED_CHROME_FLAGS, } = require('../../lib/browser/provider/built-in/dedicated/chrome/build-chrome-args'); describe('Utils', () => { @@ -586,7 +586,7 @@ describe('Utils', () => { let chromeArgs = ''; - const IN_DOCKER_FLAGS_RE = new RegExp(IN_DOCKER_FLAGS.join(' ')); + const IN_DOCKER_FLAGS_RE = new RegExp(CONTAINERIZED_CHROME_FLAGS.join(' ')); const SANDBOX_FLAG_RE = new RegExp('--no-sandbox'); const DISABLE_DEV_SHM_USAGE_RE = new RegExp('--disable-dev-shm-usage');