in packages/@aws-cdk/integ-runner/lib/workers/extract/extract_worker.ts [18:92]
export function integTestWorker(request: IntegTestBatchRequest): IntegTestWorkerConfig[] {
const failures: IntegTestInfo[] = [];
const verbosity = request.verbosity ?? 0;
for (const testInfo of request.tests) {
const test = new IntegTest({
...testInfo,
watch: request.watch,
}); // Hydrate from data
const start = Date.now();
try {
const runner = new IntegTestRunner({
test,
profile: request.profile,
env: {
AWS_REGION: request.region,
CDK_DOCKER: process.env.CDK_DOCKER ?? 'docker',
},
showOutput: verbosity >= 2,
}, testInfo.destructiveChanges);
const tests = runner.actualTests();
if (!tests || Object.keys(tests).length === 0) {
throw new Error(`No tests defined for ${runner.testName}`);
}
for (const testCaseName of Object.keys(tests)) {
try {
const results = runner.runIntegTestCase({
testCaseName,
clean: request.clean,
dryRun: request.dryRun,
updateWorkflow: request.updateWorkflow,
verbosity,
});
if (results && Object.values(results).some(result => result.status === 'fail')) {
failures.push(testInfo);
workerpool.workerEmit({
reason: DiagnosticReason.ASSERTION_FAILED,
testName: `${runner.testName}-${testCaseName} (${request.profile}/${request.region})`,
message: formatAssertionResults(results),
duration: (Date.now() - start) / 1000,
});
} else {
workerpool.workerEmit({
reason: DiagnosticReason.TEST_SUCCESS,
testName: `${runner.testName}-${testCaseName}`,
message: results ? formatAssertionResults(results) : 'NO ASSERTIONS',
duration: (Date.now() - start) / 1000,
});
}
} catch (e) {
failures.push(testInfo);
workerpool.workerEmit({
reason: DiagnosticReason.TEST_FAILED,
testName: `${runner.testName}-${testCaseName} (${request.profile}/${request.region})`,
message: `Integration test failed: ${e}`,
duration: (Date.now() - start) / 1000,
});
}
}
} catch (e) {
failures.push(testInfo);
workerpool.workerEmit({
reason: DiagnosticReason.TEST_ERROR,
testName: `${testInfo.fileName} (${request.profile}/${request.region})`,
message: `Error during integration test: ${e}`,
duration: (Date.now() - start) / 1000,
});
}
}
return failures;
}