smoke - enable crash reporter (#152041)

* smoke - enable crash reporter

* nix da only!
This commit is contained in:
Benjamin Pasero 2022-06-14 14:52:29 +02:00 committed by GitHub
parent 037af4beaf
commit 1ba0e7b601
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 8 deletions

View file

@ -322,7 +322,7 @@ function configureCrashReporter() {
if (!fs.existsSync(crashReporterDirectory)) { if (!fs.existsSync(crashReporterDirectory)) {
try { try {
fs.mkdirSync(crashReporterDirectory); fs.mkdirSync(crashReporterDirectory, { recursive: true });
} catch (error) { } catch (error) {
console.error(`The path '${crashReporterDirectory}' specified for --crash-reporter-directory does not seem to exist or cannot be created.`); console.error(`The path '${crashReporterDirectory}' specified for --crash-reporter-directory does not seem to exist or cannot be created.`);
app.exit(1); app.exit(1);

View file

@ -24,6 +24,7 @@ export interface LaunchOptions {
readonly extensionsPath: string; readonly extensionsPath: string;
readonly logger: Logger; readonly logger: Logger;
logsPath: string; logsPath: string;
crashesPath: string;
readonly verbose?: boolean; readonly verbose?: boolean;
readonly extraArgs?: string[]; readonly extraArgs?: string[];
readonly remote?: boolean; readonly remote?: boolean;

View file

@ -19,7 +19,7 @@ export interface IElectronConfiguration {
} }
export async function resolveElectronConfiguration(options: LaunchOptions): Promise<IElectronConfiguration> { export async function resolveElectronConfiguration(options: LaunchOptions): Promise<IElectronConfiguration> {
const { codePath, workspacePath, extensionsPath, userDataDir, remote, logger, logsPath, extraArgs } = options; const { codePath, workspacePath, extensionsPath, userDataDir, remote, logger, logsPath, crashesPath, extraArgs } = options;
const env = { ...process.env }; const env = { ...process.env };
const args = [ const args = [
@ -30,7 +30,7 @@ export async function resolveElectronConfiguration(options: LaunchOptions): Prom
'--no-cached-data', '--no-cached-data',
'--disable-updates', '--disable-updates',
'--disable-keytar', '--disable-keytar',
'--disable-crash-reporter', `--crash-reporter-directory=${crashesPath}`,
'--disable-workspace-trust', '--disable-workspace-trust',
`--extensions-dir=${extensionsPath}`, `--extensions-dir=${extensionsPath}`,
`--user-data-dir=${userDataDir}`, `--user-data-dir=${userDataDir}`,

View file

@ -5,7 +5,7 @@
import { join } from 'path'; import { join } from 'path';
import { Application, ApplicationOptions, Logger, Quality } from '../../../../automation'; import { Application, ApplicationOptions, Logger, Quality } from '../../../../automation';
import { createApp, timeout, installDiagnosticsHandler, installAppAfterHandler, getRandomUserDataDir, suiteLogsPath } from '../../utils'; import { createApp, timeout, installDiagnosticsHandler, installAppAfterHandler, getRandomUserDataDir, suiteLogsPath, suiteCrashPath } from '../../utils';
export function setup(ensureStableCode: () => string | undefined, logger: Logger) { export function setup(ensureStableCode: () => string | undefined, logger: Logger) {
describe('Data Loss (insiders -> insiders)', () => { describe('Data Loss (insiders -> insiders)', () => {
@ -19,7 +19,8 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
it('verifies opened editors are restored', async function () { it('verifies opened editors are restored', async function () {
app = createApp({ app = createApp({
...this.defaultOptions, ...this.defaultOptions,
logsPath: suiteLogsPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored') logsPath: suiteLogsPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored'),
crashesPath: suiteCrashPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored')
}); });
await app.start(); await app.start();
@ -44,7 +45,8 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
it('verifies editors can save and restore', async function () { it('verifies editors can save and restore', async function () {
app = createApp({ app = createApp({
...this.defaultOptions, ...this.defaultOptions,
logsPath: suiteLogsPath(this.defaultOptions, 'test_verifies_editors_can_save_and_restore') logsPath: suiteLogsPath(this.defaultOptions, 'test_verifies_editors_can_save_and_restore'),
crashesPath: suiteCrashPath(this.defaultOptions, 'test_verifies_editors_can_save_and_restore')
}); });
await app.start(); await app.start();
@ -84,7 +86,8 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
async function testHotExit(title: string, restartDelay: number | undefined, autoSave: boolean | undefined) { async function testHotExit(title: string, restartDelay: number | undefined, autoSave: boolean | undefined) {
app = createApp({ app = createApp({
...this.defaultOptions, ...this.defaultOptions,
logsPath: suiteLogsPath(this.defaultOptions, title) logsPath: suiteLogsPath(this.defaultOptions, title),
crashesPath: suiteCrashPath(this.defaultOptions, title)
}); });
await app.start(); await app.start();
@ -153,12 +156,14 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
const userDataDir = getRandomUserDataDir(this.defaultOptions); const userDataDir = getRandomUserDataDir(this.defaultOptions);
const logsPath = suiteLogsPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored_from_stable'); const logsPath = suiteLogsPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored_from_stable');
const crashesPath = suiteCrashPath(this.defaultOptions, 'test_verifies_opened_editors_are_restored_from_stable');
const stableOptions: ApplicationOptions = Object.assign({}, this.defaultOptions); const stableOptions: ApplicationOptions = Object.assign({}, this.defaultOptions);
stableOptions.codePath = stableCodePath; stableOptions.codePath = stableCodePath;
stableOptions.userDataDir = userDataDir; stableOptions.userDataDir = userDataDir;
stableOptions.quality = Quality.Stable; stableOptions.quality = Quality.Stable;
stableOptions.logsPath = logsPath; stableOptions.logsPath = logsPath;
stableOptions.crashesPath = crashesPath;
stableApp = new Application(stableOptions); stableApp = new Application(stableOptions);
await stableApp.start(); await stableApp.start();
@ -176,6 +181,7 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
const insiderOptions: ApplicationOptions = Object.assign({}, this.defaultOptions); const insiderOptions: ApplicationOptions = Object.assign({}, this.defaultOptions);
insiderOptions.userDataDir = userDataDir; insiderOptions.userDataDir = userDataDir;
insiderOptions.logsPath = logsPath; insiderOptions.logsPath = logsPath;
insiderOptions.crashesPath = crashesPath;
insidersApp = new Application(insiderOptions); insidersApp = new Application(insiderOptions);
await insidersApp.start(); await insidersApp.start();
@ -205,12 +211,14 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
const userDataDir = getRandomUserDataDir(this.defaultOptions); const userDataDir = getRandomUserDataDir(this.defaultOptions);
const logsPath = suiteLogsPath(this.defaultOptions, title); const logsPath = suiteLogsPath(this.defaultOptions, title);
const crashesPath = suiteCrashPath(this.defaultOptions, title);
const stableOptions: ApplicationOptions = Object.assign({}, this.defaultOptions); const stableOptions: ApplicationOptions = Object.assign({}, this.defaultOptions);
stableOptions.codePath = stableCodePath; stableOptions.codePath = stableCodePath;
stableOptions.userDataDir = userDataDir; stableOptions.userDataDir = userDataDir;
stableOptions.quality = Quality.Stable; stableOptions.quality = Quality.Stable;
stableOptions.logsPath = logsPath; stableOptions.logsPath = logsPath;
stableOptions.crashesPath = crashesPath;
stableApp = new Application(stableOptions); stableApp = new Application(stableOptions);
await stableApp.start(); await stableApp.start();
@ -240,6 +248,7 @@ export function setup(ensureStableCode: () => string | undefined, logger: Logger
const insiderOptions: ApplicationOptions = Object.assign({}, this.defaultOptions); const insiderOptions: ApplicationOptions = Object.assign({}, this.defaultOptions);
insiderOptions.userDataDir = userDataDir; insiderOptions.userDataDir = userDataDir;
insiderOptions.logsPath = logsPath; insiderOptions.logsPath = logsPath;
insiderOptions.crashesPath = crashesPath;
insidersApp = new Application(insiderOptions); insidersApp = new Application(insiderOptions);
await insidersApp.start(); await insidersApp.start();

View file

@ -77,6 +77,21 @@ const logsRootPath = (() => {
return path.join(logsParentPath, logsName); return path.join(logsParentPath, logsName);
})(); })();
const crashesRootPath = (() => {
const crashesParentPath = path.join(rootPath, '.build', 'crashes');
let crashesName: string;
if (opts.web) {
crashesName = 'smoke-tests-browser';
} else if (opts.remote) {
crashesName = 'smoke-tests-remote';
} else {
crashesName = 'smoke-tests-electron';
}
return path.join(crashesParentPath, crashesName);
})();
const logger = createLogger(); const logger = createLogger();
function createLogger(): Logger { function createLogger(): Logger {
@ -342,6 +357,7 @@ before(async function () {
extensionsPath, extensionsPath,
logger, logger,
logsPath: path.join(logsRootPath, 'suite_unknown'), logsPath: path.join(logsRootPath, 'suite_unknown'),
crashesPath: path.join(crashesRootPath, 'suite_unknown'),
verbose: opts.verbose, verbose: opts.verbose,
remote: opts.remote, remote: opts.remote,
web: opts.web, web: opts.web,

View file

@ -88,18 +88,24 @@ export function installDiagnosticsHandler(logger: Logger, appFn?: () => Applicat
} }
let logsCounter = 1; let logsCounter = 1;
let crashCounter = 1;
export function suiteLogsPath(options: ApplicationOptions, suiteName: string): string { export function suiteLogsPath(options: ApplicationOptions, suiteName: string): string {
return join(dirname(options.logsPath), `${logsCounter++}_suite_${suiteName.replace(/[^a-z0-9\-]/ig, '_')}`); return join(dirname(options.logsPath), `${logsCounter++}_suite_${suiteName.replace(/[^a-z0-9\-]/ig, '_')}`);
} }
export function suiteCrashPath(options: ApplicationOptions, suiteName: string): string {
return join(dirname(options.crashesPath), `${crashCounter++}_suite_${suiteName.replace(/[^a-z0-9\-]/ig, '_')}`);
}
function installAppBeforeHandler(optionsTransform?: (opts: ApplicationOptions) => ApplicationOptions) { function installAppBeforeHandler(optionsTransform?: (opts: ApplicationOptions) => ApplicationOptions) {
before(async function () { before(async function () {
const suiteName = this.test?.parent?.title ?? 'unknown'; const suiteName = this.test?.parent?.title ?? 'unknown';
this.app = createApp({ this.app = createApp({
...this.defaultOptions, ...this.defaultOptions,
logsPath: suiteLogsPath(this.defaultOptions, suiteName) logsPath: suiteLogsPath(this.defaultOptions, suiteName),
crashesPath: suiteCrashPath(this.defaultOptions, suiteName)
}, optionsTransform); }, optionsTransform);
await this.app.start(); await this.app.start();
}); });