fix(connect): provide an error message when ws endpoint is incorrect (#4978)
This commit is contained in:
parent
068ad0f082
commit
725191967b
|
|
@ -76,17 +76,13 @@ export class BrowserServerImpl extends EventEmitter implements BrowserServer {
|
||||||
this._ready = new Promise<void>(f => readyCallback = f);
|
this._ready = new Promise<void>(f => readyCallback = f);
|
||||||
|
|
||||||
const token = createGuid();
|
const token = createGuid();
|
||||||
this._server = new ws.Server({ port }, () => {
|
this._server = new ws.Server({ port, path: '/' + token }, () => {
|
||||||
const address = this._server.address();
|
const address = this._server.address();
|
||||||
this._wsEndpoint = typeof address === 'string' ? `${address}/${token}` : `ws://127.0.0.1:${address.port}/${token}`;
|
this._wsEndpoint = typeof address === 'string' ? `${address}/${token}` : `ws://127.0.0.1:${address.port}/${token}`;
|
||||||
readyCallback();
|
readyCallback();
|
||||||
});
|
});
|
||||||
|
|
||||||
this._server.on('connection', (socket: ws, req) => {
|
this._server.on('connection', (socket: ws, req) => {
|
||||||
if (req.url !== '/' + token) {
|
|
||||||
socket.close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._clientAttached(socket);
|
this._clientAttached(socket);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,6 +147,10 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ws.addEventListener('open', async () => {
|
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;
|
const remoteBrowser = await connection.waitForObjectWithKnownName('remoteBrowser') as RemoteBrowser;
|
||||||
|
|
||||||
// Inherit shared selectors for connected browser.
|
// Inherit shared selectors for connected browser.
|
||||||
|
|
@ -165,6 +169,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
|
||||||
}
|
}
|
||||||
browser._didClose();
|
browser._didClose();
|
||||||
};
|
};
|
||||||
|
ws.removeEventListener('close', prematureCloseListener);
|
||||||
ws.addEventListener('close', closeListener);
|
ws.addEventListener('close', closeListener);
|
||||||
browser.on(Events.Browser.Disconnected, () => {
|
browser.on(Events.Browser.Disconnected, () => {
|
||||||
sharedSelectors._removeChannel(selectorsOwner);
|
sharedSelectors._removeChannel(selectorsOwner);
|
||||||
|
|
@ -175,7 +180,7 @@ export class BrowserType extends ChannelOwner<channels.BrowserTypeChannel, chann
|
||||||
});
|
});
|
||||||
ws.addEventListener('error', event => {
|
ws.addEventListener('error', event => {
|
||||||
ws.close();
|
ws.close();
|
||||||
reject(new Error('WebSocket error: ' + event.message));
|
reject(new Error(event.message + '. Most likely ws endpoint is incorrect'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}, logger);
|
}, logger);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,13 @@ describe('lauch server', (suite, { mode }) => {
|
||||||
await browserServer.close();
|
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}) => {
|
it('should fire "close" event during kill', async ({browserType, browserOptions}) => {
|
||||||
const order = [];
|
const order = [];
|
||||||
const browserServer = await browserType.launchServer(browserOptions);
|
const browserServer = await browserType.launchServer(browserOptions);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue