Skip to content

Commit 48251d4

Browse files
committed
test: allow running routeWebSocket tests on different host
1 parent 7d7bf50 commit 48251d4

File tree

2 files changed

+40
-38
lines changed

2 files changed

+40
-38
lines changed

tests/config/testserver/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export class TestServer {
5454
readonly PREFIX: string;
5555
readonly CROSS_PROCESS_PREFIX: string;
5656
readonly EMPTY_PAGE: string;
57+
readonly HOST: string;
5758

5859
static async create(dirPath: string, port: number, loopback?: string, loopback2?: string): Promise<TestServer> {
5960
const server = new TestServer(dirPath, port, loopback, loopback2);
@@ -118,6 +119,7 @@ export class TestServer {
118119
this.PREFIX = `${protocol}://${same_origin}:${port}`;
119120
this.CROSS_PROCESS_PREFIX = `${protocol}://${cross_origin}:${port}`;
120121
this.EMPTY_PAGE = `${protocol}://${same_origin}:${port}/empty.html`;
122+
this.HOST = new URL(this.EMPTY_PAGE).host;
121123
}
122124

123125
async waitUntilReady() {

tests/library/route-web-socket.spec.ts

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ function withResolvers<T = void>() {
3636

3737
async function setupWS(target: Page | Frame, server: TestServer, binaryType: 'blob' | 'arraybuffer', protocols?: string | string[], relativeURL?: boolean) {
3838
await target.goto(server.EMPTY_PAGE);
39-
const wsUrl = relativeURL ? '/ws' : 'ws://localhost:' + server.PORT + '/ws';
39+
const wsUrl = relativeURL ? '/ws' : 'ws://' + server.HOST + '/ws';
4040
await target.evaluate(({ wsUrl, binaryType, protocols }) => {
4141
window.log = [];
4242
window.ws = new WebSocket(wsUrl, protocols);
@@ -87,7 +87,7 @@ for (const mock of ['no-mock', 'no-match', 'pass-through']) {
8787
ws.send('hello');
8888
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
8989
'open',
90-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
90+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
9191
]);
9292
expect(await page.evaluate(() => window.ws.readyState)).toBe(1);
9393
const messagePromise = new Promise(f => ws.once('message', data => f(data.toString())));
@@ -97,7 +97,7 @@ for (const mock of ['no-mock', 'no-match', 'pass-through']) {
9797
await expect.poll(() => page.evaluate(() => window.ws.readyState)).toBe(3);
9898
expect(await page.evaluate(() => window.log)).toEqual([
9999
'open',
100-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
100+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
101101
'close code=1008 reason=oops wasClean=true',
102102
]);
103103
});
@@ -109,7 +109,7 @@ for (const mock of ['no-mock', 'no-match', 'pass-through']) {
109109
ws.send(Buffer.from('hi'));
110110
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
111111
'open',
112-
`message: data=blob:hi origin=ws://localhost:${server.PORT} lastEventId=`,
112+
`message: data=blob:hi origin=ws://${server.HOST} lastEventId=`,
113113
]);
114114
const messagePromise = new Promise(f => ws.once('message', data => f(data.toString())));
115115
await page.evaluate(() => window.ws.send(new Blob([new Uint8Array(['h'.charCodeAt(0), 'i'.charCodeAt(0)])])));
@@ -123,7 +123,7 @@ for (const mock of ['no-mock', 'no-match', 'pass-through']) {
123123
ws.send(Buffer.from('hi'));
124124
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
125125
'open',
126-
`message: data=arraybuffer:hi origin=ws://localhost:${server.PORT} lastEventId=`,
126+
`message: data=arraybuffer:hi origin=ws://${server.HOST} lastEventId=`,
127127
]);
128128
const messagePromise = new Promise(f => ws.once('message', data => f(data.toString())));
129129
await page.evaluate(() => window.ws.send(new Uint8Array(['h'.charCodeAt(0), 'i'.charCodeAt(0)]).buffer));
@@ -208,7 +208,7 @@ for (const mock of ['no-mock', 'no-match', 'pass-through']) {
208208
ws.send(Buffer.from('hi'));
209209
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
210210
'open',
211-
`message: data=blob:hi origin=ws://localhost:${server.PORT} lastEventId=`,
211+
`message: data=blob:hi origin=ws://${server.HOST} lastEventId=`,
212212
]);
213213
const messagePromise = new Promise(f => ws.once('message', data => f(data.toString())));
214214
await page.evaluate(() => window.ws.send(new Blob([new Uint8Array(['h'.charCodeAt(0), 'i'.charCodeAt(0)])])));
@@ -232,14 +232,14 @@ test('should work with ws.close', async ({ page, server }) => {
232232
route.send('hello');
233233
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
234234
'open',
235-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
235+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
236236
]);
237237

238238
const closedPromise = new Promise(f => ws.once('close', (code, reason) => f({ code, reason: reason.toString() })));
239239
await route.close({ code: 3009, reason: 'oops' });
240240
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
241241
'open',
242-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
242+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
243243
'close code=3009 reason=oops wasClean=true',
244244
]);
245245
expect(await closedPromise).toEqual({ code: 3009, reason: 'oops' });
@@ -259,17 +259,17 @@ test('should pattern match', async ({ page, server }) => {
259259
const wsPromise = server.waitForWebSocket();
260260

261261
await page.goto('about:blank');
262-
await page.evaluate(async ({ port }) => {
262+
await page.evaluate(async ({ host }) => {
263263
window.log = [];
264-
(window as any).ws1 = new WebSocket('ws://localhost:' + port + '/ws');
264+
(window as any).ws1 = new WebSocket('ws://' + host + '/ws');
265265
(window as any).ws1.addEventListener('message', event => window.log.push(`ws1:${event.data}`));
266-
(window as any).ws2 = new WebSocket('ws://localhost:' + port + '/something/something/mock-ws');
266+
(window as any).ws2 = new WebSocket('ws://' + host + '/something/something/mock-ws');
267267
(window as any).ws2.addEventListener('message', event => window.log.push(`ws2:${event.data}`));
268268
await Promise.all([
269269
new Promise(f => (window as any).ws1.addEventListener('open', f)),
270270
new Promise(f => (window as any).ws2.addEventListener('open', f)),
271271
]);
272-
}, { port: server.PORT });
272+
}, { host: server.HOST });
273273

274274
const ws = await wsPromise;
275275
ws.on('message', () => ws.send('response'));
@@ -328,8 +328,8 @@ test('should work with server', async ({ page, server }) => {
328328
ws.send('pass-server');
329329
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
330330
'open',
331-
`message: data=modified origin=ws://localhost:${server.PORT} lastEventId=`,
332-
`message: data=pass-server origin=ws://localhost:${server.PORT} lastEventId=`,
331+
`message: data=modified origin=ws://${server.HOST} lastEventId=`,
332+
`message: data=pass-server origin=ws://${server.HOST} lastEventId=`,
333333
]);
334334

335335
await page.evaluate(() => {
@@ -341,19 +341,19 @@ test('should work with server', async ({ page, server }) => {
341341
await expect.poll(() => log).toEqual(['message: fake', 'message: modified', 'message: pass-client']);
342342
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
343343
'open',
344-
`message: data=modified origin=ws://localhost:${server.PORT} lastEventId=`,
345-
`message: data=pass-server origin=ws://localhost:${server.PORT} lastEventId=`,
346-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
344+
`message: data=modified origin=ws://${server.HOST} lastEventId=`,
345+
`message: data=pass-server origin=ws://${server.HOST} lastEventId=`,
346+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
347347
]);
348348

349349
const route = await promise;
350350
route.send('another');
351351
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
352352
'open',
353-
`message: data=modified origin=ws://localhost:${server.PORT} lastEventId=`,
354-
`message: data=pass-server origin=ws://localhost:${server.PORT} lastEventId=`,
355-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
356-
`message: data=another origin=ws://localhost:${server.PORT} lastEventId=`,
353+
`message: data=modified origin=ws://${server.HOST} lastEventId=`,
354+
`message: data=pass-server origin=ws://${server.HOST} lastEventId=`,
355+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
356+
`message: data=another origin=ws://${server.HOST} lastEventId=`,
357357
]);
358358

359359
await page.evaluate(() => {
@@ -391,8 +391,8 @@ test('should work without server', async ({ page, server }) => {
391391

392392
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
393393
'open',
394-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
395-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
394+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
395+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
396396
]);
397397

398398
const route = await promise;
@@ -401,9 +401,9 @@ test('should work without server', async ({ page, server }) => {
401401

402402
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
403403
'open',
404-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
405-
`message: data=response origin=ws://localhost:${server.PORT} lastEventId=`,
406-
`message: data=another origin=ws://localhost:${server.PORT} lastEventId=`,
404+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
405+
`message: data=response origin=ws://${server.HOST} lastEventId=`,
406+
`message: data=another origin=ws://${server.HOST} lastEventId=`,
407407
'close code=3008 reason=oops wasClean=true',
408408
]);
409409
});
@@ -422,7 +422,7 @@ test('should emit close upon frame navigation', async ({ page, server }) => {
422422

423423
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
424424
'open',
425-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
425+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
426426
]);
427427

428428
const closedPromise = new Promise<void>(f => route.onClose(() => f()));
@@ -445,7 +445,7 @@ test('should emit close upon frame detach', async ({ page, server }) => {
445445

446446
await expect.poll(() => frame.evaluate(() => window.log)).toEqual([
447447
'open',
448-
`message: data=hello origin=ws://localhost:${server.PORT} lastEventId=`,
448+
`message: data=hello origin=ws://${server.HOST} lastEventId=`,
449449
]);
450450

451451
const closedPromise = new Promise<void>(f => route.onClose(() => f()));
@@ -476,13 +476,13 @@ test('should route on context', async ({ page, server }) => {
476476
});
477477

478478
await page.goto('about:blank');
479-
await page.evaluate(({ port }) => {
479+
await page.evaluate(({ host }) => {
480480
window.log = [];
481-
(window as any).ws1 = new WebSocket('ws://localhost:' + port + '/ws1');
481+
(window as any).ws1 = new WebSocket('ws://' + host + '/ws1');
482482
(window as any).ws1.addEventListener('message', event => window.log.push(`ws1:${event.data}`));
483-
(window as any).ws2 = new WebSocket('ws://localhost:' + port + '/ws2');
483+
(window as any).ws2 = new WebSocket('ws://' + host + '/ws2');
484484
(window as any).ws2.addEventListener('message', event => window.log.push(`ws2:${event.data}`));
485-
}, { port: server.PORT });
485+
}, { host: server.HOST });
486486

487487
await page.evaluate(() => (window as any).ws1.send('request'));
488488
await expect.poll(() => page.evaluate(() => window.log)).toEqual([`ws1:page-mock-2`]);
@@ -535,20 +535,20 @@ test('should throw when connecting twice', async ({ page, server }) => {
535535
test('should work with no trailing slash', async ({ page, server }) => {
536536
const log: string[] = [];
537537
// No trailing slash!
538-
await page.routeWebSocket('ws://localhost:' + server.PORT, ws => {
538+
await page.routeWebSocket('ws://' + server.HOST, ws => {
539539
ws.onMessage(message => {
540540
log.push(message as string);
541541
ws.send('response');
542542
});
543543
});
544544

545545
await page.goto('about:blank');
546-
await page.evaluate(({ port }) => {
546+
await page.evaluate(({ host }) => {
547547
window.log = [];
548548
// No trailing slash!
549-
window.ws = new WebSocket('ws://localhost:' + port);
549+
window.ws = new WebSocket('ws://' + host);
550550
window.ws.addEventListener('message', event => window.log.push(event.data));
551-
}, { port: server.PORT });
551+
}, { host: server.HOST });
552552

553553
await expect.poll(() => page.evaluate(() => window.ws.readyState)).toBe(1);
554554
await page.evaluate(() => window.ws.send('query'));
@@ -557,7 +557,7 @@ test('should work with no trailing slash', async ({ page, server }) => {
557557
});
558558

559559
test('should work with baseURL', async ({ contextFactory, server }) => {
560-
const context = await contextFactory({ baseURL: 'http://localhost:' + server.PORT });
560+
const context = await contextFactory({ baseURL: 'http://' + server.HOST });
561561
const page = await context.newPage();
562562

563563
await page.routeWebSocket('/ws', ws => {
@@ -575,6 +575,6 @@ test('should work with baseURL', async ({ contextFactory, server }) => {
575575

576576
await expect.poll(() => page.evaluate(() => window.log)).toEqual([
577577
'open',
578-
`message: data=echo origin=ws://localhost:${server.PORT} lastEventId=`,
578+
`message: data=echo origin=ws://${server.HOST} lastEventId=`,
579579
]);
580580
});

0 commit comments

Comments
 (0)