in packages/health-client/src/deployment-health-checker.ts [20:66]
public async run(
testTimeoutInMinutes: number,
waitTimeBeforeEvaluationInMinutes: number,
evaluationIntervalInMinutes: number,
releaseId: string,
): Promise<void> {
this.logger.logInfo('Start evaluation of functional tests result.');
this.logger.logInfo(`Waiting for ${waitTimeBeforeEvaluationInMinutes} minutes before evaluating functional tests result.`);
await this.waitFunc(this.minutesToMilliseconds(waitTimeBeforeEvaluationInMinutes));
let healthStatus: TestRunResult;
let response: ResponseWithBodyType<HealthReport>;
const startTime = this.getCurrentTime();
while (healthStatus !== 'pass') {
try {
this.logger.logInfo('Retrieving functional tests result.');
response = await this.client.checkHealth(`/release/${releaseId}`);
if (response.statusCode !== 200) {
throw new Error(
JSON.stringify({ statusCode: response.statusCode, statusMessage: response.statusMessage, body: response.body }),
);
}
healthStatus = response.body.healthStatus;
this.logger.logInfo(`Functional tests result: ${JSON.stringify(response.body)}`);
} catch (error) {
this.logger.logInfo(`Failed to retrieve functional tests result. ${System.serializeError(error)}`);
}
if (healthStatus !== 'pass') {
if (this.isTestTimeout(startTime, testTimeoutInMinutes)) {
this.logger.logInfo('Functional tests result validation timed out.');
throw new Error('Functional tests result validation timed out.');
}
this.logger.logInfo(
`Functional tests health status: ${healthStatus ? healthStatus : 'unknown'} . Waiting for next evaluation result.`,
);
await this.waitFunc(this.minutesToMilliseconds(evaluationIntervalInMinutes));
} else {
this.logger.logInfo('Functional tests succeeded.');
await this.downloadAllReports(response.body);
}
}
}