Skip to content

Commit be13365

Browse files
authored
cherry-pick(#30853): chore: print friendly localhost address from http server (#30881)
1 parent 67b85e6 commit be13365

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

packages/playwright-core/src/server/trace/viewer/traceViewer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ export async function runTraceViewerApp(traceUrls: string[], browserName: string
145145
validateTraceUrls(traceUrls);
146146
const server = await startTraceViewerServer(options);
147147
await installRootRedirect(server, traceUrls, options);
148-
const page = await openTraceViewerApp(server.urlPrefix(), browserName, options);
148+
const page = await openTraceViewerApp(server.urlPrefix('precise'), browserName, options);
149149
if (exitOnClose)
150150
page.on('close', () => gracefullyProcessExitDoNotHang(0));
151151
return page;
@@ -155,7 +155,7 @@ export async function runTraceInBrowser(traceUrls: string[], options: TraceViewe
155155
validateTraceUrls(traceUrls);
156156
const server = await startTraceViewerServer(options);
157157
await installRootRedirect(server, traceUrls, options);
158-
await openTraceInBrowser(server.urlPrefix());
158+
await openTraceInBrowser(server.urlPrefix('human-readable'));
159159
}
160160

161161
export async function openTraceViewerApp(url: string, browserName: string, options?: TraceViewerAppOptions): Promise<Page> {

packages/playwright-core/src/utils/httpServer.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,14 @@ export type Transport = {
3434

3535
export class HttpServer {
3636
private _server: http.Server;
37-
private _urlPrefix: string;
37+
private _urlPrefixPrecise: string = '';
38+
private _urlPrefixHumanReadable: string = '';
3839
private _port: number = 0;
3940
private _started = false;
4041
private _routes: { prefix?: string, exact?: string, handler: ServerRouteHandler }[] = [];
4142
private _wsGuid: string | undefined;
4243

43-
constructor(address: string = '') {
44-
this._urlPrefix = address;
44+
constructor() {
4545
this._server = createHttpServer(this._onRequest.bind(this));
4646
}
4747

@@ -102,7 +102,7 @@ export class HttpServer {
102102
return this._wsGuid;
103103
}
104104

105-
async start(options: { port?: number, preferredPort?: number, host?: string } = {}): Promise<string> {
105+
async start(options: { port?: number, preferredPort?: number, host?: string } = {}): Promise<void> {
106106
assert(!this._started, 'server already started');
107107
this._started = true;
108108

@@ -121,24 +121,23 @@ export class HttpServer {
121121

122122
const address = this._server.address();
123123
assert(address, 'Could not bind server socket');
124-
if (!this._urlPrefix) {
125-
if (typeof address === 'string') {
126-
this._urlPrefix = address;
127-
} else {
128-
this._port = address.port;
129-
const resolvedHost = address.family === 'IPv4' ? address.address : `[${address.address}]`;
130-
this._urlPrefix = `http://${resolvedHost}:${address.port}`;
131-
}
124+
if (typeof address === 'string') {
125+
this._urlPrefixPrecise = address;
126+
this._urlPrefixHumanReadable = address;
127+
} else {
128+
this._port = address.port;
129+
const resolvedHost = address.family === 'IPv4' ? address.address : `[${address.address}]`;
130+
this._urlPrefixPrecise = `http://${resolvedHost}:${address.port}`;
131+
this._urlPrefixHumanReadable = `http://${host}:${address.port}`;
132132
}
133-
return this._urlPrefix;
134133
}
135134

136135
async stop() {
137136
await new Promise(cb => this._server!.close(cb));
138137
}
139138

140-
urlPrefix(): string {
141-
return this._urlPrefix;
139+
urlPrefix(purpose: 'human-readable' | 'precise'): string {
140+
return purpose === 'human-readable' ? this._urlPrefixHumanReadable : this._urlPrefixPrecise;
142141
}
143142

144143
serveFile(request: http.IncomingMessage, response: http.ServerResponse, absoluteFilePath: string, headers?: { [name: string]: string }): boolean {

packages/playwright/src/reporters/html.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,8 @@ export async function showHTMLReport(reportFolder: string | undefined, host: str
177177
return;
178178
}
179179
const server = startHtmlReportServer(folder);
180-
let url = await server.start({ port, host, preferredPort: port ? undefined : 9323 });
180+
await server.start({ port, host, preferredPort: port ? undefined : 9323 });
181+
let url = server.urlPrefix('human-readable');
181182
console.log('');
182183
console.log(colors.cyan(` Serving HTML report at ${url}. Press Ctrl+C to quit.`));
183184
if (testId)

packages/playwright/src/runner/testServer.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -418,9 +418,9 @@ export async function runUIMode(configFile: string | undefined, options: TraceVi
418418
return await innerRunTestServer(configLocation, options, async (server: HttpServer, cancelPromise: ManualPromise<void>) => {
419419
await installRootRedirect(server, [], { ...options, webApp: 'uiMode.html' });
420420
if (options.host !== undefined || options.port !== undefined) {
421-
await openTraceInBrowser(server.urlPrefix());
421+
await openTraceInBrowser(server.urlPrefix('human-readable'));
422422
} else {
423-
const page = await openTraceViewerApp(server.urlPrefix(), 'chromium', {
423+
const page = await openTraceViewerApp(server.urlPrefix('precise'), 'chromium', {
424424
headless: isUnderTest() && process.env.PWTEST_HEADED_FOR_TEST !== '1',
425425
persistentContextOptions: {
426426
handleSIGINT: false,
@@ -435,7 +435,7 @@ export async function runTestServer(configFile: string | undefined, options: { h
435435
const configLocation = resolveConfigLocation(configFile);
436436
return await innerRunTestServer(configLocation, options, async server => {
437437
// eslint-disable-next-line no-console
438-
console.log('Listening on ' + server.urlPrefix().replace('http:', 'ws:') + '/' + server.wsGuid());
438+
console.log('Listening on ' + server.urlPrefix('precise').replace('http:', 'ws:') + '/' + server.wsGuid());
439439
});
440440
}
441441

tests/playwright-test/reporter-blob.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ const test = baseTest.extend<{
3838
await use(async (reportFolder?: string) => {
3939
reportFolder ??= test.info().outputPath('playwright-report');
4040
server = startHtmlReportServer(reportFolder) as HttpServer;
41-
const location = await server.start();
42-
await page.goto(location);
41+
await server.start();
42+
await page.goto(server.urlPrefix('precise'));
4343
});
4444
await server?.stop();
4545
}

tests/playwright-test/reporter-html.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ const test = baseTest.extend<{ showReport: (reportFolder?: string) => Promise<vo
2929
await use(async (reportFolder?: string) => {
3030
reportFolder ??= testInfo.outputPath('playwright-report');
3131
server = startHtmlReportServer(reportFolder) as HttpServer;
32-
const location = await server.start();
33-
await page.goto(location);
32+
await server.start();
33+
await page.goto(server.urlPrefix('precise'));
3434
});
3535
await server?.stop();
3636
}

0 commit comments

Comments
 (0)