Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: also check for Podman to determine if running in container #7307

Merged
merged 6 commits into from Oct 24, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -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",
Expand Down
@@ -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, inDocker }) {
export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, isContainerized }) {
let chromeArgs = []
.concat(
cdpPort ? [`--remote-debugging-port=${cdpPort}`] : [],
Expand All @@ -11,10 +11,10 @@ export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir
)
.join(' ');

if (inDocker) {
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);
});
}

Expand Down
2 changes: 1 addition & 1 deletion src/browser/provider/built-in/dedicated/chrome/index.js
Expand Up @@ -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.isContainerized)
await startLocalChromeOnDocker(pageUrl, runtimeInfo);
else
await startLocalChrome(pageUrl, runtimeInfo);
Expand Down
Expand Up @@ -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);
}
Expand All @@ -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);
Expand Down
11 changes: 6 additions & 5 deletions src/browser/provider/built-in/dedicated/chrome/runtime-info.ts
@@ -1,21 +1,22 @@
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';

export default class ChromeRuntimeInfo {
public config: Config;
public tempProfileDir: null | TempDirectory;
public cdpPort: number;
public inDocker: boolean;
public isContainerized: boolean;
public browserName?: string;

protected constructor (config: Config) {
this.config = config;
this.tempProfileDir = null;
this.cdpPort = this.config.cdpPort;
this.inDocker = isDocker();
this.config = config;
this.tempProfileDir = null;
this.cdpPort = this.config.cdpPort;
this.isContainerized = isDocker() || isPodman();
}

protected async createTempProfile (proxyHostName: string, disableMultipleWindows: boolean): Promise<TempDirectory> {
Expand Down
36 changes: 21 additions & 15 deletions test/server/util-test.js
Expand Up @@ -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', () => {
Expand Down Expand Up @@ -586,26 +586,32 @@ 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');
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', () => {
Expand Down