Skip to content

Commit dc5888c

Browse files
committed
mo shit
1 parent 654eedf commit dc5888c

File tree

5 files changed

+58
-74
lines changed

5 files changed

+58
-74
lines changed

packages/@aws-cdk/integ-runner/lib/workers/common.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -299,38 +299,45 @@ export function formatAssertionResults(results: AssertionResults): string {
299299
.join('\n ');
300300
}
301301

302+
/**
303+
* Formats a status keyword with 2 spaces prefix and right-padded to 12 characters total.
304+
*/
305+
function formatStatus(keyword: string): string {
306+
return ` ${keyword}`.padEnd(12);
307+
}
308+
302309
/**
303310
* Print out the results from tests
304311
*/
305312
export function printResults(diagnostic: Diagnostic): void {
306313
switch (diagnostic.reason) {
307314
case DiagnosticReason.SNAPSHOT_SUCCESS:
308-
logger.success(' UNCHANGED %s %s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
315+
logger.success('%s %s %s', formatStatus('UNCHANGED'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
309316
break;
310317
case DiagnosticReason.TEST_SUCCESS:
311-
logger.success(' SUCCESS %s %s\n ', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
318+
logger.success('%s %s %s\n ', formatStatus('SUCCESS'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
312319
break;
313320
case DiagnosticReason.NO_SNAPSHOT:
314-
logger.error(' NEW %s %s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
321+
logger.error('%s %s %s', formatStatus('NEW'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`));
315322
break;
316323
case DiagnosticReason.SNAPSHOT_FAILED:
317-
logger.error(' CHANGED %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
324+
logger.error('%s %s %s\n%s', formatStatus('CHANGED'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
318325
break;
319326
case DiagnosticReason.TEST_WARNING:
320-
logger.warning(' WARN %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
327+
logger.warning('%s %s %s\n%s', formatStatus('WARN'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
321328
break;
322329
case DiagnosticReason.SNAPSHOT_ERROR:
323330
case DiagnosticReason.TEST_ERROR:
324-
logger.error(' ERROR %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
331+
logger.error('%s %s %s\n%s', formatStatus('ERROR'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
325332
break;
326333
case DiagnosticReason.TEST_FAILED:
327-
logger.error(' FAILED %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
334+
logger.error('%s %s %s\n%s', formatStatus('FAILED'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
328335
break;
329336
case DiagnosticReason.ASSERTION_FAILED:
330-
logger.error(' ASSERT %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
337+
logger.error('%s %s %s\n%s', formatStatus('ASSERT'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
331338
break;
332339
case DiagnosticReason.NOT_BOOTSTRAPPED:
333-
logger.warning(' BOOTSTRAP %s %s\n%s', diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
340+
logger.warning('%s %s %s\n%s', formatStatus('ENV'), diagnostic.testName, chalk.gray(`${diagnostic.duration}s`), indentLines(diagnostic.message, 6));
334341
break;
335342
}
336343
for (const addl of diagnostic.additionalMessages ?? []) {

packages/@aws-cdk/integ-runner/lib/workers/extract/extract_worker.ts

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,6 @@ import type { TestEnvironment } from '../environment-pool';
99
import type { IntegTestBatchRequest } from '../integ-test-worker';
1010
import type { IntegWatchOptions } from '../integ-watch-worker';
1111

12-
/**
13-
* Response from the integTestWorker function
14-
*/
15-
export interface IntegTestWorkerResponse {
16-
/**
17-
* Tests that failed (non-retryable)
18-
*/
19-
readonly failedTests: IntegTestWorkerConfig[];
20-
}
21-
2212
/**
2313
* Runs a single integration test batch request.
2414
* If the test does not have an existing snapshot,
@@ -27,7 +17,7 @@ export interface IntegTestWorkerResponse {
2717
*
2818
* If the tests succeed it will then save the snapshot
2919
*/
30-
export async function integTestWorker(request: IntegTestBatchRequest): Promise<IntegTestWorkerResponse> {
20+
export async function integTestWorker(request: IntegTestBatchRequest): Promise<IntegTestWorkerConfig[]> {
3121
const failures: IntegTestInfo[] = [];
3222
const verbosity = request.verbosity ?? 0;
3323

@@ -126,9 +116,7 @@ export async function integTestWorker(request: IntegTestBatchRequest): Promise<I
126116
}
127117
}
128118

129-
return {
130-
failedTests: failures,
131-
};
119+
return failures;
132120
}
133121

134122
export async function watchTestWorker(options: IntegWatchOptions): Promise<void> {

packages/@aws-cdk/integ-runner/lib/workers/integ-test-worker.ts

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import type { IntegBatchResponse, IntegTestOptions, IntegRunnerMetrics, IntegTes
44
import { printResults, printSummary, DiagnosticReason } from './common';
55
import { EnvironmentPool, type RemovedEnvironmentInfo, type TestEnvironment } from './environment-pool';
66
import * as logger from '../logger';
7-
import type { IntegTestWorkerResponse } from './extract/extract_worker';
7+
import type { IntegTestInfo } from '../runner/integration-tests';
8+
import { flatten } from '../utils';
89

910
/**
1011
* Options for an integration test batch
@@ -200,16 +201,13 @@ export async function runIntegrationTestsInParallel(
200201
logger.print(chalk.red(` No valid environments remaining for test ${diagnostic.testInfo.fileName}`));
201202
}
202203
}
203-
204-
// Still print the diagnostic
205-
printResults(diagnostic);
206-
} else {
207-
// Handle regular diagnostic messages
208-
printResults(diagnostic);
209204
}
205+
206+
// Handle regular diagnostic messages
207+
printResults(diagnostic);
210208
};
211209

212-
const response: IntegTestWorkerResponse = await options.pool.exec('integTestWorker', [{
210+
const response: IntegTestInfo[][] = await options.pool.exec('integTestWorker', [{
213211
watch: options.watch,
214212
region: worker.region,
215213
profile: worker.profile,
@@ -222,8 +220,7 @@ export async function runIntegrationTestsInParallel(
222220
on: handleWorkerMessage,
223221
});
224222

225-
// Add non-retryable failures to results
226-
results.failedTests.push(...response.failedTests);
223+
results.failedTests.push(...flatten(response));
227224
tests[test.fileName] = (Date.now() - testStart) / 1000;
228225
} while (queue.length > 0 || retryQueue.length > 0);
229226

@@ -246,7 +243,7 @@ export async function runIntegrationTestsInParallel(
246243
// Store removed environments in results for summary reporting
247244
const removedEnvs = environmentPool.getRemovedEnvironments();
248245
if (removedEnvs.length > 0) {
249-
(results as any).removedEnvironments = removedEnvs;
246+
results.removedEnvironments = removedEnvs;
250247
}
251248

252249
return results;
@@ -259,11 +256,9 @@ function emitEnvironmentRemovedWarning(environment: TestEnvironment, reason: str
259256
const profileStr = environment.profile ? `${environment.profile}/` : '';
260257
const accountStr = environment.account ? `aws://${environment.account}/${environment.region}` : environment.region;
261258

262-
logger.warning(
263-
chalk.yellow(`\n⚠️ Environment ${profileStr}${environment.region} removed due to bootstrap error`),
264-
);
265-
logger.warning(chalk.yellow(` Reason: ${reason}`));
266-
logger.warning(chalk.yellow(` Run: ${chalk.blue(`cdk bootstrap ${accountStr}`)}\n`));
259+
logger.warning(`\n⚠️ Environment ${profileStr}${environment.region} removed due to bootstrap error`);
260+
logger.warning(` Reason: ${reason}`);
261+
logger.warning(` Run: ${chalk.blue(`cdk bootstrap ${accountStr}`)}\n`);
267262
}
268263

269264
/**

packages/@aws-cdk/integ-runner/test/workers/integ-worker.test.ts

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe('integTestWorker', () => {
9595
region: 'us-east-1',
9696
});
9797

98-
expect(results.failedTests).toEqual([]);
98+
expect(results).toEqual([]);
9999
expect(workerpool.workerEmit).toHaveBeenCalledWith(
100100
expect.objectContaining({
101101
reason: 'TEST_SUCCESS',
@@ -120,7 +120,7 @@ describe('integTestWorker', () => {
120120
region: 'us-east-1',
121121
});
122122

123-
expect(results.failedTests).toEqual([{
123+
expect(results).toEqual([{
124124
fileName: 'test/test-data/xxxxx.test-with-snapshot.js',
125125
discoveryRoot: 'test/test-data',
126126
}]);
@@ -145,7 +145,7 @@ describe('integTestWorker', () => {
145145
region: 'us-east-1',
146146
});
147147

148-
expect(results.failedTests).toEqual([{
148+
expect(results).toEqual([{
149149
fileName: 'test/test-data/xxxxx.test-with-snapshot.js',
150150
discoveryRoot: 'test/test-data',
151151
}]);
@@ -168,7 +168,7 @@ describe('integTestWorker', () => {
168168
region: 'us-east-1',
169169
});
170170

171-
expect(results.failedTests).toEqual([{
171+
expect(results).toEqual([{
172172
fileName: 'test/test-data/xxxxx.test-with-snapshot.js',
173173
discoveryRoot: 'test/test-data',
174174
}]);
@@ -195,7 +195,7 @@ describe('integTestWorker', () => {
195195
region: 'us-east-1',
196196
});
197197

198-
expect(results.failedTests).toEqual([]);
198+
expect(results).toEqual([]);
199199
expect(mockRunIntegTestCase).toHaveBeenCalledTimes(2);
200200
expect(mockRunIntegTestCase).toHaveBeenCalledWith(
201201
expect.objectContaining({ testCaseName: 'test-case-1' }),
@@ -225,7 +225,7 @@ describe('integTestWorker', () => {
225225
region: 'us-east-1',
226226
});
227227

228-
expect(results.failedTests).toEqual([]);
228+
expect(results).toEqual([]);
229229
expect(mockActualTests).toHaveBeenCalledTimes(2);
230230
});
231231

@@ -263,7 +263,7 @@ describe('integTestWorker', () => {
263263
region: 'us-east-1',
264264
});
265265

266-
expect(results.failedTests).toEqual([{
266+
expect(results).toEqual([{
267267
fileName: 'test/test-data/xxxxx.integ-test2.js',
268268
discoveryRoot: 'test/test-data',
269269
}]);
@@ -291,7 +291,7 @@ describe('integTestWorker', () => {
291291
region: 'us-east-1',
292292
});
293293

294-
expect(results.failedTests).toEqual([{
294+
expect(results).toEqual([{
295295
fileName: 'test/test-data/xxxxx.test-with-snapshot.js',
296296
discoveryRoot: 'test/test-data',
297297
}]);
@@ -331,7 +331,7 @@ describe('integTestWorker', () => {
331331
});
332332

333333
// THEN - test should NOT be in failedTests (it's retryable via diagnostic)
334-
expect(results.failedTests).toEqual([]);
334+
expect(results).toEqual([]);
335335
// NOT_BOOTSTRAPPED diagnostic should be emitted with environment and testInfo
336336
expect(workerpool.workerEmit).toHaveBeenCalledWith(
337337
expect.objectContaining({
@@ -429,7 +429,7 @@ describe('integTestWorker', () => {
429429
});
430430

431431
// THEN - test should be in failedTests
432-
expect(results.failedTests).toEqual([{
432+
expect(results).toEqual([{
433433
fileName: 'test/test-data/xxxxx.test-with-snapshot.js',
434434
discoveryRoot: 'test/test-data',
435435
}]);
@@ -462,7 +462,7 @@ describe('integTestWorker', () => {
462462
});
463463

464464
// THEN - test should be in failedTests
465-
expect(results.failedTests).toEqual([{
465+
expect(results).toEqual([{
466466
fileName: 'test/test-data/xxxxx.integ-test2.js',
467467
discoveryRoot: 'test/test-data',
468468
}]);
@@ -882,10 +882,8 @@ describe('parallel worker retry logic', () => {
882882
},
883883
});
884884
}
885-
// Return empty failedTests since the test is retryable
886-
return Promise.resolve({
887-
failedTests: [],
888-
});
885+
// Return empty failures since the test is retryable
886+
return Promise.resolve([]);
889887
}
890888

891889
// Success case - emit TEST_SUCCESS diagnostic
@@ -896,9 +894,7 @@ describe('parallel worker retry logic', () => {
896894
message: 'Test passed',
897895
});
898896
}
899-
return Promise.resolve({
900-
failedTests: [],
901-
});
897+
return Promise.resolve([]);
902898
};
903899
}
904900

@@ -1000,7 +996,7 @@ describe('parallel worker retry logic', () => {
1000996
},
1001997
});
1002998
}
1003-
return Promise.resolve({ failedTests: [] });
999+
return Promise.resolve([]);
10041000
}
10051001

10061002
// us-east-2 succeeds
@@ -1011,7 +1007,7 @@ describe('parallel worker retry logic', () => {
10111007
message: 'Test passed',
10121008
});
10131009
}
1014-
return Promise.resolve({ failedTests: [] });
1010+
return Promise.resolve([]);
10151011
});
10161012

10171013
// WHEN - run with multiple tests
@@ -1061,7 +1057,7 @@ describe('parallel worker retry logic', () => {
10611057
},
10621058
});
10631059
}
1064-
return Promise.resolve({ failedTests: [] });
1060+
return Promise.resolve([]);
10651061
}
10661062

10671063
if (options?.on) {
@@ -1071,7 +1067,7 @@ describe('parallel worker retry logic', () => {
10711067
message: 'Test passed',
10721068
});
10731069
}
1074-
return Promise.resolve({ failedTests: [] });
1070+
return Promise.resolve([]);
10751071
});
10761072

10771073
// WHEN - run with multiple tests so us-east-2 stays active
@@ -1085,8 +1081,8 @@ describe('parallel worker retry logic', () => {
10851081
});
10861082

10871083
// THEN - removed environments should be tracked in results
1088-
expect((results as any).removedEnvironments).toBeDefined();
1089-
expect((results as any).removedEnvironments).toEqual(
1084+
expect(results.removedEnvironments).toBeDefined();
1085+
expect(results.removedEnvironments).toEqual(
10901086
expect.arrayContaining([
10911087
expect.objectContaining({
10921088
region: 'us-east-1',
@@ -1127,7 +1123,7 @@ describe('parallel worker retry logic', () => {
11271123
},
11281124
});
11291125
}
1130-
return Promise.resolve({ failedTests: [] });
1126+
return Promise.resolve([]);
11311127
}
11321128

11331129
if (options?.on) {
@@ -1137,7 +1133,7 @@ describe('parallel worker retry logic', () => {
11371133
message: 'Test passed',
11381134
});
11391135
}
1140-
return Promise.resolve({ failedTests: [] });
1136+
return Promise.resolve([]);
11411137
});
11421138

11431139
// WHEN - run with multiple tests
@@ -1155,7 +1151,7 @@ describe('parallel worker retry logic', () => {
11551151
expect(usEast1CallCount).toBe(1);
11561152

11571153
// Only one removal entry for us-east-1
1158-
const removedEnvs = (results as any).removedEnvironments || [];
1154+
const removedEnvs = results.removedEnvironments || [];
11591155
const usEast1Removals = removedEnvs.filter((e: any) => e.region === 'us-east-1');
11601156
expect(usEast1Removals.length).toBe(1);
11611157

@@ -1196,7 +1192,7 @@ describe('parallel worker retry logic', () => {
11961192
},
11971193
});
11981194
}
1199-
return Promise.resolve({ failedTests: [] });
1195+
return Promise.resolve([]);
12001196
}
12011197

12021198
if (options?.on) {
@@ -1206,7 +1202,7 @@ describe('parallel worker retry logic', () => {
12061202
message: 'Test passed',
12071203
});
12081204
}
1209-
return Promise.resolve({ failedTests: [] });
1205+
return Promise.resolve([]);
12101206
});
12111207

12121208
// WHEN - run with two profiles
@@ -1229,6 +1225,6 @@ describe('parallel worker retry logic', () => {
12291225
expect(callsByEnv['profile2/us-east-1']).toBeGreaterThan(1);
12301226

12311227
// All tests should succeed
1232-
expect(results.failedTests).toEqual([]);
1228+
expect(results).toEqual([]);
12331229
});
12341230
});

packages/@aws-cdk/integ-runner/test/workers/mock-extract_worker.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import * as workerpool from 'workerpool';
2-
import type { IntegTestWorkerResponse } from '../../lib/workers/extract/extract_worker';
2+
import type { IntegTestInfo } from '../../lib/runner';
33
import type { IntegTestBatchRequest } from '../../lib/workers/integ-test-worker';
44

5-
async function integTestWorker(request: IntegTestBatchRequest): Promise<IntegTestWorkerResponse> {
6-
return {
7-
failedTests: request.tests,
8-
};
5+
async function integTestWorker(request: IntegTestBatchRequest): Promise<IntegTestInfo[]> {
6+
return request.tests;
97
}
108

119
workerpool.worker({

0 commit comments

Comments
 (0)