appium-mac2-driver 4.3.6 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/WebDriverAgentMac/IntegrationTests/AMSessionTests.m +14 -0
- package/WebDriverAgentMac/WebDriverAgentLib/Commands/FBSessionCommands.m +17 -5
- package/WebDriverAgentMac/WebDriverAgentLib/Routing/FBSession.m +5 -1
- package/build/lib/driver.d.ts +3 -0
- package/build/lib/driver.d.ts.map +1 -1
- package/build/lib/driver.js +52 -32
- package/build/lib/driver.js.map +1 -1
- package/build/lib/session-claim-handler.d.ts +41 -0
- package/build/lib/session-claim-handler.d.ts.map +1 -0
- package/build/lib/session-claim-handler.js +236 -0
- package/build/lib/session-claim-handler.js.map +1 -0
- package/build/lib/wda-mac.d.ts +6 -2
- package/build/lib/wda-mac.d.ts.map +1 -1
- package/build/lib/wda-mac.js +39 -9
- package/build/lib/wda-mac.js.map +1 -1
- package/lib/driver.ts +55 -31
- package/lib/session-claim-handler.ts +306 -0
- package/lib/wda-mac.ts +41 -10
- package/node_modules/appium-xcode/CHANGELOG.md +7 -0
- package/node_modules/appium-xcode/package.json +4 -4
- package/node_modules/async-lock/AUTHORS +21 -0
- package/node_modules/async-lock/History.md +132 -0
- package/node_modules/async-lock/LICENSE +22 -0
- package/node_modules/async-lock/README.md +177 -0
- package/node_modules/async-lock/index.js +2 -0
- package/node_modules/async-lock/lib/index.js +312 -0
- package/node_modules/async-lock/package.json +48 -0
- package/node_modules/bare-fs/binding.c +1 -1
- package/node_modules/bare-fs/index.js +30 -6
- package/node_modules/bare-fs/package.json +1 -1
- package/node_modules/bare-fs/prebuilds/android-arm/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-ia32/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/darwin-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/darwin-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-arm64-simulator/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-x64-simulator/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/linux-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/linux-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/win32-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/win32-x64/bare-fs.bare +0 -0
- package/node_modules/readable-stream/lib/internal/shims/process.js +19 -0
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/duplexify.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/from.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/legacy.js +6 -1
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/readable.js +1 -1
- package/node_modules/readable-stream/lib/internal/streams/writable.js +1 -1
- package/node_modules/readable-stream/package.json +3 -2
- package/node_modules/tar-stream/package.json +7 -7
- package/package.json +4 -2
package/build/lib/wda-mac.d.ts
CHANGED
|
@@ -13,8 +13,12 @@ export declare class WDAMacServer {
|
|
|
13
13
|
private _serverStartupTimeoutMs;
|
|
14
14
|
private _isProxyingToRemoteServer;
|
|
15
15
|
get proxy(): WDAMacProxy;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
/** Starts a WDA session, replacing the previous one. Returns the new WDA session id. */
|
|
17
|
+
startSession(caps: StartSessionCapabilities, opts?: SessionOptions): Promise<string>;
|
|
18
|
+
/** Whether the WDA session has not been replaced by a newer one. */
|
|
19
|
+
isSessionActive(sessionId: string | null | undefined): boolean;
|
|
20
|
+
/** Stops the WDA session. A replaced one is skipped, so the newer one is never affected. */
|
|
21
|
+
stopSession(sessionId: string | null | undefined): Promise<void>;
|
|
18
22
|
private isProxyReady;
|
|
19
23
|
/**
|
|
20
24
|
* Returns proxy information where WDAMacServer proxy to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wda-mac.d.ts","sourceRoot":"","sources":["../../lib/wda-mac.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAe,MAAM,eAAe,CAAC;AACrF,OAAO,EAAC,cAAc,EAAS,MAAM,kBAAkB,CAAC;AAyBxD,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+OD,qBAAa,WAAY,SAAQ,cAAc;IACtC,cAAc,EAAE,OAAO,CAAS;IAExB,YAAY,CACzB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE,QAAe,GACpB,OAAO,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;CAStC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,uBAAuB,CAA8B;IAC7D,OAAO,CAAC,yBAAyB,CAAkB;IAEnD,IAAI,KAAK,IAAI,WAAW,CAKvB;
|
|
1
|
+
{"version":3,"file":"wda-mac.d.ts","sourceRoot":"","sources":["../../lib/wda-mac.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAe,MAAM,eAAe,CAAC;AACrF,OAAO,EAAC,cAAc,EAAS,MAAM,kBAAkB,CAAC;AAyBxD,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+OD,qBAAa,WAAY,SAAQ,cAAc;IACtC,cAAc,EAAE,OAAO,CAAS;IAExB,YAAY,CACzB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,IAAI,GAAE,QAAe,GACpB,OAAO,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;CAStC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,uBAAuB,CAA8B;IAC7D,OAAO,CAAC,yBAAyB,CAAkB;IAEnD,IAAI,KAAK,IAAI,WAAW,CAKvB;IAED,wFAAwF;IAClF,YAAY,CAAC,IAAI,EAAE,wBAAwB,EAAE,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAoG9F,oEAAoE;IACpE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAI9D,4FAA4F;IACtF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YA2BxD,YAAY;IAgB1B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;CAgC7B;AAED,eAAO,MAAM,cAAc,cAAqB,CAAC;AAsDjD,UAAU,wBAAwB;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
package/build/lib/wda-mac.js
CHANGED
|
@@ -242,6 +242,7 @@ export class WDAMacServer {
|
|
|
242
242
|
}
|
|
243
243
|
return this._proxy;
|
|
244
244
|
}
|
|
245
|
+
/** Starts a WDA session, replacing the previous one. Returns the new WDA session id. */
|
|
245
246
|
async startSession(caps, opts = {}) {
|
|
246
247
|
this._serverStartupTimeoutMs = caps.serverStartupTimeout ?? this._serverStartupTimeoutMs;
|
|
247
248
|
this._isProxyingToRemoteServer = !!caps.webDriverAgentMacUrl;
|
|
@@ -318,21 +319,50 @@ export class WDAMacServer {
|
|
|
318
319
|
else {
|
|
319
320
|
log.info('The host process has already been listening. Proceeding with session creation');
|
|
320
321
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
322
|
+
// WDA drops the previous session as soon as it gets this request,
|
|
323
|
+
// so a failure must not leave the proxy pointing at the replaced one
|
|
324
|
+
try {
|
|
325
|
+
await this._proxy.command('/session', 'POST', {
|
|
326
|
+
capabilities: {
|
|
327
|
+
firstMatch: [{}],
|
|
328
|
+
alwaysMatch: caps,
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
this._proxy.sessionId = null;
|
|
334
|
+
throw e;
|
|
335
|
+
}
|
|
336
|
+
const sessionId = this._proxy.sessionId;
|
|
337
|
+
if (!sessionId) {
|
|
338
|
+
throw new errors.SessionNotCreatedError('WebDriverAgentMac did not return a session id');
|
|
339
|
+
}
|
|
340
|
+
return sessionId;
|
|
327
341
|
}
|
|
328
|
-
|
|
342
|
+
/** Whether the WDA session has not been replaced by a newer one. */
|
|
343
|
+
isSessionActive(sessionId) {
|
|
344
|
+
return !!sessionId && this._proxy?.sessionId === sessionId;
|
|
345
|
+
}
|
|
346
|
+
/** Stops the WDA session. A replaced one is skipped, so the newer one is never affected. */
|
|
347
|
+
async stopSession(sessionId) {
|
|
329
348
|
if (!this._isProxyingToRemoteServer && !this._process?.isRunning) {
|
|
330
349
|
log.info(`Mac2Driver session cannot be stopped, because the server is not running`);
|
|
331
350
|
return;
|
|
332
351
|
}
|
|
333
|
-
if (this.
|
|
352
|
+
if (!this.isSessionActive(sessionId)) {
|
|
353
|
+
if (sessionId) {
|
|
354
|
+
log.info(`Mac2Driver session '${sessionId}' is not active anymore. Nothing to stop`);
|
|
355
|
+
}
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
const proxy = this._proxy;
|
|
359
|
+
if (proxy) {
|
|
334
360
|
try {
|
|
335
|
-
await
|
|
361
|
+
await proxy.command(`/session/${sessionId}`, 'DELETE');
|
|
362
|
+
// A newer session might have been created while the DELETE was pending
|
|
363
|
+
if (proxy.sessionId === sessionId) {
|
|
364
|
+
proxy.sessionId = null;
|
|
365
|
+
}
|
|
336
366
|
}
|
|
337
367
|
catch (e) {
|
|
338
368
|
log.info(`Mac2Driver session cannot be deleted. Original error: ${e.message}`);
|
package/build/lib/wda-mac.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wda-mac.js","sourceRoot":"","sources":["../../lib/wda-mac.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wda-mac.js","sourceRoot":"","sources":["../../lib/wda-mac.ts"],"names":[],"mappings":"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"}
|
package/lib/driver.ts
CHANGED
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
DriverOpts,
|
|
12
12
|
W3CDriverCaps,
|
|
13
13
|
} from '@appium/types';
|
|
14
|
-
import {BaseDriver, DeviceSettings} from 'appium/driver.js';
|
|
14
|
+
import {BaseDriver, DeviceSettings, errors} from 'appium/driver.js';
|
|
15
15
|
|
|
16
16
|
import * as appManagemenetCommands from './commands/app-management.js';
|
|
17
17
|
import * as appleScriptCommands from './commands/applescript.js';
|
|
@@ -29,6 +29,7 @@ import MAC2_CONSTRAINTS, {type Mac2Constraints} from './constraints.js';
|
|
|
29
29
|
import {executeMethodMap} from './execute-method-map.js';
|
|
30
30
|
import log from './logger.js';
|
|
31
31
|
import {newMethodMap} from './method-map.js';
|
|
32
|
+
import {sessionClaimHandler} from './session-claim-handler.js';
|
|
32
33
|
import {WDA_MAC_SERVER, type WDAMacServer} from './wda-mac.js';
|
|
33
34
|
|
|
34
35
|
const NO_PROXY: RouteMatcher[] = [
|
|
@@ -116,6 +117,8 @@ export class Mac2Driver
|
|
|
116
117
|
|
|
117
118
|
private isProxyActive: boolean = false;
|
|
118
119
|
private _wda: WDAMacServer | null = null;
|
|
120
|
+
private _wdaSessionId: string | null = null;
|
|
121
|
+
private _hasClaimedHost: boolean = false;
|
|
119
122
|
|
|
120
123
|
constructor(opts: InitialOpts = {} as InitialOpts) {
|
|
121
124
|
super(opts);
|
|
@@ -143,6 +146,13 @@ export class Mac2Driver
|
|
|
143
146
|
if (!this._wda) {
|
|
144
147
|
throw new Error('WDA server is not initialized');
|
|
145
148
|
}
|
|
149
|
+
// The WDA server is shared and only supports a single session, so a newer
|
|
150
|
+
// session replaces this one. Never send commands on its behalf after that.
|
|
151
|
+
if (this._wdaSessionId && !this._wda.isSessionActive(this._wdaSessionId)) {
|
|
152
|
+
throw new errors.NoSuchDriverError(
|
|
153
|
+
'This session has been replaced by a newer one, because this driver only supports a single session',
|
|
154
|
+
);
|
|
155
|
+
}
|
|
146
156
|
return this._wda;
|
|
147
157
|
}
|
|
148
158
|
|
|
@@ -150,7 +160,7 @@ export class Mac2Driver
|
|
|
150
160
|
if (!this._wda) {
|
|
151
161
|
return;
|
|
152
162
|
}
|
|
153
|
-
return await this.
|
|
163
|
+
return await this.wda.proxy.command('/appium/settings', 'POST', {
|
|
154
164
|
settings: {[key]: value},
|
|
155
165
|
});
|
|
156
166
|
}
|
|
@@ -170,10 +180,7 @@ export class Mac2Driver
|
|
|
170
180
|
}
|
|
171
181
|
|
|
172
182
|
async proxyCommand(url: string, method: HTTPMethod, body: HTTPBody = null): Promise<any> {
|
|
173
|
-
|
|
174
|
-
throw new Error('WDA server is not initialized');
|
|
175
|
-
}
|
|
176
|
-
return await this._wda.proxy.command(url, method, body);
|
|
183
|
+
return await this.wda.proxy.command(url, method, body);
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
override async getStatus(): Promise<any> {
|
|
@@ -185,10 +192,7 @@ export class Mac2Driver
|
|
|
185
192
|
|
|
186
193
|
// needed to make image plugin work
|
|
187
194
|
async getWindowRect(): Promise<any> {
|
|
188
|
-
|
|
189
|
-
throw new Error('WDA server is not initialized');
|
|
190
|
-
}
|
|
191
|
-
return await this._wda.proxy.command('/window/rect', 'GET');
|
|
195
|
+
return await this.wda.proxy.command('/window/rect', 'GET');
|
|
192
196
|
}
|
|
193
197
|
|
|
194
198
|
override async createSession(
|
|
@@ -202,34 +206,51 @@ export class Mac2Driver
|
|
|
202
206
|
this.caps = caps as Mac2DriverCaps;
|
|
203
207
|
// oxlint-disable-next-line no-self-assign -- narrows this.opts' type for the rest of the method
|
|
204
208
|
this.opts = this.opts as Mac2DriverOpts;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
209
|
+
// The host supports a single session: the previous one has to quit first
|
|
210
|
+
await sessionClaimHandler.runExclusive(async () => {
|
|
211
|
+
// The session might have been deleted while it was waiting for its turn
|
|
212
|
+
if (!this._wda || !this.sessionId) {
|
|
213
|
+
throw new errors.NoSuchDriverError('The session has been deleted before it could start');
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
await sessionClaimHandler.registerActiveSession(this);
|
|
217
|
+
await sessionClaimHandler.claimHost(this);
|
|
218
|
+
this._hasClaimedHost = true;
|
|
219
|
+
const prerun = caps.prerun as PrerunCapability | undefined;
|
|
220
|
+
if (prerun) {
|
|
221
|
+
if (typeof prerun.command !== 'string' && typeof prerun.script !== 'string') {
|
|
222
|
+
throw new Error(`'prerun' capability value must either contain 'script' or 'command' entry of string type`);
|
|
223
|
+
}
|
|
224
|
+
log.info('Executing prerun AppleScript');
|
|
225
|
+
const output = await this.macosExecAppleScript(prerun.script, undefined, prerun.command);
|
|
226
|
+
if (output.trim()) {
|
|
227
|
+
log.info(`Prerun script output: ${output}`);
|
|
228
|
+
}
|
|
215
229
|
}
|
|
230
|
+
this._wdaSessionId = await this.wda.startSession(caps, {
|
|
231
|
+
reqBasePath: this.basePath,
|
|
232
|
+
});
|
|
233
|
+
} catch (e: any) {
|
|
234
|
+
await this.deleteSession();
|
|
235
|
+
throw e;
|
|
216
236
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
} catch (e: any) {
|
|
221
|
-
await this.deleteSession();
|
|
222
|
-
throw e;
|
|
223
|
-
}
|
|
224
|
-
this.proxyReqRes = this.wda.proxy.proxyReqRes.bind(this._wda.proxy);
|
|
237
|
+
});
|
|
238
|
+
this.proxyReqRes = (...args: any[]) =>
|
|
239
|
+
(this.wda.proxy.proxyReqRes as (...a: any[]) => any).apply(this.wda.proxy, args);
|
|
225
240
|
this.isProxyActive = true;
|
|
226
241
|
return [sessionId, caps];
|
|
227
242
|
}
|
|
228
243
|
|
|
229
244
|
override async deleteSession(): Promise<void> {
|
|
245
|
+
sessionClaimHandler.unregisterActiveSession(this);
|
|
246
|
+
// A new session waits for the teardown to complete before it starts
|
|
247
|
+
await sessionClaimHandler.trackTeardown(async () => await this.teardownSession());
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
private async teardownSession(): Promise<void> {
|
|
230
251
|
await this._screenRecorder?.stop(true);
|
|
231
252
|
if (this._videoChunksBroadcaster.hasPublishers) {
|
|
232
|
-
if (this._wda) {
|
|
253
|
+
if (this._wda?.isSessionActive(this._wdaSessionId)) {
|
|
233
254
|
try {
|
|
234
255
|
await this.wda.proxy.command('/wda/video/stop', 'POST', {});
|
|
235
256
|
} catch {}
|
|
@@ -237,10 +258,11 @@ export class Mac2Driver
|
|
|
237
258
|
await this._videoChunksBroadcaster.shutdown(5000);
|
|
238
259
|
}
|
|
239
260
|
if (this._wda) {
|
|
240
|
-
await this.
|
|
261
|
+
await this._wda.stopSession(this._wdaSessionId);
|
|
241
262
|
}
|
|
242
263
|
|
|
243
|
-
|
|
264
|
+
// Skip postrun if the host was never acquired, as the previous session might still be using it
|
|
265
|
+
const postrun = this._hasClaimedHost ? (this.opts.postrun as PostrunCapability | undefined) : undefined;
|
|
244
266
|
if (postrun) {
|
|
245
267
|
if (typeof postrun.command !== 'string' && typeof postrun.script !== 'string') {
|
|
246
268
|
log.error(`'postrun' capability value must either contain 'script' or 'command' entry of string type`);
|
|
@@ -264,6 +286,8 @@ export class Mac2Driver
|
|
|
264
286
|
|
|
265
287
|
private resetState(): void {
|
|
266
288
|
this._wda = null;
|
|
289
|
+
this._wdaSessionId = null;
|
|
290
|
+
this._hasClaimedHost = false;
|
|
267
291
|
this.isProxyActive = false;
|
|
268
292
|
this._videoChunksBroadcaster = new nativeScreenRecordingCommands.NativeVideoChunksBroadcaster(
|
|
269
293
|
this.eventEmitter,
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import {setTimeout as delay} from 'node:timers/promises';
|
|
2
|
+
|
|
3
|
+
import type {AppiumLogger, IAppiumIpc, IIpcSubscription, IpcMessage} from '@appium/types';
|
|
4
|
+
import {errors} from 'appium/driver.js';
|
|
5
|
+
import {node, util} from 'appium/support.js';
|
|
6
|
+
import AsyncLock from 'async-lock';
|
|
7
|
+
import {waitForCondition} from 'asyncbox';
|
|
8
|
+
|
|
9
|
+
import type {Mac2Driver} from './driver.js';
|
|
10
|
+
|
|
11
|
+
export type SessionIpcMessage = {
|
|
12
|
+
sessionId: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type AppiumIpcConstructor = new () => IAppiumIpc;
|
|
16
|
+
type IpcProvider = () => Promise<IAppiumIpc | undefined>;
|
|
17
|
+
|
|
18
|
+
/** Lets a new session make the previous one quit, over a driver-wide IPC (per-session IPCs are isolated). */
|
|
19
|
+
export class SessionClaimHandler {
|
|
20
|
+
static readonly CLAIMED_TOPIC = 'mac2:sessionClaimed';
|
|
21
|
+
static readonly CONTENDED_TOPIC = 'mac2:sessionContended';
|
|
22
|
+
static readonly RELEASED_TOPIC = 'mac2:sessionReleased';
|
|
23
|
+
|
|
24
|
+
private static readonly STARTUP_LOCK_KEY = 'mac2:sessionStartup';
|
|
25
|
+
|
|
26
|
+
private static readonly CONTENTION_PROBE_MS = 10;
|
|
27
|
+
private static readonly DEFAULT_RELEASE_WAIT_MS = 15000;
|
|
28
|
+
|
|
29
|
+
private readonly startupLock = new AsyncLock();
|
|
30
|
+
private readonly pendingTeardowns = new Set<Promise<void>>();
|
|
31
|
+
private readonly subscriptionsBySessionId = new Map<string, IIpcSubscription<SessionIpcMessage>>();
|
|
32
|
+
|
|
33
|
+
constructor(
|
|
34
|
+
private readonly getIpc: IpcProvider,
|
|
35
|
+
private readonly releaseWaitMs: number = SessionClaimHandler.DEFAULT_RELEASE_WAIT_MS,
|
|
36
|
+
) {}
|
|
37
|
+
|
|
38
|
+
/** Serializes session startups so the newest wins. Enter before registering the session. */
|
|
39
|
+
async runExclusive<T>(fn: () => Promise<T>): Promise<T> {
|
|
40
|
+
return await this.startupLock.acquire(SessionClaimHandler.STARTUP_LOCK_KEY, fn);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Subscribe the session to claim messages from newer sessions. */
|
|
44
|
+
async registerActiveSession(driver: Mac2Driver): Promise<void> {
|
|
45
|
+
const ipc = await this.getIpc();
|
|
46
|
+
const sessionId = driver.sessionId;
|
|
47
|
+
if (!ipc || !sessionId) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.unregisterActiveSession(driver);
|
|
52
|
+
|
|
53
|
+
const subscription = ipc.subscribe<SessionIpcMessage>(
|
|
54
|
+
SessionClaimHandler.CLAIMED_TOPIC,
|
|
55
|
+
this.getPublisherId(driver),
|
|
56
|
+
);
|
|
57
|
+
subscription.on('message', (message) => {
|
|
58
|
+
void this.dispatchClaimMessage(driver, sessionId, message);
|
|
59
|
+
});
|
|
60
|
+
this.subscriptionsBySessionId.set(sessionId, subscription);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Unsubscribe the session from claim messages. */
|
|
64
|
+
unregisterActiveSession(driver: Mac2Driver): void {
|
|
65
|
+
const sessionId = driver.sessionId;
|
|
66
|
+
if (!sessionId) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
this.subscriptionsBySessionId.get(sessionId)?.unsubscribe();
|
|
71
|
+
this.subscriptionsBySessionId.delete(sessionId);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Tracks a session teardown, so that a new session does not start before it is complete. */
|
|
75
|
+
async trackTeardown(teardown: () => Promise<void>): Promise<void> {
|
|
76
|
+
const promise = teardown();
|
|
77
|
+
const tracked = (async () => {
|
|
78
|
+
try {
|
|
79
|
+
await promise;
|
|
80
|
+
} catch {
|
|
81
|
+
// the failure is reported to the caller of trackTeardown()
|
|
82
|
+
}
|
|
83
|
+
})();
|
|
84
|
+
this.pendingTeardowns.add(tracked);
|
|
85
|
+
try {
|
|
86
|
+
await promise;
|
|
87
|
+
} finally {
|
|
88
|
+
this.pendingTeardowns.delete(tracked);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Make any other active session quit and wait until it has released the host. */
|
|
93
|
+
async claimHost(driver: Mac2Driver): Promise<void> {
|
|
94
|
+
await this.requestRelease(driver);
|
|
95
|
+
await this.waitForPendingTeardowns(driver);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private async waitForPendingTeardowns(driver: Mac2Driver): Promise<void> {
|
|
99
|
+
if (this.pendingTeardowns.size === 0) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
driver.log.debug(`Waiting for ${util.pluralize('session', this.pendingTeardowns.size, true)} to finish quitting`);
|
|
104
|
+
const timer = new AbortController();
|
|
105
|
+
const timedOut = Symbol('timedOut');
|
|
106
|
+
const timeout = (async () => {
|
|
107
|
+
try {
|
|
108
|
+
return await delay(this.releaseWaitMs, timedOut, {signal: timer.signal});
|
|
109
|
+
} catch {
|
|
110
|
+
return undefined; // aborted
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
113
|
+
try {
|
|
114
|
+
if ((await Promise.race([Promise.all(this.pendingTeardowns), timeout])) === timedOut) {
|
|
115
|
+
// Starting now could let the old teardown (e.g. postrun) interfere with this session
|
|
116
|
+
throw new errors.SessionNotCreatedError(
|
|
117
|
+
`The previous session did not finish quitting within ${this.releaseWaitMs}ms`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
} finally {
|
|
121
|
+
timer.abort();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
private async requestRelease(driver: Mac2Driver): Promise<void> {
|
|
126
|
+
const ipc = await this.getIpc();
|
|
127
|
+
if (!ipc) {
|
|
128
|
+
driver.log.debug('Driver-instance IPC is unavailable. Skipping the session claim.');
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const sessionId = driver.sessionId;
|
|
133
|
+
if (!sessionId) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const contendingSessionIds = new Set<string>();
|
|
138
|
+
const releasedSessionIds = new Set<string>();
|
|
139
|
+
const subscriptions: IIpcSubscription<SessionIpcMessage>[] = [];
|
|
140
|
+
|
|
141
|
+
try {
|
|
142
|
+
const contendedSubscription = ipc.subscribe<SessionIpcMessage>(
|
|
143
|
+
SessionClaimHandler.CONTENDED_TOPIC,
|
|
144
|
+
this.getPublisherId(driver),
|
|
145
|
+
);
|
|
146
|
+
subscriptions.push(contendedSubscription);
|
|
147
|
+
const releasedSubscription = ipc.subscribe<SessionIpcMessage>(
|
|
148
|
+
SessionClaimHandler.RELEASED_TOPIC,
|
|
149
|
+
this.getPublisherId(driver),
|
|
150
|
+
);
|
|
151
|
+
subscriptions.push(releasedSubscription);
|
|
152
|
+
contendedSubscription.on('message', (message) => {
|
|
153
|
+
if (message.data.sessionId !== sessionId) {
|
|
154
|
+
contendingSessionIds.add(message.data.sessionId);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
releasedSubscription.on('message', (message) => {
|
|
158
|
+
if (message.data.sessionId !== sessionId) {
|
|
159
|
+
releasedSessionIds.add(message.data.sessionId);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
await ipc.publish<SessionIpcMessage>(SessionClaimHandler.CLAIMED_TOPIC, this.getPublisherId(driver), {
|
|
164
|
+
sessionId,
|
|
165
|
+
});
|
|
166
|
+
// Older sessions reply synchronously to the claim, so a short wait is enough to learn about them
|
|
167
|
+
await delay(SessionClaimHandler.CONTENTION_PROBE_MS);
|
|
168
|
+
|
|
169
|
+
if (contendingSessionIds.size === 0) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
try {
|
|
174
|
+
await waitForCondition(() => [...contendingSessionIds].every((id) => releasedSessionIds.has(id)), {
|
|
175
|
+
waitMs: this.releaseWaitMs,
|
|
176
|
+
intervalMs: 50,
|
|
177
|
+
});
|
|
178
|
+
driver.log.debug(
|
|
179
|
+
`Received release confirmation from ${util.pluralize('session', contendingSessionIds.size, true)}`,
|
|
180
|
+
);
|
|
181
|
+
} catch {
|
|
182
|
+
const pendingSessionIds = [...contendingSessionIds].filter((id) => !releasedSessionIds.has(id));
|
|
183
|
+
// Starting now could let the old session interfere with this one
|
|
184
|
+
throw new errors.SessionNotCreatedError(
|
|
185
|
+
`${util.pluralize('session', pendingSessionIds.length, true)} [${pendingSessionIds.join(', ')}] ` +
|
|
186
|
+
`did not quit within ${this.releaseWaitMs}ms`,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
} finally {
|
|
190
|
+
subscriptions.forEach((sub) => sub.unsubscribe());
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** @internal Exposed for unit tests. */
|
|
195
|
+
resetForTesting(): void {
|
|
196
|
+
this.pendingTeardowns.clear();
|
|
197
|
+
for (const subscription of this.subscriptionsBySessionId.values()) {
|
|
198
|
+
subscription.unsubscribe();
|
|
199
|
+
}
|
|
200
|
+
this.subscriptionsBySessionId.clear();
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private async dispatchClaimMessage(
|
|
204
|
+
driver: Mac2Driver,
|
|
205
|
+
sessionId: string,
|
|
206
|
+
message: IpcMessage<SessionIpcMessage>,
|
|
207
|
+
): Promise<void> {
|
|
208
|
+
try {
|
|
209
|
+
await this.handleClaimMessage(driver, sessionId, message);
|
|
210
|
+
} catch (err) {
|
|
211
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
212
|
+
driver.log.warn(`Could not handle the session claim IPC message for session '${sessionId}': ${msg}`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
private async handleClaimMessage(
|
|
217
|
+
driver: Mac2Driver,
|
|
218
|
+
sessionId: string,
|
|
219
|
+
message: IpcMessage<SessionIpcMessage>,
|
|
220
|
+
): Promise<void> {
|
|
221
|
+
if (message.data.sessionId === sessionId || driver.sessionId !== sessionId) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Tell the claimer that it has to wait for us
|
|
226
|
+
await this.publish(driver, SessionClaimHandler.CONTENDED_TOPIC, sessionId);
|
|
227
|
+
|
|
228
|
+
driver.log.warn(
|
|
229
|
+
`Session '${message.data.sessionId}' is starting, while this session ('${sessionId}') is still active. ` +
|
|
230
|
+
`Only one session at a time is supported, since XCTest is single-threaded. ` +
|
|
231
|
+
`Consider enabling the Appium server's '--session-override' flag and make sure to properly ` +
|
|
232
|
+
`quit the previous session before starting a new one. Terminating the obsolete session.`,
|
|
233
|
+
);
|
|
234
|
+
await this.terminateSession(driver, sessionId);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
private async terminateSession(driver: Mac2Driver, sessionId: string): Promise<void> {
|
|
238
|
+
const publisherId = this.getPublisherId(driver);
|
|
239
|
+
const {log} = driver;
|
|
240
|
+
|
|
241
|
+
try {
|
|
242
|
+
// Unlike deleteSession(), this also makes the server drop the session from its list
|
|
243
|
+
await driver.startUnexpectedShutdown(
|
|
244
|
+
new errors.NoSuchDriverError(
|
|
245
|
+
'This session has been replaced by a newer one, because only a single session is supported',
|
|
246
|
+
),
|
|
247
|
+
);
|
|
248
|
+
} catch (err) {
|
|
249
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
250
|
+
log.warn(`Could not terminate session '${sessionId}' on IPC request: ${msg}`);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
await this.publish(driver, SessionClaimHandler.RELEASED_TOPIC, sessionId, publisherId, log);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private async publish(
|
|
257
|
+
driver: Mac2Driver,
|
|
258
|
+
topic: string,
|
|
259
|
+
sessionId: string,
|
|
260
|
+
publisherId: string = this.getPublisherId(driver),
|
|
261
|
+
log: AppiumLogger = driver.log,
|
|
262
|
+
): Promise<void> {
|
|
263
|
+
try {
|
|
264
|
+
const ipc = await this.getIpc();
|
|
265
|
+
await ipc?.publish<SessionIpcMessage>(topic, publisherId, {sessionId});
|
|
266
|
+
} catch (err) {
|
|
267
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
268
|
+
log.warn(`Could not publish '${topic}' message for session '${sessionId}': ${msg}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private getPublisherId(driver: Mac2Driver): string {
|
|
273
|
+
return node.getObjectId(driver);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
let sharedIpc: Promise<IAppiumIpc | undefined> | undefined;
|
|
278
|
+
|
|
279
|
+
async function loadSharedIpc(): Promise<IAppiumIpc | undefined> {
|
|
280
|
+
sharedIpc ??= (async () => {
|
|
281
|
+
try {
|
|
282
|
+
const {AppiumIpc} = (await import('appium/driver.js')) as {AppiumIpc?: AppiumIpcConstructor};
|
|
283
|
+
return AppiumIpc ? new AppiumIpc() : undefined;
|
|
284
|
+
} catch {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
})();
|
|
288
|
+
return await sharedIpc;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
export const sessionClaimHandler = new SessionClaimHandler(loadSharedIpc);
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* @internal Exposed for unit tests.
|
|
295
|
+
*/
|
|
296
|
+
export function setSharedIpcForTesting(ipc: IAppiumIpc | undefined): void {
|
|
297
|
+
sharedIpc = Promise.resolve(ipc);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @internal Exposed for unit tests.
|
|
302
|
+
*/
|
|
303
|
+
export function resetSharedIpcForTesting(): void {
|
|
304
|
+
sessionClaimHandler.resetForTesting();
|
|
305
|
+
sharedIpc = undefined;
|
|
306
|
+
}
|