Skip to content

Commit 84ef06f

Browse files
committed
Smoke test running
1 parent e4c2a18 commit 84ef06f

File tree

5 files changed

+59
-10
lines changed

5 files changed

+59
-10
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"update-localization-extension": "node build/npm/update-localization-extension.js",
3737
"smoketest": "cd test/smoke && yarn compile && node test/index.js",
3838
"smoketest-no-compile": "cd test/smoke && node test/index.js",
39+
"smoketest-gitpod": "cd test/smoke && node test/index.js --web --verbose --test-repo /workspace/vscode-smoketest-express --headless --screenshots /workspace/screenshots --electronArgs=\"--disable-dev-shm-usage --use-gl=swiftshader\"",
3940
"download-builtin-extensions": "node build/lib/builtInExtensions.js",
4041
"download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js",
4142
"monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit",

resources/server/web.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env sh
2+
ROOT=$(dirname $(dirname "$(dirname "$0")"))
3+
4+
# APP_NAME="gitpodcode"
5+
# VERSION="1.59.1"
6+
# COMMIT="3866c3553be8b268c8a7f8c0482c0c0177aa8bfa"
7+
# EXEC_NAME="code"
8+
CLI_SCRIPT="$ROOT/out/server.js"
9+
#"node" "$CLI_SCRIPT" "$APP_NAME" "$VERSION" "$COMMIT" "$EXEC_NAME" "$@"
10+
"node" "$CLI_SCRIPT" "$@"

src/vs/server/browser/workbench/workbench.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { CancellationToken } from 'vs/base/common/cancellation';
77
import { Event } from 'vs/base/common/event';
88
import { Schemas } from 'vs/base/common/network';
99
import { isEqual } from 'vs/base/common/resources';
10-
import { URI } from 'vs/base/common/uri';
10+
import { URI, UriComponents } from 'vs/base/common/uri';
1111
import { request } from 'vs/base/parts/request/browser/request';
1212
import { localize } from 'vs/nls';
1313
import { parseLogLevel } from 'vs/platform/log/common/log';
1414
import { defaultWebSocketFactory } from 'vs/platform/remote/browser/browserSocketFactory';
1515
import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/windows/common/windows';
16-
import { create, ICredentialsProvider, IHomeIndicator, IProductQualityChangeHandler, IWindowIndicator, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.api';
16+
import { create, ICredentialsProvider, IHomeIndicator, IProductQualityChangeHandler, IWindowIndicator, IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.api';
1717

1818
function doCreateUri(path: string, queryValues: Map<string, string>): URI {
1919
let query: string | undefined = undefined;
@@ -296,6 +296,15 @@ class WindowIndicator implements IWindowIndicator {
296296

297297

298298
(function () {
299+
// Find config by checking for DOM
300+
const configElement = document.getElementById('vscode-workbench-web-configuration');
301+
const configElementAttribute = configElement ? configElement.getAttribute('data-settings') : undefined;
302+
if (!configElement || !configElementAttribute) {
303+
throw new Error('Missing web configuration element');
304+
}
305+
306+
const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute);
307+
299308
// Find workspace to open and payload
300309
let workspace: IWorkspace;
301310
let payload = Object.create(null);
@@ -399,7 +408,8 @@ class WindowIndicator implements IWindowIndicator {
399408
});
400409
},
401410
developmentOptions: {
402-
logLevel: logLevel ? parseLogLevel(logLevel) : undefined
411+
logLevel: logLevel ? parseLogLevel(logLevel) : undefined,
412+
...config.developmentOptions
403413
},
404414
homeIndicator,
405415
windowIndicator,

src/vs/server/node/server.main.ts

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,11 @@ function getMediaMime(forPath: string): string | undefined {
169169
return mapExtToMediaMimes.get(ext.toLowerCase());
170170
}
171171

172+
function serveError(req: http.IncomingMessage, res: http.ServerResponse, errorCode: number, errorMessage: string): void {
173+
res.writeHead(errorCode, { 'Content-Type': 'text/plain' });
174+
res.end(errorMessage);
175+
}
176+
172177
async function serveFile(logService: ILogService, req: http.IncomingMessage, res: http.ServerResponse, filePath: string, responseHeaders: http.OutgoingHttpHeaders = {}) {
173178
try {
174179

@@ -199,9 +204,29 @@ async function serveFile(logService: ILogService, req: http.IncomingMessage, res
199204
}
200205
}
201206

202-
function serveError(req: http.IncomingMessage, res: http.ServerResponse, errorCode: number, errorMessage: string): void {
203-
res.writeHead(errorCode, { 'Content-Type': 'text/plain' });
204-
res.end(errorMessage);
207+
async function handleRoot(req: http.IncomingMessage, resp: http.ServerResponse, entryPointPath: string, environmentService: INativeEnvironmentService) {
208+
if (!req.headers.host) {
209+
return serveError(req, resp, 400, 'Bad request.');
210+
}
211+
212+
const host = req.headers.host;
213+
214+
const workbenchConfig = {
215+
remoteAuthority: host,
216+
developmentOptions: {
217+
enableSmokeTestDriver: environmentService.driverHandle === 'web' ? true : undefined
218+
}
219+
};
220+
221+
const escapeQuote = (str: string) => str.replace(/"/g, '&quot;');
222+
const entryPointContent = (await fs.promises.readFile(entryPointPath))
223+
.toString()
224+
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', escapeQuote(JSON.stringify(workbenchConfig)));
225+
226+
resp.writeHead(200, {
227+
'Content-Type': 'text/html'
228+
});
229+
return resp.end(entryPointContent);
205230
}
206231

207232
interface ServerParsedArgs extends NativeParsedArgs {
@@ -558,6 +583,8 @@ export async function main(options: IServerOptions): Promise<void> {
558583
const requestService = accessor.get(IRequestService);
559584
channelServer.registerChannel('request', new RequestChannel(requestService));
560585

586+
const environmentService = accessor.get(INativeEnvironmentService);
587+
561588
// Delay creation of spdlog for perf reasons (https://github.com/microsoft/vscode/issues/72906)
562589
bufferLogService.logger = new SpdLogLogger('main', join(environmentService.logsPath, `${RemoteExtensionLogFileName}.log`), true, bufferLogService.getLevel());
563590

@@ -588,7 +615,7 @@ export async function main(options: IServerOptions): Promise<void> {
588615

589616
//#region static
590617
if (pathname === '/') {
591-
return serveFile(logService, req, res, devMode ? options.mainDev || WEB_MAIN_DEV : options.main || WEB_MAIN);
618+
return handleRoot(req, res, devMode ? options.mainDev || WEB_MAIN_DEV : options.main || WEB_MAIN, environmentService);
592619
}
593620
if (pathname === '/manifest.json') {
594621
res.writeHead(200, { 'Content-Type': 'application/json' });
@@ -906,7 +933,7 @@ export async function main(options: IServerOptions): Promise<void> {
906933
}
907934
server.listen(port, '0.0.0.0', () => {
908935
const { address, port } = server.address() as net.AddressInfo;
909-
logService.info(`Web UI available at https://${address}:${port}`);
936+
logService.info(`Web UI available at http://${address}:${port}`);
910937
});
911938
});
912939
}

test/automation/src/playwrightDriver.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function buildDriver(browser: playwright.Browser, context: playwright.BrowserCon
4040
getWindowIds: () => {
4141
return Promise.resolve([1]);
4242
},
43-
capturePage: () => Promise.resolve(''),
43+
capturePage: () => page.screenshot().then(buffer => buffer.toString('base64')),
4444
reloadWindow: (windowId) => Promise.resolve(),
4545
exitApplication: async () => {
4646
try {
@@ -206,7 +206,8 @@ export function connect(options: Options = {}): Promise<{ client: IDisposable, d
206206
}
207207
});
208208
const payloadParam = `[["enableProposedApi",""],["skipWelcome","true"]]`;
209-
await page.goto(`${endpoint}&folder=vscode-remote://localhost:9888${URI.file(workspacePath!).path}&payload=${payloadParam}`);
209+
const match = /http:\/\/(.*)/.exec(endpoint!);
210+
await page.goto(`${endpoint}/?folder=vscode-remote://${match![1]}${URI.file(workspacePath!).path}&payload=${payloadParam}`);
210211
const result = {
211212
client: {
212213
dispose: () => {

0 commit comments

Comments
 (0)