fixes for remote smoke tests against a build

This commit is contained in:
Martin Aeschlimann 2019-06-04 16:17:36 +02:00
parent d7977c880f
commit be547e26fc
5 changed files with 32 additions and 5 deletions

View file

@ -65,7 +65,7 @@ export function activate(context: vscode.ExtensionContext) {
return; return;
} }
const { updateUrl, commit, quality } = getProductConfiguration(); const { updateUrl, commit, quality, serverDataFolderName, dataFolderName } = getProductConfiguration();
if (!commit) { // dev mode if (!commit) { // dev mode
const vscodePath = path.resolve(path.join(context.extensionPath, '..', '..')); const vscodePath = path.resolve(path.join(context.extensionPath, '..', '..'));
const nodeExec = process.platform === 'win32' ? 'node.exe' : 'node'; const nodeExec = process.platform === 'win32' ? 'node.exe' : 'node';
@ -86,7 +86,10 @@ export function activate(context: vscode.ExtensionContext) {
const env = getNewEnv(); const env = getNewEnv();
extHostProcess = cp.spawn(nodePath, [path.join('out', 'remoteExtensionHostAgent'), '--port=0'], { cwd: vscodePath, env }); extHostProcess = cp.spawn(nodePath, [path.join('out', 'remoteExtensionHostAgent'), '--port=0'], { cwd: vscodePath, env });
} else { } else {
const serverBin = path.resolve(os.homedir(), '.vscode-remote', 'bin'); const remoteDataDir = process.env['TESTRESOLVER_DATA_FOLDER'] || path.join(os.homedir(), serverDataFolderName || `${dataFolderName}-testresolver`);
outputChannel.appendLine(`Using data folder at ${remoteDataDir}`);
const serverBin = path.join(remoteDataDir, 'bin');
progress.report({ message: 'Installing VSCode Server' }); progress.report({ message: 'Installing VSCode Server' });
const serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin); const serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin);
outputChannel.appendLine(`Using server build at ${serverLocation}`); outputChannel.appendLine(`Using server build at ${serverLocation}`);
@ -95,8 +98,10 @@ export function activate(context: vscode.ExtensionContext) {
const env = getNewEnv(); const env = getNewEnv();
env['PATH'] = path.join(serverLocation, 'bin') + path.delimiter + env['PATH']; // code command for the terminal env['PATH'] = path.join(serverLocation, 'bin') + path.delimiter + env['PATH']; // code command for the terminal
env['VSCODE_AGENT_FOLDER'] = remoteDataDir;
extHostProcess = cp.spawn(path.join(serverLocation, 'server.sh'), commandArgs, { env, cwd: serverLocation }); const serverCommand = process.platform === 'win32' ? 'server.bat' : 'server.sh';
extHostProcess = cp.spawn(path.join(serverLocation, serverCommand), commandArgs, { env, cwd: serverLocation });
} }
extHostProcess.stdout.on('data', (data: Buffer) => processOutput(data.toString())); extHostProcess.stdout.on('data', (data: Buffer) => processOutput(data.toString()));
extHostProcess.stderr.on('data', (data: Buffer) => processOutput(data.toString())); extHostProcess.stderr.on('data', (data: Buffer) => processOutput(data.toString()));
@ -166,6 +171,8 @@ export interface IProductConfiguration {
updateUrl: string; updateUrl: string;
commit: string; commit: string;
quality: string; quality: string;
dataFolderName: string;
serverDataFolderName?: string;
} }
function getProductConfiguration(): IProductConfiguration { function getProductConfiguration(): IProductConfiguration {

View file

@ -47,6 +47,10 @@ export class Application {
return this.options.logger; return this.options.logger;
} }
get remote(): boolean {
return !!this.options.remote;
}
private _workspacePathOrFolder: string; private _workspacePathOrFolder: string;
get workspacePathOrFolder(): string { get workspacePathOrFolder(): string {
return this._workspacePathOrFolder; return this._workspacePathOrFolder;
@ -135,6 +139,10 @@ export class Application {
await this.code.waitForWindowIds(ids => ids.length > 0); await this.code.waitForWindowIds(ids => ids.length > 0);
await this.code.waitForElement('.monaco-workbench'); await this.code.waitForElement('.monaco-workbench');
if (this.remote) {
await this.code.waitForElement('.monaco-workbench .statusbar-item.statusbar-entry a[title="Editing on TestResolver"]');
}
// wait a bit, since focus might be stolen off widgets // wait a bit, since focus might be stolen off widgets
// as soon as they open (eg quick open) // as soon as they open (eg quick open)
await new Promise(c => setTimeout(c, 1000)); await new Promise(c => setTimeout(c, 1000));

View file

@ -20,6 +20,10 @@ export function setup() {
await app.workbench.extensions.installExtension('michelkaporin.vscode-smoketest-check', 'vscode-smoketest-check'); await app.workbench.extensions.installExtension('michelkaporin.vscode-smoketest-check', 'vscode-smoketest-check');
await app.workbench.extensions.waitForExtensionsViewlet(); await app.workbench.extensions.waitForExtensionsViewlet();
if (app.remote) {
await app.reload();
}
await app.workbench.quickopen.runCommand('Smoke Test Check'); await app.workbench.quickopen.runCommand('Smoke Test Check');
await app.workbench.statusbar.waitForStatusbarText('smoke test', 'VS Code Smoke Test Check'); await app.workbench.statusbar.waitForStatusbarText('smoke test', 'VS Code Smoke Test Check');
}); });

View file

@ -47,7 +47,9 @@ export function setup() {
const app = this.app as Application; const app = this.app as Application;
await app.workbench.quickopen.openQuickOpen('*.*'); await app.workbench.quickopen.openQuickOpen('*.*');
await app.workbench.quickopen.waitForQuickOpenElements(names => names.length === 6); const numResultsExpected = this.app.remote ? 7 : 6;
await app.workbench.quickopen.waitForQuickOpenElements(names => names.length === numResultsExpected);
await app.workbench.quickopen.closeQuickOpen(); await app.workbench.quickopen.closeQuickOpen();
}); });

