From 757b82757ea2e8a6e201a7c5b8021d79bdc1385d Mon Sep 17 00:00:00 2001 From: Lawrence Lomax Date: Tue, 1 Feb 2022 00:43:24 -0800 Subject: [PATCH] Use polymorphic IOSBridge to perform iOS target listing Summary: Bulding on the work from prior diffs we can use the created bridge directly. No need to have if statements calling out to sub-functions, just use the base type itself which will use the appropriate implementation. There's no behavioural change here. Either idb was queried for sims/devices or simctl was queried for just sims, they were always mutually exclusive. Reviewed By: passy Differential Revision: D33842604 fbshipit-source-id: 0bf63ffc34368c70df31c105ea0ba5df941e72cc --- .../devices/ios/__tests__/iOSDevice.node.tsx | 23 +++++++---- .../src/devices/ios/iOSDeviceManager.tsx | 40 ++++--------------- 2 files changed, 24 insertions(+), 39 deletions(-) diff --git a/desktop/flipper-server-core/src/devices/ios/__tests__/iOSDevice.node.tsx b/desktop/flipper-server-core/src/devices/ios/__tests__/iOSDevice.node.tsx index 57310593e..eb372e8e2 100644 --- a/desktop/flipper-server-core/src/devices/ios/__tests__/iOSDevice.node.tsx +++ b/desktop/flipper-server-core/src/devices/ios/__tests__/iOSDevice.node.tsx @@ -9,7 +9,6 @@ import {checkXcodeVersionMismatch} from '../iOSDeviceManager'; import {getLogger} from 'flipper-common'; -import {IOSBridge} from '../IOSBridge'; import {FlipperServerImpl} from '../../../FlipperServerImpl'; // eslint-disable-next-line node/no-extraneous-import import {getRenderHostInstance} from 'flipper-ui-core'; @@ -19,7 +18,9 @@ import { } from '../../../FlipperServerConfig'; let fakeSimctlBridge: any; +let fakeIDBBridge: any; let hasCalledSimctlActiveDevices = false; +let hasCalledIDBActiveDevices = false; beforeEach(() => { hasCalledSimctlActiveDevices = false; @@ -29,6 +30,12 @@ beforeEach(() => { return []; }, }; + fakeIDBBridge = { + getActiveDevices: async (_bootedOnly: boolean) => { + hasCalledIDBActiveDevices = true; + return []; + }, + }; setFlipperServerConfig(getRenderHostInstance().serverConfig); }); @@ -58,26 +65,28 @@ test('test checkXcodeVersionMismatch with an incorrect Simulator.app', () => { ); }); -test('test getAllPromisesForQueryingDevices when xcode detected', () => { +test('test queryDevices when simctl used', () => { const flipperServer = new FlipperServerImpl( getFlipperServerConfig(), getLogger(), ); - flipperServer.ios.iosBridge = {} as IOSBridge; (flipperServer.ios as any).idbConfig = getFlipperServerConfig().settings; flipperServer.ios.simctlBridge = fakeSimctlBridge; - flipperServer.ios.getPromiseForQueryingDevices(false); + flipperServer.ios.iosBridge = fakeSimctlBridge; + flipperServer.ios.queryDevices(fakeSimctlBridge); expect(hasCalledSimctlActiveDevices).toEqual(true); + expect(hasCalledIDBActiveDevices).toEqual(false); }); -test('test getAllPromisesForQueryingDevices when idb is available', () => { +test('test queryDevices when idb used', () => { const flipperServer = new FlipperServerImpl( getFlipperServerConfig(), getLogger(), ); - flipperServer.ios.iosBridge = {} as IOSBridge; (flipperServer.ios as any).idbConfig = getFlipperServerConfig().settings; flipperServer.ios.simctlBridge = fakeSimctlBridge; - flipperServer.ios.getPromiseForQueryingDevices(true); + flipperServer.ios.iosBridge = fakeIDBBridge; + flipperServer.ios.queryDevices(fakeIDBBridge); expect(hasCalledSimctlActiveDevices).toEqual(false); + expect(hasCalledIDBActiveDevices).toEqual(true); }); diff --git a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx index f9e0d50f6..47c24c0ed 100644 --- a/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx +++ b/desktop/flipper-server-core/src/devices/ios/iOSDeviceManager.tsx @@ -17,14 +17,12 @@ import IOSDevice from './IOSDevice'; import { ERR_NO_IDB_OR_XCODE_AVAILABLE, IOSBridge, - IDBBridge, makeIOSBridge, SimctlBridge, } from './IOSBridge'; import {FlipperServerImpl} from '../../FlipperServerImpl'; import {getFlipperServerConfig} from '../../FlipperServerConfig'; import {IdbConfig, setIdbConfig} from './idbConfig'; -import {assertNotNull} from 'flipper-server-core/src/comms/Utilities'; export class IOSDeviceManager { private portForwarders: Array = []; @@ -88,25 +86,10 @@ export class IOSDeviceManager { ]; } - getPromiseForQueryingDevices(isIdbAvailable: boolean): Promise { - assertNotNull(this.idbConfig); - return isIdbAvailable - ? getActiveDevices( - this.idbConfig.idbPath, - this.idbConfig.enablePhysicalIOS, - ).then((devices: IOSDeviceParams[]) => { - this.processDevices(devices); - }) - : this.getSimulators(true).then((devices) => - this.processDevices(devices), - ); - } - - private async queryDevices(): Promise { - assertNotNull(this.idbConfig); - const isIdbAvailable = await iosUtil.isAvailable(this.idbConfig.idbPath); - console.debug(`[conn] queryDevices. isIdbAvailable ${isIdbAvailable}`); - return this.getPromiseForQueryingDevices(isIdbAvailable); + queryDevices(bridge: IOSBridge): Promise { + return bridge + .getActiveDevices(true) + .then((devices) => this.processDevices(devices)); } private processDevices(activeDevices: IOSDeviceParams[]) { @@ -166,7 +149,7 @@ export class IOSDeviceManager { ); // Check for version mismatch now for immediate error handling. await this.checkXcodeVersionMismatch(); - this.queryDevicesForever(); + this.queryDevicesForever(this.iosBridge); } catch (err) { // This case is expected if both Xcode and idb are missing. if (err.message === ERR_NO_IDB_OR_XCODE_AVAILABLE) { @@ -198,12 +181,12 @@ export class IOSDeviceManager { }); } - private queryDevicesForever() { - return this.queryDevices() + private queryDevicesForever(bridge: IOSBridge) { + return this.queryDevices(bridge) .then(() => { // It's important to schedule the next check AFTER the current one has completed // to avoid simultaneous queries which can cause multiple user input prompts. - setTimeout(() => this.queryDevicesForever(), 3000); + setTimeout(() => this.queryDevicesForever(bridge), 3000); }) .catch((err) => { console.warn('Failed to continuously query devices:', err); @@ -259,10 +242,3 @@ export function checkXcodeVersionMismatch( } return undefined; } - -function getActiveDevices( - idbPath: string, - isPhysicalDeviceEnabled: boolean, -): Promise> { - return new IDBBridge(idbPath, isPhysicalDeviceEnabled).getActiveDevices(true); -}