aws-cdk-lib
Version:
Version 2 of the AWS Cloud Development Kit library
187 lines (186 loc) • 5.36 kB
TypeScript
import { DeployOptions, DestroyOptions } from './commands';
/**
* The set of options to control the workflow of the test runner
*/
export interface TestOptions {
/**
* Run update workflow on this test case
* This should only be set to false to test scenarios
* that are not possible to test as part of the update workflow
*
* @default true
*/
readonly stackUpdateWorkflow?: boolean;
/**
* Additional options to use for each CDK command
*
* @default - runner default options
*/
readonly cdkCommandOptions?: CdkCommands;
/**
* Additional commands to run at predefined points in the test workflow
*
* e.g. { postDeploy: ['yarn', 'test'] }
*
* @default - no hooks
*/
readonly hooks?: Hooks;
/**
* Whether or not to include asset hashes in the diff
* Asset hashes can introduces a lot of unneccessary noise into tests,
* but there are some cases where asset hashes _should_ be included. For example
* any tests involving custom resources or bundling
*
* @default false
*/
readonly diffAssets?: boolean;
/**
* List of CloudFormation resource types in this stack that can
* be destroyed as part of an update without failing the test.
*
* This list should only include resources that for this specific
* integration test we are sure will not cause errors or an outage if
* destroyed. For example, maybe we know that a new resource will be created
* first before the old resource is destroyed which prevents any outage.
*
* e.g. ['AWS::IAM::Role']
*
* @default - do not allow destruction of any resources on update
*/
readonly allowDestroy?: string[];
/**
* Limit deployment to these regions
*
* @default - can run in any region
*/
readonly regions?: string[];
}
/**
* Represents an integration test case
*/
export interface TestCase extends TestOptions {
/**
* Stacks that should be tested as part of this test case
* The stackNames will be passed as args to the cdk commands
* so dependent stacks will be automatically deployed unless
* `exclusively` is passed
*/
readonly stacks: string[];
/**
* The node id of the stack that contains assertions.
* This is the value that can be used to deploy the stack with the CDK CLI
*
* @default - no assertion stack
*/
readonly assertionStack?: string;
/**
* The name of the stack that contains assertions
*
* @default - no assertion stack
*/
readonly assertionStackName?: string;
}
/**
* Commands to run at predefined points during the
* integration test workflow
*/
export interface Hooks {
/**
* Commands to run prior to deploying the cdk stacks
* in the integration test
*
* @default - no commands
*/
readonly preDeploy?: string[];
/**
* Commands to run prior after deploying the cdk stacks
* in the integration test
*
* @default - no commands
*/
readonly postDeploy?: string[];
/**
* Commands to run prior to destroying the cdk stacks
* in the integration test
*
* @default - no commands
*/
readonly preDestroy?: string[];
/**
* Commands to run after destroying the cdk stacks
* in the integration test
*
* @default - no commands
*/
readonly postDestroy?: string[];
}
/**
* Represents a cdk command
* i.e. `synth`, `deploy`, & `destroy`
*/
export interface CdkCommand {
/**
* Whether or not to run this command as part of the workflow
* This can be used if you only want to test some of the workflow
* for example enable `synth` and disable `deploy` & `destroy` in order
* to limit the test to synthesis
*
* @default true
*/
readonly enabled?: boolean;
/**
* If the runner should expect this command to fail
*
* @default false
*/
readonly expectError?: boolean;
/**
* This can be used in combination with `expectedError`
* to validate that a specific message is returned.
*
* @default - do not validate message
*/
readonly expectedMessage?: string;
}
/**
* Represents a cdk deploy command
*/
export interface DeployCommand extends CdkCommand {
/**
* Additional arguments to pass to the command
* This can be used to test specific CLI functionality
*
* @default - only default args are used
*/
readonly args?: DeployOptions;
}
/**
* Represents a cdk destroy command
*/
export interface DestroyCommand extends CdkCommand {
/**
* Additional arguments to pass to the command
* This can be used to test specific CLI functionality
*
* @default - only default args are used
*/
readonly args?: DestroyOptions;
}
/**
* Options for specific cdk commands that are run
* as part of the integration test workflow
*/
export interface CdkCommands {
/**
* Options to for the cdk deploy command
*
* @default - default deploy options
*/
readonly deploy?: DeployCommand;
/**
* Options to for the cdk destroy command
*
* @default - default destroy options
*/
readonly destroy?: DestroyCommand;
}