View file

@ -7,6 +7,7 @@ import * as path from 'path';
import * as cp from 'child_process'; import * as cp from 'child_process';
import * as os from 'os'; import * as os from 'os';
import * as fs from 'fs'; import * as fs from 'fs';
import * as mkdirp from 'mkdirp';
import { tmpName } from 'tmp'; import { tmpName } from 'tmp';
import { IDriver, connect as connectDriver, IDisposable, IElement, Thenable } from './driver'; import { IDriver, connect as connectDriver, IDisposable, IElement, Thenable } from './driver';
import { Logger } from '../logger'; import { Logger } from '../logger';
@ -123,6 +124,8 @@ export async function spawn(options: SpawnOptions): Promise<Code> {
'--driver', handle '--driver', handle
]; ];
const env = process.env;
if (options.remote) { if (options.remote) {
// Replace workspace path with URI // Replace workspace path with URI
args.shift(); args.shift();
@ -139,6 +142,9 @@ export async function spawn(options: SpawnOptions): Promise<Code> {
} }
} }
args.push('--enable-proposed-api=vscode.vscode-test-resolver'); args.push('--enable-proposed-api=vscode.vscode-test-resolver');
const remoteDataDir = `${options.userDataDir}-server`;
mkdirp.sync(remoteDataDir);
env['TESTRESOLVER_DATA_FOLDER'] = remoteDataDir;
} }
if (!codePath) { if (!codePath) {
@ -157,7 +163,7 @@ export async function spawn(options: SpawnOptions): Promise<Code> {
args.push(...options.extraArgs); args.push(...options.extraArgs);
} }
const spawnOptions: cp.SpawnOptions = {}; const spawnOptions: cp.SpawnOptions = { env };
const child = cp.spawn(electronPath, args, spawnOptions); const child = cp.spawn(electronPath, args, spawnOptions);