[reporting/upgrade/tests] rewrite waitForJobToFinish to handle errors (#128309)

This commit is contained in:
Spencer 2022-03-22 14:55:37 -07:00 committed by GitHub
parent 4cd7f879a8
commit a28b25a9b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 28 deletions

View file

@ -114,6 +114,7 @@ export const schema = Joi.object()
try: Joi.number().default(120000),
waitFor: Joi.number().default(20000),
esRequestTimeout: Joi.number().default(30000),
kibanaReportCompletion: Joi.number().default(60_000),
kibanaStabilize: Joi.number().default(15000),
navigateStatusPageCheck: Joi.number().default(250),
@ -166,7 +167,9 @@ export const schema = Joi.object()
mochaReporter: Joi.object()
.keys({
captureLogOutput: Joi.boolean().default(!!process.env.CI),
captureLogOutput: Joi.boolean().default(
!!process.env.CI && !process.env.DISABLE_CI_LOG_OUTPUT_CAPTURE
),
sendToCiStats: Joi.boolean().default(!!process.env.CI),
})
.default(),

View file

@ -89,11 +89,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
const postUrl = await find.byXPath(`//button[descendant::*[text()='Copy POST URL']]`);
await postUrl.click();
const url = await browser.getClipboardValue();
await reportingAPI.expectAllJobsToFinishSuccessfully(
await Promise.all([
reportingAPI.postJob(parse(url).pathname + '?' + parse(url).query),
])
);
await reportingAPI.expectAllJobsToFinishSuccessfully([
await reportingAPI.postJob(parse(url).pathname + '?' + parse(url).query),
]);
usage = (await usageAPI.getUsageStats()) as UsageStats;
reportingAPI.expectCompletedReportCount(usage, completedReportCount + 1);
});

View file

@ -47,33 +47,34 @@ export function ReportingAPIProvider({ getService }: FtrProviderContext) {
const supertest = getService('supertest');
const esSupertest = getService('esSupertest');
const retry = getService('retry');
const config = getService('config');
return {
async waitForJobToFinish(downloadReportPath: string) {
log.debug(`Waiting for job to finish: ${downloadReportPath}`);
const JOB_IS_PENDING_CODE = 503;
const statusCode = await new Promise((resolve) => {
const intervalId = setInterval(async () => {
const response = (await supertest
async waitForJobToFinish(downloadReportPath: string, options?: { timeout?: number }) {
await retry.waitForWithTimeout(
`job ${downloadReportPath} finished`,
options?.timeout ?? config.get('timeouts.kibanaReportCompletion'),
async () => {
const response = await supertest
.get(downloadReportPath)
.responseType('blob')
.set('kbn-xsrf', 'xxx')) as any;
if (response.statusCode === 503) {
log.debug(`Report at path ${downloadReportPath} is pending`);
} else if (response.statusCode === 200) {
log.debug(`Report at path ${downloadReportPath} is complete`);
} else {
log.debug(`Report at path ${downloadReportPath} returned code ${response.statusCode}`);
}
if (response.statusCode !== JOB_IS_PENDING_CODE) {
clearInterval(intervalId);
resolve(response.statusCode);
}
}, 1500);
});
.set('kbn-xsrf', 'xxx');
expect(statusCode).to.be(200);
if (response.status === 503) {
log.debug(`Report at path ${downloadReportPath} is pending`);
return false;
}
log.debug(`Report at path ${downloadReportPath} returned code ${response.status}`);
if (response.status === 200) {
log.debug(`Report at path ${downloadReportPath} is complete`);
return true;
}
throw new Error(`unexpected status code ${response.status}`);
}
);
},
async expectAllJobsToFinishSuccessfully(jobPaths: string[]) {