creevey 0.9.2 → 0.9.4
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/dist/creevey.js +8 -4
- package/dist/creevey.js.map +1 -1
- package/dist/server/config.js +1 -0
- package/dist/server/config.js.map +1 -1
- package/dist/server/docker.js +1 -1
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/logger.d.ts +2 -1
- package/dist/server/logger.js +7 -3
- package/dist/server/logger.js.map +1 -1
- package/dist/server/master/api.js +1 -1
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/index.js +4 -4
- package/dist/server/master/index.js.map +1 -1
- package/dist/server/master/pool.d.ts +3 -3
- package/dist/server/master/pool.js +10 -63
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +13 -0
- package/dist/server/master/queue.js +60 -0
- package/dist/server/master/queue.js.map +1 -0
- package/dist/server/master/runner.d.ts +1 -0
- package/dist/server/master/runner.js +4 -1
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.js +1 -1
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/selenium/browser.js +118 -91
- package/dist/server/selenium/browser.js.map +1 -1
- package/dist/server/storybook/providers/browser.js +1 -1
- package/dist/server/storybook/providers/browser.js.map +1 -1
- package/dist/server/storybook/providers/hybrid.js +1 -1
- package/dist/server/storybook/providers/hybrid.js.map +1 -1
- package/dist/server/utils.d.ts +2 -1
- package/dist/server/utils.js +11 -0
- package/dist/server/utils.js.map +1 -1
- package/dist/server/worker/reporter.js +2 -2
- package/dist/server/worker/reporter.js.map +1 -1
- package/dist/server/worker/worker.js +6 -4
- package/dist/server/worker/worker.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/creevey.ts +8 -5
- package/src/server/config.ts +1 -0
- package/src/server/docker.ts +1 -1
- package/src/server/index.ts +2 -2
- package/src/server/logger.ts +6 -2
- package/src/server/master/api.ts +1 -1
- package/src/server/master/index.ts +7 -4
- package/src/server/master/pool.ts +16 -48
- package/src/server/master/queue.ts +59 -0
- package/src/server/master/runner.ts +4 -1
- package/src/server/master/server.ts +1 -1
- package/src/server/selenium/browser.ts +131 -98
- package/src/server/storybook/providers/browser.ts +1 -1
- package/src/server/storybook/providers/hybrid.ts +1 -1
- package/src/server/utils.ts +12 -1
- package/src/server/worker/reporter.ts +2 -2
- package/src/server/worker/worker.ts +6 -5
- package/src/types.ts +5 -0
package/dist/server/utils.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":";;;;;;AA+BA,gCAiBC;AAED,gDA0BC;AAED,0CAqBC;AAED,4BAEC;AAED,0CAEC;AAED,kCAIC;AAED,sCAeC;AAsCD,4CAQC;AAGD,gDAMC;AAGD,wCAiBC;
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/server/utils.ts"],"names":[],"mappings":"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"}
|
@@ -19,10 +19,10 @@ class CreeveyReporter extends mocha_1.reporters.Base {
|
|
19
19
|
constructor(runner, options) {
|
20
20
|
super(runner);
|
21
21
|
const { sessionId, topLevelSuite } = options.reporterOptions;
|
22
|
-
const testLogger = loglevel_1.default.getLogger(
|
22
|
+
const testLogger = loglevel_1.default.getLogger(sessionId);
|
23
23
|
loglevel_plugin_prefix_1.default.apply(testLogger, {
|
24
24
|
format(level) {
|
25
|
-
return
|
25
|
+
return `[${topLevelSuite}:${chalk_1.default.gray(process.pid)}] ${testLevels[level]} => ${chalk_1.default.gray(sessionId)}`;
|
26
26
|
},
|
27
27
|
});
|
28
28
|
runner.on('test', (test) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/server/worker/reporter.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,wDAA8B;AAC9B,oFAA4C;AAC5C,iCAAwD;AACxD,6CAAiE;AAUjE,MAAM,UAAU,GAA2B;IACzC,IAAI,EAAE,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IACzB,IAAI,EAAE,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3B,KAAK,EAAE,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC;CACzB,CAAC;AAEF,MAAa,eAAgB,SAAQ,iBAAS,CAAC,IAAI;IACjD,gDAAgD;IAChD,YAAY,MAAc,EAAE,OAAqB;QAC/C,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,eAAkC,CAAC;QAChF,MAAM,UAAU,GAAG,kBAAM,CAAC,SAAS,CAAC,
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/server/worker/reporter.ts"],"names":[],"mappings":"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"}
|
@@ -128,9 +128,11 @@ async function start(config, options) {
|
|
128
128
|
return await (0, index_js_1.getBrowser)(config, options);
|
129
129
|
}
|
130
130
|
catch (error) {
|
131
|
+
const errorMessage = error instanceof Error ? error.message : (error ?? 'Unknown error');
|
132
|
+
(0, logger_js_1.logger)().error('Failed to initiate webdriver:', errorMessage);
|
131
133
|
(0, messages_js_1.emitWorkerMessage)({
|
132
134
|
type: 'error',
|
133
|
-
payload: { error:
|
135
|
+
payload: { error: errorMessage },
|
134
136
|
});
|
135
137
|
return null;
|
136
138
|
}
|
@@ -147,7 +149,7 @@ async function start(config, options) {
|
|
147
149
|
const interval = setInterval(() =>
|
148
150
|
// NOTE Simple way to keep session alive
|
149
151
|
void browser.getCurrentUrl().then((url) => {
|
150
|
-
logger_js_1.logger.debug(
|
152
|
+
(0, logger_js_1.logger)().debug('current url', chalk_1.default.magenta(url));
|
151
153
|
}), 10 * 1000);
|
152
154
|
(0, messages_js_1.subscribeOn)('shutdown', () => {
|
153
155
|
clearInterval(interval);
|
@@ -171,7 +173,7 @@ async function start(config, options) {
|
|
171
173
|
const logs = await browser.manage().logs().get(type);
|
172
174
|
output.push(logs.map((log) => JSON.stringify(log.toJSON(), null, 2)).join('\n'));
|
173
175
|
}
|
174
|
-
logger_js_1.logger.debug('----------',
|
176
|
+
(0, logger_js_1.logger)().debug('----------', this.currentTest?.titlePath().join('/'), '----------\n', output.join('\n'), '\n----------------------------------------------------------------------------------------------------');
|
175
177
|
});
|
176
178
|
}
|
177
179
|
(0, messages_js_1.subscribeOn)('test', (message) => {
|
@@ -208,7 +210,7 @@ async function start(config, options) {
|
|
208
210
|
}
|
209
211
|
});
|
210
212
|
});
|
211
|
-
logger_js_1.logger.info(
|
213
|
+
(0, logger_js_1.logger)().info('Worker is ready');
|
212
214
|
(0, messages_js_1.emitWorkerMessage)({ type: 'ready' });
|
213
215
|
}
|
214
216
|
function hasTimeout(str) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/server/worker/worker.ts"],"names":[],"mappings":";;;;;AA4CA,
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../src/server/worker/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
@@ -215,6 +215,11 @@ export interface Config {
|
|
215
215
|
* The `--ui` CLI option ignores this option
|
216
216
|
*/
|
217
217
|
failFast: boolean;
|
218
|
+
/**
|
219
|
+
* Start workers in sequential queue
|
220
|
+
* @default false
|
221
|
+
*/
|
222
|
+
useWorkerQueue: boolean;
|
218
223
|
/**
|
219
224
|
* Specify platform for docker images
|
220
225
|
*/
|
package/dist/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;AAgcA,oBAEC;AAED,8BAEC;AAED,wBASC;AAED,4BAEC;AAED,4BAEC;AAGD,gCAEC;AAED,oCAEC;AAED,4CAEC;AAED,0CAEC;AAED,4CAEC;AAED,sCAEC;AAED,4CAEC;AAED,0CAEC;AA1DD,SAAgB,IAAI;IAClB,UAAU;AACZ,CAAC;AAED,SAAgB,SAAS,CAAI,KAA2B;IACtD,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,MAAM,CAAC,CAA8B;IACnD,OAAO,CACL,SAAS,CAAC,CAAC,CAAC;QACZ,QAAQ,CAAC,CAAC,CAAC;QACX,IAAI,IAAI,CAAC;QACT,SAAS,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,EAAE,IAAI,QAAQ;QACvB,OAAO,CAAC,CAAC,OAAO,IAAI,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED,SAAgB,QAAQ,CAAC,CAAU;IACjC,OAAO,OAAO,CAAC,IAAI,QAAQ,CAAC;AAC9B,CAAC;AAED,8DAA8D;AAC9D,SAAgB,UAAU,CAAC,CAAU;IACnC,OAAO,OAAO,CAAC,IAAI,UAAU,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC;AACrD,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC;AACjD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;AAChE,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;AACjE,CAAC;AAED,SAAgB,aAAa,CAAC,OAAgB;IAC5C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;AAC9D,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,CAAC;AACjE,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,gBAAgB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;AAChE,CAAC"}
|
package/package.json
CHANGED
package/src/creevey.ts
CHANGED
@@ -5,14 +5,14 @@ import { noop, Options } from './types.js';
|
|
5
5
|
import { emitWorkerMessage } from './server/messages.js';
|
6
6
|
import { isShuttingDown, shutdown, shutdownWorkers } from './server/utils.js';
|
7
7
|
import Logger from 'loglevel';
|
8
|
-
import { logger } from './server/logger.js';
|
8
|
+
import { logger, setRootName } from './server/logger.js';
|
9
9
|
|
10
10
|
function shutdownOnException(reason: unknown): void {
|
11
11
|
if (isShuttingDown.current) return;
|
12
12
|
|
13
13
|
const error = reason instanceof Error ? (reason.stack ?? reason.message) : (reason as string);
|
14
14
|
|
15
|
-
logger.error(error);
|
15
|
+
logger().error(error);
|
16
16
|
|
17
17
|
process.exitCode = -1;
|
18
18
|
if (cluster.isWorker) emitWorkerMessage({ type: 'error', payload: { error } });
|
@@ -31,16 +31,19 @@ const argv = minimist<Options>(process.argv.slice(2), {
|
|
31
31
|
alias: { port: 'p', config: 'c', debug: 'd', update: 'u' },
|
32
32
|
});
|
33
33
|
|
34
|
+
if ('port' in argv && !isNaN(argv.port)) argv.port = Number(argv.port);
|
35
|
+
if ('browser' in argv && argv.browser) setRootName(argv.browser);
|
36
|
+
|
34
37
|
// @ts-expect-error: define log level for storybook
|
35
38
|
global.LOGLEVEL = argv.trace ? 'trace' : argv.debug ? 'debug' : 'warn';
|
36
39
|
if (argv.trace) {
|
37
|
-
logger.setDefaultLevel(Logger.levels.TRACE);
|
40
|
+
logger().setDefaultLevel(Logger.levels.TRACE);
|
38
41
|
Logger.setDefaultLevel(Logger.levels.TRACE);
|
39
42
|
} else if (argv.debug) {
|
40
|
-
logger.setDefaultLevel(Logger.levels.DEBUG);
|
43
|
+
logger().setDefaultLevel(Logger.levels.DEBUG);
|
41
44
|
Logger.setDefaultLevel(Logger.levels.DEBUG);
|
42
45
|
} else {
|
43
|
-
logger.setDefaultLevel(Logger.levels.INFO);
|
46
|
+
logger().setDefaultLevel(Logger.levels.INFO);
|
44
47
|
Logger.setDefaultLevel(Logger.levels.INFO);
|
45
48
|
}
|
46
49
|
|
package/src/server/config.ts
CHANGED
@@ -9,6 +9,7 @@ export const defaultBrowser = 'chrome';
|
|
9
9
|
|
10
10
|
export const defaultConfig: Omit<Config, 'gridUrl' | 'storiesProvider' | 'testsDir' | 'tsConfig'> = {
|
11
11
|
disableTelemetry: false,
|
12
|
+
useWorkerQueue: false,
|
12
13
|
useDocker: true,
|
13
14
|
dockerImage: 'aerokube/selenoid:latest-release',
|
14
15
|
dockerImagePlatform: '',
|
package/src/server/docker.ts
CHANGED
@@ -23,7 +23,7 @@ export async function pullImages(
|
|
23
23
|
if (auth) args.authconfig = auth;
|
24
24
|
if (platform) args.platform = platform;
|
25
25
|
|
26
|
-
logger.info('Pull docker images');
|
26
|
+
logger().info('Pull docker images');
|
27
27
|
for (const image of images) {
|
28
28
|
await new Promise<void>((resolve, reject) => {
|
29
29
|
const spinner = ora(`${image}: Pull start`).start();
|
package/src/server/index.ts
CHANGED
@@ -33,14 +33,14 @@ export default async function (options: Options): Promise<void> {
|
|
33
33
|
return;
|
34
34
|
}
|
35
35
|
case cluster.isPrimary: {
|
36
|
-
logger.info('Starting Master Process');
|
36
|
+
logger().info('Starting Master Process');
|
37
37
|
|
38
38
|
const resolveApi = (await import('./master/server.js')).start(config.reportDir, port, ui);
|
39
39
|
|
40
40
|
return (await import('./master/index.js')).start(config, options, resolveApi);
|
41
41
|
}
|
42
42
|
default: {
|
43
|
-
logger.info(`Starting Worker for ${browser}`);
|
43
|
+
logger().info(`Starting Worker for ${browser}`);
|
44
44
|
|
45
45
|
return (await import('./worker/index.js')).start(config, {
|
46
46
|
...options,
|
package/src/server/logger.ts
CHANGED
@@ -10,12 +10,16 @@ export const colors = {
|
|
10
10
|
ERROR: chalk.red,
|
11
11
|
};
|
12
12
|
|
13
|
+
let rootName = 'Creevey';
|
14
|
+
|
13
15
|
prefix.reg(Logger);
|
14
16
|
prefix.apply(Logger, {
|
15
|
-
format(level, name =
|
17
|
+
format(level, name = rootName) {
|
16
18
|
const levelColor = colors[level.toUpperCase() as keyof typeof colors];
|
17
19
|
return `[${name}:${chalk.gray(process.pid)}] ${levelColor(level)} =>`;
|
18
20
|
},
|
19
21
|
});
|
20
22
|
|
21
|
-
export const
|
23
|
+
export const setRootName = (newName: string) => (rootName = newName);
|
24
|
+
|
25
|
+
export const logger = () => Logger.getLogger(rootName);
|
package/src/server/master/api.ts
CHANGED
@@ -26,7 +26,7 @@ export default function creeveyApi(runner: Runner): CreeveyApi {
|
|
26
26
|
|
27
27
|
handleMessage(ws: WebSocket, message: WebSocket.Data) {
|
28
28
|
if (typeof message != 'string') {
|
29
|
-
logger.info('unhandled message', message);
|
29
|
+
logger().info('unhandled message', message);
|
30
30
|
return;
|
31
31
|
}
|
32
32
|
|
@@ -42,7 +42,10 @@ function outputUnnecessaryImages(imagesDir: string, images: Set<string>): void {
|
|
42
42
|
.map((imagePath) => path.posix.relative(imagesDir, imagePath))
|
43
43
|
.filter((imagePath) => !images.has(imagePath));
|
44
44
|
if (unnecessaryImages.length > 0) {
|
45
|
-
logger.warn(
|
45
|
+
logger().warn(
|
46
|
+
'We found unnecessary screenshot images, those can be safely removed:\n',
|
47
|
+
unnecessaryImages.join('\n'),
|
48
|
+
);
|
46
49
|
}
|
47
50
|
}
|
48
51
|
|
@@ -79,10 +82,10 @@ export async function start(config: Config, options: Options, resolveApi: (api:
|
|
79
82
|
|
80
83
|
if (options.ui) {
|
81
84
|
resolveApi(creeveyApi(runner));
|
82
|
-
logger.info(`Started on http://localhost:${options.port}`);
|
85
|
+
logger().info(`Started on http://localhost:${options.port}`);
|
83
86
|
} else {
|
84
87
|
if (Object.values(runner.status.tests).filter((test) => test && !test.skip).length == 0) {
|
85
|
-
logger.warn("Don't have any tests to run");
|
88
|
+
logger().warn("Don't have any tests to run");
|
86
89
|
|
87
90
|
void shutdownWorkers().then(() => process.exit());
|
88
91
|
return;
|
@@ -99,7 +102,7 @@ export async function start(config: Config, options: Options, resolveApi: (api:
|
|
99
102
|
void sendScreenshotsCount(config, options, runner.status)
|
100
103
|
.catch((reason: unknown) => {
|
101
104
|
const error = reason instanceof Error ? (reason.stack ?? reason.message) : (reason as string);
|
102
|
-
logger.warn(`Can't send telemetry: ${error}`);
|
105
|
+
logger().warn(`Can't send telemetry: ${error}`);
|
103
106
|
})
|
104
107
|
.finally(() => {
|
105
108
|
void shutdownWorkers().then(() => process.exit());
|
@@ -1,10 +1,9 @@
|
|
1
|
-
import
|
1
|
+
import { Worker as ClusterWorker } from 'cluster';
|
2
2
|
import { EventEmitter } from 'events';
|
3
|
-
import { Worker, Config, TestResult, BrowserConfig,
|
4
|
-
import { sendTestMessage,
|
5
|
-
import { isShuttingDown } from '../utils.js';
|
6
|
-
|
7
|
-
const FORK_RETRIES = 5;
|
3
|
+
import { Worker, Config, TestResult, BrowserConfig, TestStatus } from '../../types.js';
|
4
|
+
import { sendTestMessage, subscribeOnWorker } from '../messages.js';
|
5
|
+
import { gracefullyKill, isShuttingDown } from '../utils.js';
|
6
|
+
import { WorkerQueue } from './queue.js';
|
8
7
|
|
9
8
|
interface WorkerTest {
|
10
9
|
id: string;
|
@@ -23,6 +22,7 @@ export default class Pool extends EventEmitter {
|
|
23
22
|
return this.workers.length !== this.freeWorkers.length;
|
24
23
|
}
|
25
24
|
constructor(
|
25
|
+
public scheduler: WorkerQueue,
|
26
26
|
config: Config,
|
27
27
|
private browser: string,
|
28
28
|
) {
|
@@ -35,10 +35,9 @@ export default class Pool extends EventEmitter {
|
|
35
35
|
|
36
36
|
async init(): Promise<void> {
|
37
37
|
const poolSize = Math.max(1, this.config.limit ?? 1);
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
);
|
38
|
+
this.workers = (
|
39
|
+
await Promise.all(Array.from({ length: poolSize }).map(() => this.scheduler.forkWorker(this.browser)))
|
40
|
+
).filter((workerOrError): workerOrError is Worker => workerOrError instanceof ClusterWorker);
|
42
41
|
if (this.workers.length != poolSize)
|
43
42
|
throw new Error(`Can't instantiate workers for ${this.browser} due many errors`);
|
44
43
|
this.workers.forEach((worker) => {
|
@@ -55,7 +54,7 @@ export default class Pool extends EventEmitter {
|
|
55
54
|
return true;
|
56
55
|
}
|
57
56
|
|
58
|
-
stop()
|
57
|
+
stop() {
|
59
58
|
if (!this.isRunning) {
|
60
59
|
this.emit('stop');
|
61
60
|
return;
|
@@ -65,7 +64,7 @@ export default class Pool extends EventEmitter {
|
|
65
64
|
this.queue = [];
|
66
65
|
}
|
67
66
|
|
68
|
-
process()
|
67
|
+
process() {
|
69
68
|
const worker = this.getFreeWorker();
|
70
69
|
const test = this.queue.at(0);
|
71
70
|
|
@@ -88,7 +87,9 @@ export default class Pool extends EventEmitter {
|
|
88
87
|
|
89
88
|
sendTestMessage(worker, { type: 'start', payload: test });
|
90
89
|
|
91
|
-
|
90
|
+
setImmediate(() => {
|
91
|
+
this.process();
|
92
|
+
});
|
92
93
|
}
|
93
94
|
|
94
95
|
private sendStatus(message: { id: string; status: TestStatus; result?: TestResult }): void {
|
@@ -109,34 +110,12 @@ export default class Pool extends EventEmitter {
|
|
109
110
|
return this.aliveWorkers.filter((worker) => !worker.isRunning);
|
110
111
|
}
|
111
112
|
|
112
|
-
private async forkWorker(retry = 0): Promise<Worker | { error: string }> {
|
113
|
-
cluster.setupPrimary({
|
114
|
-
args: ['--browser', this.browser, ...process.argv.slice(2)],
|
115
|
-
});
|
116
|
-
const worker = cluster.fork();
|
117
|
-
const message = await new Promise((resolve: (value: WorkerMessage) => void) => {
|
118
|
-
const readyHandler = (message: unknown): void => {
|
119
|
-
if (!isWorkerMessage(message)) return;
|
120
|
-
worker.off('message', readyHandler);
|
121
|
-
resolve(message);
|
122
|
-
};
|
123
|
-
worker.on('message', readyHandler);
|
124
|
-
});
|
125
|
-
|
126
|
-
if (message.type != 'error') return worker;
|
127
|
-
|
128
|
-
this.gracefullyKill(worker);
|
129
|
-
|
130
|
-
if (retry == FORK_RETRIES) return message.payload;
|
131
|
-
return this.forkWorker(retry + 1);
|
132
|
-
}
|
133
|
-
|
134
113
|
private exitHandler(worker: Worker): void {
|
135
114
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
136
115
|
worker.once('exit', async () => {
|
137
116
|
if (isShuttingDown.current) return;
|
138
117
|
|
139
|
-
const workerOrError = await this.forkWorker();
|
118
|
+
const workerOrError = await this.scheduler.forkWorker(this.browser);
|
140
119
|
|
141
120
|
if (!(workerOrError instanceof ClusterWorker))
|
142
121
|
throw new Error(`Can't instantiate worker for ${this.browser} due many errors`);
|
@@ -147,17 +126,6 @@ export default class Pool extends EventEmitter {
|
|
147
126
|
});
|
148
127
|
}
|
149
128
|
|
150
|
-
private gracefullyKill(worker: Worker): void {
|
151
|
-
worker.isShuttingDown = true;
|
152
|
-
const timeout = setTimeout(() => {
|
153
|
-
worker.kill();
|
154
|
-
}, 10000);
|
155
|
-
worker.on('exit', () => {
|
156
|
-
clearTimeout(timeout);
|
157
|
-
});
|
158
|
-
sendShutdownMessage(worker);
|
159
|
-
}
|
160
|
-
|
161
129
|
private shouldRetry(test: WorkerTest): boolean {
|
162
130
|
return test.retries < this.maxRetries && !this.forcedStop;
|
163
131
|
}
|
@@ -188,7 +156,7 @@ export default class Pool extends EventEmitter {
|
|
188
156
|
unsubscribe();
|
189
157
|
});
|
190
158
|
|
191
|
-
|
159
|
+
gracefullyKill(worker);
|
192
160
|
|
193
161
|
this.handleTestResult(worker, test, { status: 'failed', ...message.payload });
|
194
162
|
}),
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import cluster from 'cluster';
|
2
|
+
import { isWorkerMessage, Worker, WorkerMessage } from '../../types.js';
|
3
|
+
import { gracefullyKill, isShuttingDown } from '../utils.js';
|
4
|
+
|
5
|
+
const FORK_RETRIES = 5;
|
6
|
+
|
7
|
+
type MaybeWorker = Worker | { error: string };
|
8
|
+
|
9
|
+
export class WorkerQueue {
|
10
|
+
private isProcessing = false;
|
11
|
+
private queue: { browser: string; retry: number; resolve: (mw: MaybeWorker) => void }[] = [];
|
12
|
+
|
13
|
+
// TODO Add concurrency
|
14
|
+
constructor(private useQueue: boolean) {}
|
15
|
+
|
16
|
+
async forkWorker(browser: string, retry = 0): Promise<MaybeWorker> {
|
17
|
+
return new Promise<MaybeWorker>((resolve) => {
|
18
|
+
this.queue.push({ browser, retry, resolve });
|
19
|
+
|
20
|
+
void this.process();
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
private async process() {
|
25
|
+
if ((this.useQueue && this.isProcessing) || isShuttingDown.current) return;
|
26
|
+
|
27
|
+
const { browser, retry, resolve } = this.queue.pop() ?? {};
|
28
|
+
|
29
|
+
if (browser == undefined || retry == undefined || resolve == undefined) return;
|
30
|
+
|
31
|
+
this.isProcessing = true;
|
32
|
+
|
33
|
+
cluster.setupPrimary({
|
34
|
+
args: ['--browser', browser, ...process.argv.slice(2)],
|
35
|
+
});
|
36
|
+
const worker = cluster.fork();
|
37
|
+
const message = await new Promise((resolve: (value: WorkerMessage) => void) => {
|
38
|
+
const readyHandler = (message: unknown): void => {
|
39
|
+
if (!isWorkerMessage(message)) return;
|
40
|
+
worker.off('message', readyHandler);
|
41
|
+
resolve(message);
|
42
|
+
};
|
43
|
+
worker.on('message', readyHandler);
|
44
|
+
});
|
45
|
+
|
46
|
+
if (message.type == 'error') {
|
47
|
+
gracefullyKill(worker);
|
48
|
+
|
49
|
+
if (retry == FORK_RETRIES) resolve(message.payload);
|
50
|
+
else this.queue.push({ browser, retry: retry + 1, resolve });
|
51
|
+
} else {
|
52
|
+
resolve(worker);
|
53
|
+
}
|
54
|
+
|
55
|
+
this.isProcessing = false;
|
56
|
+
|
57
|
+
setImmediate(() => void this.process());
|
58
|
+
}
|
59
|
+
}
|
@@ -13,12 +13,14 @@ import {
|
|
13
13
|
TestMeta,
|
14
14
|
} from '../../types.js';
|
15
15
|
import Pool from './pool.js';
|
16
|
+
import { WorkerQueue } from './queue.js';
|
16
17
|
|
17
18
|
export default class Runner extends EventEmitter {
|
18
19
|
private failFast: boolean;
|
19
20
|
private screenDir: string;
|
20
21
|
private reportDir: string;
|
21
22
|
private browsers: string[];
|
23
|
+
private scheduler: WorkerQueue;
|
22
24
|
private pools: Record<string, Pool> = {};
|
23
25
|
tests: Partial<Record<string, ServerTest>> = {};
|
24
26
|
public get isRunning(): boolean {
|
@@ -30,9 +32,10 @@ export default class Runner extends EventEmitter {
|
|
30
32
|
this.failFast = config.failFast;
|
31
33
|
this.screenDir = config.screenDir;
|
32
34
|
this.reportDir = config.reportDir;
|
35
|
+
this.scheduler = new WorkerQueue(config.useWorkerQueue);
|
33
36
|
this.browsers = Object.keys(config.browsers);
|
34
37
|
this.browsers
|
35
|
-
.map((browser) => (this.pools[browser] = new Pool(config, browser)))
|
38
|
+
.map((browser) => (this.pools[browser] = new Pool(this.scheduler, config, browser)))
|
36
39
|
.map((pool) => pool.on('test', this.handlePoolMessage));
|
37
40
|
}
|
38
41
|
|