mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
test: unflake some websocket tests (#11069)
This commit is contained in:
parent
f933759ad1
commit
af153b9826
@ -50,7 +50,9 @@ it('should emit close events', async ({ page, server }) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should emit frame events', async ({ page, server }) => {
|
it('should emit frame events', async ({ page, server }) => {
|
||||||
server.sendOnWebSocketConnection('incoming');
|
server.onceWebSocketConnection(ws => {
|
||||||
|
ws.on('message', () => ws.send('incoming'));
|
||||||
|
});
|
||||||
let socketClosed;
|
let socketClosed;
|
||||||
const socketClosePromise = new Promise(f => socketClosed = f);
|
const socketClosePromise = new Promise(f => socketClosed = f);
|
||||||
const log = [];
|
const log = [];
|
||||||
@ -64,16 +66,17 @@ it('should emit frame events', async ({ page, server }) => {
|
|||||||
const ws = new WebSocket('ws://localhost:' + port + '/ws');
|
const ws = new WebSocket('ws://localhost:' + port + '/ws');
|
||||||
ws.addEventListener('open', () => ws.send('outgoing'));
|
ws.addEventListener('open', () => ws.send('outgoing'));
|
||||||
ws.addEventListener('message', () => { ws.close(); });
|
ws.addEventListener('message', () => { ws.close(); });
|
||||||
|
(window as any).ws = ws;
|
||||||
}, server.PORT);
|
}, server.PORT);
|
||||||
await socketClosePromise;
|
await socketClosePromise;
|
||||||
expect(log[0]).toBe('open');
|
expect(log).toEqual(['open', 'sent<outgoing>', 'received<incoming>', 'close']);
|
||||||
expect(log[3]).toBe('close');
|
|
||||||
log.sort();
|
|
||||||
expect(log.join(':')).toBe('close:open:received<incoming>:sent<outgoing>');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should filter out the close events when the server closes with a message', async ({ page, server }) => {
|
it('should filter out the close events when the server closes with a message', async ({ page, server }) => {
|
||||||
server.sendOnWebSocketConnection('incoming');
|
server.onceWebSocketConnection(ws => {
|
||||||
|
ws.send('incoming');
|
||||||
|
ws.on('message', () => ws.close(1003, 'closed by Playwright test-server'));
|
||||||
|
});
|
||||||
let socketClosed;
|
let socketClosed;
|
||||||
const socketClosePromise = new Promise(f => socketClosed = f);
|
const socketClosePromise = new Promise(f => socketClosed = f);
|
||||||
const log = [];
|
const log = [];
|
||||||
@ -84,15 +87,12 @@ it('should filter out the close events when the server closes with a message', a
|
|||||||
ws.on('close', () => { log.push('close'); socketClosed(); });
|
ws.on('close', () => { log.push('close'); socketClosed(); });
|
||||||
});
|
});
|
||||||
await page.evaluate(port => {
|
await page.evaluate(port => {
|
||||||
const ws = new WebSocket('ws://localhost:' + port + '/ws-emit-and-close');
|
const ws = new WebSocket('ws://localhost:' + port + '/ws');
|
||||||
ws.addEventListener('open', () => ws.send('outgoing'));
|
ws.addEventListener('message', () => ws.send('outgoing'));
|
||||||
ws.addEventListener('message', () => { ws.close(); });
|
(window as any).ws = ws;
|
||||||
}, server.PORT);
|
}, server.PORT);
|
||||||
await socketClosePromise;
|
await socketClosePromise;
|
||||||
expect(log[0]).toBe('open');
|
expect(log).toEqual(['open', 'received<incoming>', 'sent<outgoing>', 'close']);
|
||||||
expect(log[3]).toBe('close');
|
|
||||||
log.sort();
|
|
||||||
expect(log.join(':')).toBe('close:open:received<incoming>:sent<outgoing>');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should pass self as argument to close event', async ({ page, server }) => {
|
it('should pass self as argument to close event', async ({ page, server }) => {
|
||||||
|
@ -75,7 +75,7 @@ class TestServer {
|
|||||||
const pathname = url.parse(request.url).pathname;
|
const pathname = url.parse(request.url).pathname;
|
||||||
if (pathname === '/ws-slow')
|
if (pathname === '/ws-slow')
|
||||||
await new Promise(f => setTimeout(f, 2000));
|
await new Promise(f => setTimeout(f, 2000));
|
||||||
if (!['/ws', '/ws-slow', '/ws-emit-and-close'].includes(pathname)) {
|
if (!['/ws', '/ws-slow'].includes(pathname)) {
|
||||||
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
||||||
socket.destroy();
|
socket.destroy();
|
||||||
return;
|
return;
|
||||||
@ -83,10 +83,6 @@ class TestServer {
|
|||||||
this._wsServer.handleUpgrade(request, socket, head, ws => {
|
this._wsServer.handleUpgrade(request, socket, head, ws => {
|
||||||
// Next emit is only for our internal 'connection' listeners.
|
// Next emit is only for our internal 'connection' listeners.
|
||||||
this._wsServer.emit('connection', ws, request);
|
this._wsServer.emit('connection', ws, request);
|
||||||
if (this._onWebSocketConnectionData !== undefined)
|
|
||||||
ws.send(this._onWebSocketConnectionData);
|
|
||||||
if (pathname === '/ws-emit-and-close')
|
|
||||||
ws.close(1003, 'closed by Playwright test-server');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
this._server.listen(port);
|
this._server.listen(port);
|
||||||
@ -110,8 +106,6 @@ class TestServer {
|
|||||||
this._gzipRoutes = new Set();
|
this._gzipRoutes = new Set();
|
||||||
/** @type {!Map<string, !Promise>} */
|
/** @type {!Map<string, !Promise>} */
|
||||||
this._requestSubscribers = new Map();
|
this._requestSubscribers = new Map();
|
||||||
/** @type {string|undefined} */
|
|
||||||
this._onWebSocketConnectionData = undefined;
|
|
||||||
|
|
||||||
const cross_origin = loopback || '127.0.0.1';
|
const cross_origin = loopback || '127.0.0.1';
|
||||||
const same_origin = loopback || 'localhost';
|
const same_origin = loopback || 'localhost';
|
||||||
@ -341,7 +335,7 @@ class TestServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendOnWebSocketConnection(data) {
|
sendOnWebSocketConnection(data) {
|
||||||
this._onWebSocketConnectionData = data;
|
this.onceWebSocketConnection(ws => ws.send(data));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user