Make sure flipper server initialization errors are propagated properly
Summary: This diff makes sure that errors are propagated similarly in flipper desktop and browser version, and that they are shown in either case. Since in the browser version, the UI loads after the error happened, we'll store the error so that any client connecting in the future will read and report it. Also added a `--failFast` flag to flipper-server, so that the process exits immediately if misconfigured, which is convenient in CI use cases and such Reviewed By: nikoant Differential Revision: D33348922 fbshipit-source-id: 0f584104f881141fde38da3f0031748415343ea2
This commit is contained in:
committed by
Facebook GitHub Bot
parent
8259f92983
commit
b6c884f011
@@ -117,7 +117,7 @@ class ServerController extends EventEmitter implements ServerEventsListener {
|
||||
if (isTest()) {
|
||||
throw new Error('Spawing new server is not supported in test');
|
||||
}
|
||||
this.certificateProvider.init();
|
||||
await this.certificateProvider.init();
|
||||
const {insecure, secure} = getServerPortsConfig().serverPorts;
|
||||
|
||||
const options = await this.certificateProvider.loadSecureServerConfig();
|
||||
|
||||
@@ -56,23 +56,17 @@ class ServerRSocket extends ServerAdapter {
|
||||
onConnect(socket);
|
||||
})
|
||||
: net.createServer(onConnect);
|
||||
transportServer
|
||||
.on('error', (err) => {
|
||||
self.listener.onError(err);
|
||||
console.error(`Error opening server on port ${port}`, 'server');
|
||||
reject(err);
|
||||
})
|
||||
.on('listening', () => {
|
||||
console.debug(
|
||||
`${
|
||||
sslConfig ? 'Secure' : 'Certificate'
|
||||
} server started on port ${port}`,
|
||||
'server',
|
||||
);
|
||||
self.listener.onListening(port);
|
||||
self.rawServer_ = rawServer;
|
||||
resolve((transportServer.address() as AddressInfo).port);
|
||||
});
|
||||
transportServer.on('error', reject).on('listening', () => {
|
||||
console.debug(
|
||||
`${
|
||||
sslConfig ? 'Secure' : 'Certificate'
|
||||
} server started on port ${port}`,
|
||||
'server',
|
||||
);
|
||||
self.listener.onListening(port);
|
||||
self.rawServer_ = rawServer;
|
||||
resolve((transportServer.address() as AddressInfo).port);
|
||||
});
|
||||
return transportServer;
|
||||
};
|
||||
rawServer = new RSocketServer({
|
||||
|
||||
@@ -62,8 +62,6 @@ class ServerWebSocket extends ServerAdapter {
|
||||
// We do not need to listen to http server's `error` because it is propagated to WS
|
||||
// https://github.com/websockets/ws/blob/a3a22e4ed39c1a3be8e727e9c630dd440edc61dd/lib/websocket-server.js#L109
|
||||
const onConnectionError = (error: Error) => {
|
||||
console.error(`[conn] Unable to start server at port ${port}`, error);
|
||||
this.listener.onError(error);
|
||||
reject(
|
||||
new Error(
|
||||
`Unable to start server at port ${port} due to ${JSON.stringify(
|
||||
|
||||
@@ -92,10 +92,12 @@ describe('ServerWebSocket', () => {
|
||||
expect(mockSEListener.onError).toBeCalledTimes(0);
|
||||
|
||||
const conflictingServer = new ServerWebSocket(mockSEListener);
|
||||
await expect(conflictingServer.start(assignedPort)).rejects.toThrow();
|
||||
await expect(conflictingServer.start(assignedPort)).rejects.toThrow(
|
||||
/EADDRINUSE/,
|
||||
);
|
||||
|
||||
expect(mockSEListener.onListening).toBeCalledTimes(1);
|
||||
expect(mockSEListener.onError).toBeCalledTimes(1);
|
||||
expect(mockSEListener.onError).toBeCalledTimes(0); // no onError triggered, as start throws already
|
||||
});
|
||||
|
||||
test('calls listener onError if a connection attempt fails', async () => {
|
||||
|
||||
Reference in New Issue
Block a user