UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

105 lines 13.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable import/order */ const plugin_1 = require("../../lib/api/plugin"); const contextproviders = require("../../lib/context-providers"); const context_1 = require("../../lib/api/context"); const mock_sdk_1 = require("../util/mock-sdk"); const mockSDK = new mock_sdk_1.MockSdkProvider(); (0, mock_sdk_1.setDefaultSTSMocks)(); const TEST_PROVIDER = 'testprovider'; const PLUGIN_PROVIDER = 'plugin'; test('errors are reported into the context value', async () => { // GIVEN contextproviders.registerContextProvider(TEST_PROVIDER, { async getValue(_) { throw new Error('Something went wrong'); }, }); const context = new context_1.Context(); // WHEN await contextproviders.provideContextValues([ { key: 'asdf', props: { account: '1234', region: 'us-east-1' }, provider: TEST_PROVIDER }, ], context, mockSDK); // THEN - error is now in context // NOTE: error key is inlined here because it's part of the CX-API // compatibility surface. expect(context.get('asdf').$providerError).toBe('Something went wrong'); }); test('lookup role ARN is resolved', async () => { // GIVEN contextproviders.registerContextProvider(TEST_PROVIDER, { async getValue(args) { if (args.lookupRoleArn == null) { throw new Error('No lookupRoleArn'); } if (args.lookupRoleArn.includes('${AWS::Partition}')) { throw new Error('Partition not resolved'); } return 'some resolved value'; }, }); const context = new context_1.Context(); // WHEN await contextproviders.provideContextValues([ { key: 'asdf', props: { account: '1234', region: 'us-east-1', lookupRoleArn: 'arn:${AWS::Partition}:iam::280619947791:role/cdk-hnb659fds-lookup-role-280619947791-us-east-1', }, provider: TEST_PROVIDER, }, ], context, mockSDK); // THEN - Value gets resolved expect(context.get('asdf')).toEqual('some resolved value'); }); test('errors are marked transient', async () => { // GIVEN contextproviders.registerContextProvider(TEST_PROVIDER, { async getValue(_) { throw new Error('Something went wrong'); }, }); const context = new context_1.Context(); // WHEN await contextproviders.provideContextValues([ { key: 'asdf', props: { account: '1234', region: 'us-east-1' }, provider: TEST_PROVIDER }, ], context, mockSDK); // THEN - error is marked transient expect(context.get('asdf')[context_1.TRANSIENT_CONTEXT_KEY]).toBeTruthy(); }); test('context provider can be registered using PluginHost', async () => { let called = false; // GIVEN plugin_1.PluginHost.instance.registerContextProviderAlpha('prov', { async getValue(_) { called = true; return ''; }, }); const context = new context_1.Context(); // WHEN await contextproviders.provideContextValues([ { key: 'asdf', props: { account: '1234', region: 'us-east-1', pluginName: 'prov' }, provider: PLUGIN_PROVIDER }, ], context, mockSDK); // THEN - error is marked transient expect(called).toEqual(true); }); test('plugin context provider can be called without account/region', async () => { // GIVEN plugin_1.PluginHost.instance.registerContextProviderAlpha('prov', { async getValue(_) { return 'yay'; }, }); const context = new context_1.Context(); // WHEN await contextproviders.provideContextValues([ { key: 'asdf', props: { banana: 'yellow', pluginName: 'prov' }, provider: PLUGIN_PROVIDER }, ], context, mockSDK); // THEN - error is marked transient expect(context.get('asdf')).toEqual('yay'); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2VuZXJpYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLGlEQUFrRDtBQUNsRCxnRUFBZ0U7QUFDaEUsbURBQXVFO0FBQ3ZFLCtDQUF1RTtBQUV2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLDBCQUFlLEVBQUUsQ0FBQztBQUN0QyxJQUFBLDZCQUFrQixHQUFFLENBQUM7QUFFckIsTUFBTSxhQUFhLEdBQVEsY0FBYyxDQUFDO0FBQzFDLE1BQU0sZUFBZSxHQUFRLFFBQVEsQ0FBQztBQUV0QyxJQUFJLENBQUMsNENBQTRDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDNUQsUUFBUTtJQUNSLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLGFBQWEsRUFBRTtRQUN0RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQXVCO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBTyxFQUFFLENBQUM7SUFFOUIsT0FBTztJQUNQLE1BQU0sZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7UUFDMUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUU7S0FDMUYsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckIsaUNBQWlDO0lBRWpDLGtFQUFrRTtJQUNsRSx5QkFBeUI7SUFDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMs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O0lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDOUUsUUFBUTtJQUNSLG1CQUFVLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRTtRQUN2RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQXVCO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sRUFBRSxDQUFDO0lBRTlCLE9BQU87SUFDUCxNQUFNLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQzFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0tBQ25HLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJCLG1DQUFtQztJQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuaW1wb3J0IHsgUGx1Z2luSG9zdCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvcGx1Z2luJztcbmltcG9ydCAqIGFzIGNvbnRleHRwcm92aWRlcnMgZnJvbSAnLi4vLi4vbGliL2NvbnRleHQtcHJvdmlkZXJzJztcbmltcG9ydCB7IENvbnRleHQsIFRSQU5TSUVOVF9DT05URVhUX0tFWSB9IGZyb20gJy4uLy4uL2xpYi9hcGkvY29udGV4dCc7XG5pbXBvcnQgeyBNb2NrU2RrUHJvdmlkZXIsIHNldERlZmF1bHRTVFNNb2NrcyB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5jb25zdCBtb2NrU0RLID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuc2V0RGVmYXVsdFNUU01vY2tzKCk7XG5cbmNvbnN0IFRFU1RfUFJPVklERVI6IGFueSA9ICd0ZXN0cHJvdmlkZXInO1xuY29uc3QgUExVR0lOX1BST1ZJREVSOiBhbnkgPSAncGx1Z2luJztcblxudGVzdCgnZXJyb3JzIGFyZSByZXBvcnRlZCBpbnRvIHRoZSBjb250ZXh0IHZhbHVlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb250ZXh0cHJvdmlkZXJzLnJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyKFRFU1RfUFJPVklERVIsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShfOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAgeyBrZXk6ICdhc2RmJywgcHJvcHM6IHsgYWNjb3VudDogJzEyMzQnLCByZWdpb246ICd1cy1lYXN0LTEnIH0sIHByb3ZpZGVyOiBURVNUX1BST1ZJREVSIH0sXG4gIF0sIGNvbnRleHQsIG1vY2tTREspO1xuXG4gIC8vIFRIRU4gLSBlcnJvciBpcyBub3cgaW4gY29udGV4dFxuXG4gIC8vIE5PVEU6IGVycm9yIGtleSBpcyBpbmxpbmVkIGhlcmUgYmVjYXVzZSBpdCdzIHBhcnQgb2YgdGhlIENYLUFQSVxuICAvLyBjb21wYXRpYmlsaXR5IHN1cmZhY2UuXG4gIGV4cGVjdChjb250ZXh0LmdldCgnYXNkZicpLiRwcm92aWRlckVycm9yKS50b0JlKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xufSk7XG5cbnRlc3QoJ2xvb2t1cCByb2xlIEFSTiBpcyByZXNvbHZlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29udGV4dHByb3ZpZGVycy5yZWdpc3RlckNvbnRleHRQcm92aWRlcihURVNUX1BST1ZJREVSLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoYXJnczoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgaWYgKGFyZ3MubG9va3VwUm9sZUFybiA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gbG9va3VwUm9sZUFybicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXJncy5sb29rdXBSb2xlQXJuLmluY2x1ZGVzKCcke0FXUzo6UGFydGl0aW9ufScpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGl0aW9uIG5vdCByZXNvbHZlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ3NvbWUgcmVzb2x2ZWQgdmFsdWUnO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHtcbiAgICAgIGtleTogJ2FzZGYnLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQnLFxuICAgICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgICAgICBsb29rdXBSb2xlQXJuOiAnYXJuOiR7QVdTOjpQYXJ0aXRpb259OmlhbTo6MjgwNjE5OTQ3NzkxOnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0yODA2MTk5NDc3OTEtdXMtZWFzdC0xJyxcbiAgICAgIH0sXG4gICAgICBwcm92aWRlcjogVEVTVF9QUk9WSURFUixcbiAgICB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gVmFsdWUgZ2V0cyByZXNvbHZlZFxuICBleHBlY3QoY29udGV4dC5nZXQoJ2FzZGYnKSkudG9FcXVhbCgnc29tZSByZXNvbHZlZCB2YWx1ZScpO1xufSk7XG5cbnRlc3QoJ2Vycm9ycyBhcmUgbWFya2VkIHRyYW5zaWVudCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29udGV4dHByb3ZpZGVycy5yZWdpc3RlckNvbnRleHRQcm92aWRlcihURVNUX1BST1ZJREVSLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHsga2V5OiAnYXNkZicsIHByb3BzOiB7IGFjY291bnQ6ICcxMjM0JywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LCBwcm92aWRlcjogVEVTVF9QUk9WSURFUiB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gZXJyb3IgaXMgbWFya2VkIHRyYW5zaWVudFxuICBleHBlY3QoY29udGV4dC5nZXQoJ2FzZGYnKVtUUkFOU0lFTlRfQ09OVEVYVF9LRVldKS50b0JlVHJ1dGh5KCk7XG59KTtcblxudGVzdCgnY29udGV4dCBwcm92aWRlciBjYW4gYmUgcmVnaXN0ZXJlZCB1c2luZyBQbHVnaW5Ib3N0JywgYXN5bmMgKCkgPT4ge1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG5cbiAgLy8gR0lWRU5cbiAgUGx1Z2luSG9zdC5pbnN0YW5jZS5yZWdpc3RlckNvbnRleHRQcm92aWRlckFscGhhKCdwcm92Jywge1xuICAgIGFzeW5jIGdldFZhbHVlKF86IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAgeyBrZXk6ICdhc2RmJywgcHJvcHM6IHsgYWNjb3VudDogJzEyMzQnLCByZWdpb246ICd1cy1lYXN0LTEnLCBwbHVnaW5OYW1lOiAncHJvdicgfSwgcHJvdmlkZXI6IFBMVUdJTl9QUk9WSURFUiB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gZXJyb3IgaXMgbWFya2VkIHRyYW5zaWVudFxuICBleHBlY3QoY2FsbGVkKS50b0VxdWFsKHRydWUpO1xufSk7XG5cbnRlc3QoJ3BsdWdpbiBjb250ZXh0IHByb3ZpZGVyIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBhY2NvdW50L3JlZ2lvbicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgUGx1Z2luSG9zdC5pbnN0YW5jZS5yZWdpc3RlckNvbnRleHRQcm92aWRlckFscGhhKCdwcm92Jywge1xuICAgIGFzeW5jIGdldFZhbHVlKF86IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHJldHVybiAneWF5JztcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBiYW5hbmE6ICd5ZWxsb3cnLCBwbHVnaW5OYW1lOiAncHJvdicgfSBhcyBhbnksIHByb3ZpZGVyOiBQTFVHSU5fUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG1hcmtlZCB0cmFuc2llbnRcbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJykpLnRvRXF1YWwoJ3lheScpO1xufSk7XG4iXX0=