@aws-cdk-testing/cli-integ
Version:
Integration tests for the AWS CDK CLI
82 lines (74 loc) • 2.93 kB
text/typescript
/**
* Tests for the standalone cdk-assets executable, as used by CDK Pipelines
*/
import { promises as fs } from 'fs';
import * as path from 'path';
import { integTest, withDefaultFixture } from '../../../lib';
jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
integTest(
`cdk-assets smoke test`,
withDefaultFixture(async (fixture) => {
await fixture.shell(['npm', 'init', '-y']);
await fixture.shell(['npm', 'install', `cdk-assets@latest`]);
const account = await fixture.aws.account();
const region = fixture.aws.region;
const bucketName = `cdk-hnb659fds-assets-${account}-${region}`;
const repositoryName = `cdk-hnb659fds-container-assets-${account}-${region}`;
const imageDir = 'imagedir';
await fs.mkdir(path.join(fixture.integTestDir, imageDir), { recursive: true });
// Write an asset file and a data file for the Docker image
const assetFile = 'testfile.txt';
for (const toCreate of [assetFile, `${imageDir}/datafile.txt`]) {
await fs.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
}
// Write a Dockerfile for the image build with a data file in it
await fs.writeFile(path.join(fixture.integTestDir, imageDir, 'Dockerfile'), [
'FROM scratch',
'ADD datafile.txt datafile.txt',
].join('\n'));
// Write an asset JSON file to publish to the bootstrapped environment
const assetsJson = {
version: "38.0.1",
files: {
testfile: {
source: {
path: assetFile,
packaging: 'file',
},
destinations: {
current: {
region,
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-file-publishing-role-${account}-${region}`,
bucketName,
objectKey: `test-file-${Date.now()}.json`,
}
}
}
},
dockerImages: {
testimage: {
source: {
directory: imageDir,
},
destinations: {
current: {
region,
assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-image-publishing-role-${account}-${region}`,
repositoryName,
imageTag: `test-image`, // Not fresh on every run because we'll run out of tags too easily
},
},
},
}
};
await fs.writeFile(path.join(fixture.integTestDir, 'assets.json'), JSON.stringify(assetsJson, undefined, 2));
await fixture.shell(['npx', 'cdk-assets', '--path', 'assets.json', '--verbose', 'publish'], {
modEnv: {
...fixture.cdkShellEnv(),
// This is necessary for cdk-assets v2, if the credentials are supplied via
// config file (which they are on the CodeBuild canaries).
AWS_SDK_LOAD_CONFIG: '1',
},
});
}),
);