UNPKG

@aws-cdk-testing/cli-integ

Version:

Integration tests for the AWS CDK CLI

89 lines (85 loc) 10.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const path = require("path"); // import { CreateSecretCommand, DeleteSecretCommand } from '@aws-sdk/client-secrets-manager'; const client_sts_1 = require("@aws-sdk/client-sts"); const lib_1 = require("../../../lib"); jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime (0, lib_1.integTest)('docker-credential-cdk-assets can assume role and fetch ECR credentials', (0, lib_1.withRetry)((0, lib_1.withDefaultFixture)(async (fixture) => { const caller = await fixture.aws.sts.send(new client_sts_1.GetCallerIdentityCommand({})); const roleArn = await fixture.aws.temporaryRole('ecr-repo-role', [ { Action: 'sts:AssumeRole', Effect: 'Allow', Principal: { AWS: caller.Account }, }, ], [ { Effect: 'Allow', Resource: '*', Action: ['ecr:GetAuthorizationToken'], }, ]); await fixture.aws.waitForAssumeRole(roleArn); await testDockerCredential(fixture, { ecrRepository: true, // This role must have permissions to call `ecr:GetAuthorizationToken` assumeRoleArn: roleArn, }); }))); /* // SKIPPED FOR NOW // Requires SecretsManager permissions on the role that's executing this, and that's // too much to set up right now. integTest( 'docker-credential-cdk-assets read from SecretsManager', withDefaultFixture(async (fixture) => { const secret = await fixture.aws.secretsManager.send(new CreateSecretCommand({ Name: `our-secret-${fixture.randomString}`, SecretString: JSON.stringify({ username: 'test-user', password: 'test-password', }), })); fixture.aws.addCleanup(() => fixture.aws.secretsManager.send(new DeleteSecretCommand({ SecretId: secret.ARN, }))); await testDockerCredential(fixture, { secretsManagerSecretId: secret.ARN, secretsUsernameField: 'username', secretsPasswordField: 'password', }); }), ); */ async function testDockerCredential(fixture, credSource) { const domain = 'integ.test.domain'; const credsFilePath = path.join(fixture.integTestDir, 'cdk-docker-creds.json'); fs.writeFileSync(credsFilePath, JSON.stringify({ version: '1.0', domainCredentials: { [domain]: credSource, }, })); const input = path.join(fixture.integTestDir, 'input.txt'); fs.writeFileSync(input, `${domain}\n`); await fixture.cdkAssets.makeCliAvailable(); let output = ''; await (0, lib_1.retry)(process.stdout, 'Getting docker credentials', lib_1.retry.forSeconds(60), async () => { output = await fixture.shell(['docker-credential-cdk-assets', 'get'], { modEnv: { ...fixture.cdkShellEnv(), CDK_DOCKER_CREDS_FILE: credsFilePath, }, stdio: [fs.openSync(input, 'r')], captureStderr: false, }); }); const response = JSON.parse(output); expect(response).toMatchObject({ Username: expect.anything(), Secret: expect.anything(), }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWFzc2V0cy1kb2NrZXItY3JlZGVudGlhbC5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjZGstYXNzZXRzLWRvY2tlci1jcmVkZW50aWFsLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsOEZBQThGO0FBQzlGLG9EQUErRDtBQUkvRCxzQ0FBK0U7QUFFL0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMseUVBQXlFO0FBRTNHLElBQUEsZUFBUyxFQUNQLHdFQUF3RSxFQUN4RSxJQUFBLGVBQVMsRUFBQyxJQUFBLHdCQUFrQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLHFDQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7UUFDL0Q7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7U0FDbkM7S0FDRixFQUFFO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsT0FBTztZQUNmLFFBQVEsRUFBRSxHQUFHO1lBQ2IsTUFBTSxFQUFFLENBQUMsMkJBQTJCLENBQUM7U0FDdEM7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFN0MsTUFBTSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUU7UUFDbEMsYUFBYSxFQUFFLElBQUk7UUFDbkIsc0VBQXNFO1FBQ3RFLGFBQWEsRUFBRSxPQUFPO0tBQ3ZCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQ0osQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNEJFO0FBRUYsS0FBSyxVQUFVLG9CQUFvQixDQUFDLE9BQW9CLEVBQUUsVUFBd0M7SUFDaEcsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUM7SUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDLENBQUM7SUFFL0UsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsS0FBSztRQUNkLGlCQUFpQixFQUFFO1lBQ2pCLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVTtTQUNyQjtLQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNELEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUV2QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFeEIsTUFBTSxJQUFBLFdBQUssRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFFLDRCQUE0QixFQUFFLFdBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekYsTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3BFLE1BQU0sRUFBRTtnQkFDTixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLHFCQUFxQixFQUFFLGFBQWE7YUFDckM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoQyxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUM3QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtRQUMzQixNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtLQUMxQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbi8vIGltcG9ydCB7IENyZWF0ZVNlY3JldENvbW1hbmQsIERlbGV0ZVNlY3JldENvbW1hbmQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1yZWxhdGl2ZS1wYWNrYWdlc1xuaW1wb3J0IHR5cGUgeyBEb2NrZXJEb21haW5DcmVkZW50aWFsU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vQGF3cy1jZGsvY2RrLWFzc2V0cy1saWIvbGliL3ByaXZhdGUvZG9ja2VyLWNyZWRlbnRpYWxzJztcbmltcG9ydCB0eXBlIHsgVGVzdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUsIHdpdGhSZXRyeSwgcmV0cnkgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gICdkb2NrZXItY3JlZGVudGlhbC1jZGstYXNzZXRzIGNhbiBhc3N1bWUgcm9sZSBhbmQgZmV0Y2ggRUNSIGNyZWRlbnRpYWxzJyxcbiAgd2l0aFJldHJ5KHdpdGhEZWZhdWx0Rml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICAgIGNvbnN0IGNhbGxlciA9IGF3YWl0IGZpeHR1cmUuYXdzLnN0cy5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKTtcblxuICAgIGNvbnN0IHJvbGVBcm4gPSBhd2FpdCBmaXh0dXJlLmF3cy50ZW1wb3JhcnlSb2xlKCdlY3ItcmVwby1yb2xlJywgW1xuICAgICAge1xuICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgUHJpbmNpcGFsOiB7IEFXUzogY2FsbGVyLkFjY291bnQgfSxcbiAgICAgIH0sXG4gICAgXSwgW1xuICAgICAge1xuICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgIFJlc291cmNlOiAnKicsXG4gICAgICAgIEFjdGlvbjogWydlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuJ10sXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgYXdhaXQgZml4dHVyZS5hd3Mud2FpdEZvckFzc3VtZVJvbGUocm9sZUFybik7XG5cbiAgICBhd2FpdCB0ZXN0RG9ja2VyQ3JlZGVudGlhbChmaXh0dXJlLCB7XG4gICAgICBlY3JSZXBvc2l0b3J5OiB0cnVlLFxuICAgICAgLy8gVGhpcyByb2xlIG11c3QgaGF2ZSBwZXJtaXNzaW9ucyB0byBjYWxsIGBlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuYFxuICAgICAgYXNzdW1lUm9sZUFybjogcm9sZUFybixcbiAgICB9KTtcbiAgfSkpLFxuKTtcblxuLypcblxuLy8gU0tJUFBFRCBGT1IgTk9XXG4vLyBSZXF1aXJlcyBTZWNyZXRzTWFuYWdlciBwZXJtaXNzaW9ucyBvbiB0aGUgcm9sZSB0aGF0J3MgZXhlY3V0aW5nIHRoaXMsIGFuZCB0aGF0J3Ncbi8vIHRvbyBtdWNoIHRvIHNldCB1cCByaWdodCBub3cuXG5cbmludGVnVGVzdChcbiAgJ2RvY2tlci1jcmVkZW50aWFsLWNkay1hc3NldHMgcmVhZCBmcm9tIFNlY3JldHNNYW5hZ2VyJyxcbiAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgZml4dHVyZS5hd3Muc2VjcmV0c01hbmFnZXIuc2VuZChuZXcgQ3JlYXRlU2VjcmV0Q29tbWFuZCh7XG4gICAgICBOYW1lOiBgb3VyLXNlY3JldC0ke2ZpeHR1cmUucmFuZG9tU3RyaW5nfWAsXG4gICAgICBTZWNyZXRTdHJpbmc6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgdXNlcm5hbWU6ICd0ZXN0LXVzZXInLFxuICAgICAgICBwYXNzd29yZDogJ3Rlc3QtcGFzc3dvcmQnLFxuICAgICAgfSksXG4gICAgfSkpO1xuICAgIGZpeHR1cmUuYXdzLmFkZENsZWFudXAoKCkgPT4gZml4dHVyZS5hd3Muc2VjcmV0c01hbmFnZXIuc2VuZChuZXcgRGVsZXRlU2VjcmV0Q29tbWFuZCh7XG4gICAgICBTZWNyZXRJZDogc2VjcmV0LkFSTixcbiAgICB9KSkpO1xuXG4gICAgYXdhaXQgdGVzdERvY2tlckNyZWRlbnRpYWwoZml4dHVyZSwge1xuICAgICAgc2VjcmV0c01hbmFnZXJTZWNyZXRJZDogc2VjcmV0LkFSTixcbiAgICAgIHNlY3JldHNVc2VybmFtZUZpZWxkOiAndXNlcm5hbWUnLFxuICAgICAgc2VjcmV0c1Bhc3N3b3JkRmllbGQ6ICdwYXNzd29yZCcsXG4gICAgfSk7XG4gIH0pLFxuKTtcblxuKi9cblxuYXN5bmMgZnVuY3Rpb24gdGVzdERvY2tlckNyZWRlbnRpYWwoZml4dHVyZTogVGVzdEZpeHR1cmUsIGNyZWRTb3VyY2U6IERvY2tlckRvbWFpbkNyZWRlbnRpYWxTb3VyY2UpIHtcbiAgY29uc3QgZG9tYWluID0gJ2ludGVnLnRlc3QuZG9tYWluJztcbiAgY29uc3QgY3JlZHNGaWxlUGF0aCA9IHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Nkay1kb2NrZXItY3JlZHMuanNvbicpO1xuXG4gIGZzLndyaXRlRmlsZVN5bmMoY3JlZHNGaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgIHZlcnNpb246ICcxLjAnLFxuICAgIGRvbWFpbkNyZWRlbnRpYWxzOiB7XG4gICAgICBbZG9tYWluXTogY3JlZFNvdXJjZSxcbiAgICB9LFxuICB9KSk7XG5cbiAgY29uc3QgaW5wdXQgPSBwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsICdpbnB1dC50eHQnKTtcbiAgZnMud3JpdGVGaWxlU3luYyhpbnB1dCwgYCR7ZG9tYWlufVxcbmApO1xuXG4gIGF3YWl0IGZpeHR1cmUuY2RrQXNzZXRzLm1ha2VDbGlBdmFpbGFibGUoKTtcbiAgbGV0IG91dHB1dDogc3RyaW5nID0gJyc7XG5cbiAgYXdhaXQgcmV0cnkocHJvY2Vzcy5zdGRvdXQsICdHZXR0aW5nIGRvY2tlciBjcmVkZW50aWFscycsIHJldHJ5LmZvclNlY29uZHMoNjApLCBhc3luYyAoKSA9PiB7XG4gICAgb3V0cHV0ID0gYXdhaXQgZml4dHVyZS5zaGVsbChbJ2RvY2tlci1jcmVkZW50aWFsLWNkay1hc3NldHMnLCAnZ2V0J10sIHtcbiAgICAgIG1vZEVudjoge1xuICAgICAgICAuLi5maXh0dXJlLmNka1NoZWxsRW52KCksXG4gICAgICAgIENES19ET0NLRVJfQ1JFRFNfRklMRTogY3JlZHNGaWxlUGF0aCxcbiAgICAgIH0sXG4gICAgICBzdGRpbzogW2ZzLm9wZW5TeW5jKGlucHV0LCAncicpXSxcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2Uob3V0cHV0KTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b01hdGNoT2JqZWN0KHtcbiAgICBVc2VybmFtZTogZXhwZWN0LmFueXRoaW5nKCksXG4gICAgU2VjcmV0OiBleHBlY3QuYW55dGhpbmcoKSxcbiAgfSk7XG59XG4iXX0=