fix(connect): provide an error message when ws endpoint is incorrect (#4978)

This commit is contained in:
Dmitry Gozman 2021-01-11 15:53:45 -08:00 committed by GitHub
parent 068ad0f082
commit 725191967b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 6 deletions

View file

@ -76,17 +76,13 @@ export class BrowserServerImpl extends EventEmitter implements BrowserServer {
this._ready = new Promise<void>(f => readyCallback = f);
const token = createGuid();
this._server = new ws.Server({ port }, () => {
this._server = new ws.Server({ port, path: '/' + token }, () => {
const address = this._server.address();
this._wsEndpoint = typeof address === 'string' ? `${address}/${token}` : `ws://127.0.0.1:${address.port}/${token}`;
readyCallback();
});
this._server.on('connection', (socket: ws, req) => {
if (req.url !== '/' + token) {
socket.close();
return;
}
this._clientAttached(socket);
});

View file

@ -147,6 +147,10 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
}
}
ws.addEventListener('open', async () => {
const prematureCloseListener = (event: { reason: string }) => {
reject(new Error('Server disconnected: ' + event.reason));
};
ws.addEventListener('close', prematureCloseListener);
const remoteBrowser = await connection.waitForObjectWithKnownName('remoteBrowser') as RemoteBrowser;
// Inherit shared selectors for connected browser.
@ -165,6 +169,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
}
browser._didClose();
};
ws.removeEventListener('close', prematureCloseListener);
ws.addEventListener('close', closeListener);
browser.on(Events.Browser.Disconnected, () => {
sharedSelectors._removeChannel(selectorsOwner);
@ -175,7 +180,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
});
ws.addEventListener('error', event => {
ws.close();
reject(new Error('WebSocket error: ' + event.message));
reject(new Error(event.message + '. Most likely ws endpoint is incorrect'));
});
});
}, logger);

View file

@ -33,6 +33,13 @@ describe('lauch server', (suite, { mode }) => {
await browserServer.close();
});
it('should provide an error when ws endpoint is incorrect', async ({browserType, browserOptions}) => {
const browserServer = await browserType.launchServer(browserOptions);
const error = await browserType.connect({ wsEndpoint: browserServer.wsEndpoint() + '-foo' }).catch(e => e);
await browserServer.close();
expect(error.message).toContain('Most likely ws endpoint is incorrect');
});
it('should fire "close" event during kill', async ({browserType, browserOptions}) => {
const order = [];
const browserServer = await browserType.launchServer(browserOptions);