mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 17:28:26 -04:00
[ftr/webdriver] retry on all errors, use Rx so that timers are canceled (#72540)
* [ftr/webdriver] retry on all errors, use Rx so that timers are canceled * throw if attemptToCreateCommand() aborts by resolving to undefined Co-authored-by: spalger <spalger@users.noreply.github.com>
This commit is contained in:
parent
bfbb8d2138
commit
a1753ffffd
1 changed files with 26 additions and 19 deletions
|
@ -21,10 +21,9 @@ import { resolve } from 'path';
|
|||
import Fs from 'fs';
|
||||
|
||||
import * as Rx from 'rxjs';
|
||||
import { mergeMap, map, takeUntil } from 'rxjs/operators';
|
||||
import { mergeMap, map, takeUntil, catchError } from 'rxjs/operators';
|
||||
import { Lifecycle } from '@kbn/test/src/functional_test_runner/lib/lifecycle';
|
||||
import { ToolingLog } from '@kbn/dev-utils';
|
||||
import { delay } from 'bluebird';
|
||||
import chromeDriver from 'chromedriver';
|
||||
// @ts-ignore types not available
|
||||
import geckoDriver from 'geckodriver';
|
||||
|
@ -337,25 +336,33 @@ export async function initWebDriver(
|
|||
edgePaths = await installDriver();
|
||||
}
|
||||
|
||||
return await Promise.race([
|
||||
(async () => {
|
||||
await delay(2 * MINUTE);
|
||||
throw new Error('remote failed to start within 2 minutes');
|
||||
})(),
|
||||
|
||||
(async () => {
|
||||
while (true) {
|
||||
const command = await Promise.race([
|
||||
delay(30 * SECOND),
|
||||
attemptToCreateCommand(log, browserType, lifecycle, config),
|
||||
]);
|
||||
return await Rx.race(
|
||||
Rx.timer(2 * MINUTE).pipe(
|
||||
map(() => {
|
||||
throw new Error('remote failed to start within 2 minutes');
|
||||
})
|
||||
),
|
||||
|
||||
Rx.race(
|
||||
Rx.defer(async () => {
|
||||
const command = await attemptToCreateCommand(log, browserType, lifecycle, config);
|
||||
if (!command) {
|
||||
continue;
|
||||
throw new Error('remote creation aborted');
|
||||
}
|
||||
|
||||
return command;
|
||||
}
|
||||
})(),
|
||||
]);
|
||||
}),
|
||||
Rx.timer(30 * SECOND).pipe(
|
||||
map(() => {
|
||||
throw new Error('remote failed to start within 30 seconds');
|
||||
})
|
||||
)
|
||||
).pipe(
|
||||
catchError((error, resubscribe) => {
|
||||
log.warning('Failure while creating webdriver instance');
|
||||
log.warning(error);
|
||||
log.warning('...retrying...');
|
||||
return resubscribe;
|
||||
})
|
||||
)
|
||||
).toPromise();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue