1 | "use strict";
|
2 |
|
3 | const Promise = require('bluebird');
|
4 |
|
5 | const {timeoutMessages} = require('../commons/constants');
|
6 | const BaseWorker = require('./BaseWorker');
|
7 | const logger = require('../commons/logger').getLogger("worker-ext");
|
8 | const ExtensionTestPlayer = require('../player/extensionTestPlayer');
|
9 | const reporter = require("../reports/reporter");
|
10 |
|
11 | const TEST_START_TIMEOUT = parseInt(process.env.TESTIM_TEST_START_TIMEOUT) || (2 * 60 * 1000);
|
12 |
|
13 | class WorkerExtension extends BaseWorker {
|
14 | initPlayer() {
|
15 | return new ExtensionTestPlayer(this.id);
|
16 | }
|
17 |
|
18 | getBrowserOnce(testRunHandler, customExtensionLocalLocation, player) {
|
19 | reporter.onGetSession(this.id, this.testName, testRunHandler.getRunMode());
|
20 | const {browserValue} = this.testRunConfig;
|
21 | const {driver} = player;
|
22 | return this.getGridSlot(browserValue, testRunHandler)
|
23 | .then(gridInfo => driver.init(this.options, this.testName, this.testRunConfig, gridInfo, customExtensionLocalLocation, this.testResultId))
|
24 | .catch(err => {
|
25 | logger.error("failed to get browser", {
|
26 | err: err,
|
27 | testId: testRunHandler.getTestId(),
|
28 | resultId: testRunHandler.getTestResultId()
|
29 | });
|
30 | return Promise.reject(err);
|
31 | });
|
32 | }
|
33 |
|
34 | runTestOnce(testRunHandler, player) {
|
35 | const { driver } = player;
|
36 |
|
37 | const runExtTest = (testRunHandler) => {
|
38 | return new Promise((resolve, reject) => {
|
39 | testRunHandler.listenToRemoteStep(driver);
|
40 |
|
41 | return testRunHandler.getRunTestUrl()
|
42 | .then(url => {
|
43 | reporter.onWaitToTestStart(this.id);
|
44 | return Promise.all([driver.url(url), testRunHandler.onStarted()])
|
45 | .timeout(TEST_START_TIMEOUT, timeoutMessages.TEST_START_TIMEOUT_MSG)
|
46 | .catch(Promise.TimeoutError, () => testRunHandler.checkViaRestAPIIfTestStarted());
|
47 | })
|
48 | .then(() => {
|
49 | reporter.onWaitToTestComplete(this.id, this.isCodeMode);
|
50 | return testRunHandler.onCompleted().timeout(this.testRunTimeout, timeoutMessages.TEST_COMPLETE_TIMEOUT_MSG)
|
51 | .then(testResult => {
|
52 | resolve(testResult);
|
53 | })
|
54 | .catch(err => {
|
55 | logger.warn("timeout wait until test completed", {err: err});
|
56 |
|
57 | reject(new Error(err));
|
58 | });
|
59 | })
|
60 | .catch(err => {
|
61 | logger.warn("failed to start url", {err: err});
|
62 | reject(new Error(err));
|
63 | });
|
64 | });
|
65 | };
|
66 |
|
67 | driver.start();
|
68 |
|
69 | return super.runTestOnce(testRunHandler, player)
|
70 | .then(() => runExtTest(testRunHandler))
|
71 | .catch(err => {
|
72 | logger.error("failed to run test", {
|
73 | err: err,
|
74 | testId: testRunHandler.getTestId(),
|
75 | resultId: testRunHandler.getTestResultId()
|
76 | });
|
77 | return Promise.reject(err);
|
78 | });
|
79 | }
|
80 | }
|
81 |
|
82 | module.exports = WorkerExtension;
|