aws-cdk
Version:
CDK Toolkit, the command line tool for CDK apps
104 lines • 13.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable import/order */
const plugin_1 = require("../../lib/api/plugin");
const contextproviders = require("../../lib/context-providers");
const settings_1 = require("../../lib/settings");
const mock_sdk_1 = require("../util/mock-sdk");
const mockSDK = new mock_sdk_1.MockSdkProvider();
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 settings_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 settings_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 settings_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')[settings_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 settings_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 settings_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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2VuZXJpYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBQ2pDLGlEQUFrRDtBQUNsRCxnRUFBZ0U7QUFDaEUsaURBQW9FO0FBQ3BFLCtDQUFtRDtBQUVuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLDBCQUFlLEVBQUUsQ0FBQztBQUV0QyxNQUFNLGFBQWEsR0FBUSxjQUFjLENBQUM7QUFDMUMsTUFBTSxlQUFlLEdBQVEsUUFBUSxDQUFDO0FBRXRDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1RCxRQUFRO0lBQ1IsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFO1FBQ3RELEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBdUI7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFDLENBQUM7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLGtCQUFPLEVBQUUsQ0FBQztJQUU5QixPQUFPO0lBQ1AsTUFBTSxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztRQUMxQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtLQUMxRixFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVyQixpQ0FBaUM7SUFFakMsa0VBQWtFO0lBQ2xFLHlCQUF5QjtJQUN6QixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLElBQUksRUFBRTtJ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QUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsOERBQThELEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDOUUsUUFBUTtJQUNSLG1CQUFVLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRTtRQUN2RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQXVCO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO0lBRTlCLE9BQU87SUFDUCxNQUFNLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDO1FBQzFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0tBQ25HLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXJCLG1DQUFtQztJQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuaW1wb3J0IHsgUGx1Z2luSG9zdCB9IGZyb20gJy4uLy4uL2xpYi9hcGkvcGx1Z2luJztcbmltcG9ydCAqIGFzIGNvbnRleHRwcm92aWRlcnMgZnJvbSAnLi4vLi4vbGliL2NvbnRleHQtcHJvdmlkZXJzJztcbmltcG9ydCB7IENvbnRleHQsIFRSQU5TSUVOVF9DT05URVhUX0tFWSB9IGZyb20gJy4uLy4uL2xpYi9zZXR0aW5ncyc7XG5pbXBvcnQgeyBNb2NrU2RrUHJvdmlkZXIgfSBmcm9tICcuLi91dGlsL21vY2stc2RrJztcblxuY29uc3QgbW9ja1NESyA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoKTtcblxuY29uc3QgVEVTVF9QUk9WSURFUjogYW55ID0gJ3Rlc3Rwcm92aWRlcic7XG5jb25zdCBQTFVHSU5fUFJPVklERVI6IGFueSA9ICdwbHVnaW4nO1xuXG50ZXN0KCdlcnJvcnMgYXJlIHJlcG9ydGVkIGludG8gdGhlIGNvbnRleHQgdmFsdWUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnRleHRwcm92aWRlcnMucmVnaXN0ZXJDb250ZXh0UHJvdmlkZXIoVEVTVF9QUk9WSURFUiwge1xuICAgIGFzeW5jIGdldFZhbHVlKF86IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcnKTtcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSwgcHJvdmlkZXI6IFRFU1RfUFJPVklERVIgfSxcbiAgXSwgY29udGV4dCwgbW9ja1NESyk7XG5cbiAgLy8gVEhFTiAtIGVycm9yIGlzIG5vdyBpbiBjb250ZXh0XG5cbiAgLy8gTk9URTogZXJyb3Iga2V5IGlzIGlubGluZWQgaGVyZSBiZWNhdXNlIGl0J3MgcGFydCBvZiB0aGUgQ1gtQVBJXG4gIC8vIGNvbXBhdGliaWxpdHkgc3VyZmFjZS5cbiAgZXhwZWN0KGNvbnRleHQuZ2V0KCdhc2RmJykuJHByb3ZpZGVyRXJyb3IpLnRvQmUoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG59KTtcblxudGVzdCgnbG9va3VwIHJvbGUgQVJOIGlzIHJlc29sdmVkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb250ZXh0cHJvdmlkZXJzLnJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyKFRFU1RfUFJPVklERVIsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShhcmdzOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICBpZiAoYXJncy5sb29rdXBSb2xlQXJuID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBsb29rdXBSb2xlQXJuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmdzLmxvb2t1cFJvbGVBcm4uaW5jbHVkZXMoJyR7QVdTOjpQYXJ0aXRpb259JykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aXRpb24gbm90IHJlc29sdmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnc29tZSByZXNvbHZlZCB2YWx1ZSc7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAge1xuICAgICAga2V5OiAnYXNkZicsXG4gICAgICBwcm9wczoge1xuICAgICAgICBhY2NvdW50OiAnMTIzNCcsXG4gICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgIGxvb2t1cFJvbGVBcm46ICdhcm46JHtBV1M6OlBhcnRpdGlvbn06aWFtOjoyODA2MTk5NDc3OTE6cm9sZS9jZGstaG5iNjU5ZmRzLWxvb2t1cC1yb2xlLTI4MDYxOTk0Nzc5MS11cy1lYXN0LTEnLFxuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyOiBURVNUX1BST1ZJREVSLFxuICAgIH0sXG4gIF0sIGNvbnRleHQsIG1vY2tTREspO1xuXG4gIC8vIFRIRU4gLSBWYWx1ZSBnZXRzIHJlc29sdmVkXG4gIGV4cGVjdChjb250ZXh0LmdldCgnYXNkZicpKS50b0VxdWFsKCdzb21lIHJlc29sdmVkIHZhbHVlJyk7XG59KTtcblxudGVzdCgnZXJyb3JzIGFyZSBtYXJrZWQgdHJhbnNpZW50JywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb250ZXh0cHJvdmlkZXJzLnJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyKFRFU1RfUFJPVklERVIsIHtcbiAgICBhc3luYyBnZXRWYWx1ZShfOiB7W2tleTogc3RyaW5nXTogYW55fSk6IFByb21pc2U8YW55PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQ29udGV4dCgpO1xuXG4gIC8vIFdIRU5cbiAgYXdhaXQgY29udGV4dHByb3ZpZGVycy5wcm92aWRlQ29udGV4dFZhbHVlcyhbXG4gICAgeyBrZXk6ICdhc2RmJywgcHJvcHM6IHsgYWNjb3VudDogJzEyMzQnLCByZWdpb246ICd1cy1lYXN0LTEnIH0sIHByb3ZpZGVyOiBURVNUX1BST1ZJREVSIH0sXG4gIF0sIGNvbnRleHQsIG1vY2tTREspO1xuXG4gIC8vIFRIRU4gLSBlcnJvciBpcyBtYXJrZWQgdHJhbnNpZW50XG4gIGV4cGVjdChjb250ZXh0LmdldCgnYXNkZicpW1RSQU5TSUVOVF9DT05URVhUX0tFWV0pLnRvQmVUcnV0aHkoKTtcbn0pO1xuXG50ZXN0KCdjb250ZXh0IHByb3ZpZGVyIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIFBsdWdpbkhvc3QnLCBhc3luYyAoKSA9PiB7XG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcblxuICAvLyBHSVZFTlxuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLnJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyQWxwaGEoJ3Byb3YnLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KCk7XG5cbiAgLy8gV0hFTlxuICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFtcbiAgICB7IGtleTogJ2FzZGYnLCBwcm9wczogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3VzLWVhc3QtMScsIHBsdWdpbk5hbWU6ICdwcm92JyB9LCBwcm92aWRlcjogUExVR0lOX1BST1ZJREVSIH0sXG4gIF0sIGNvbnRleHQsIG1vY2tTREspO1xuXG4gIC8vIFRIRU4gLSBlcnJvciBpcyBtYXJrZWQgdHJhbnNpZW50XG4gIGV4cGVjdChjYWxsZWQpLnRvRXF1YWwodHJ1ZSk7XG59KTtcblxudGVzdCgncGx1Z2luIGNvbnRleHQgcHJvdmlkZXIgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFjY291bnQvcmVnaW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLnJlZ2lzdGVyQ29udGV4dFByb3ZpZGVyQWxwaGEoJ3Byb3YnLCB7XG4gICAgYXN5bmMgZ2V0VmFsdWUoXzoge1trZXk6IHN0cmluZ106IGFueX0pOiBQcm9taXNlPGFueT4ge1xuICAgICAgcmV0dXJuICd5YXknO1xuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGNvbnRleHRwcm92aWRlcnMucHJvdmlkZUNvbnRleHRWYWx1ZXMoW1xuICAgIHsga2V5OiAnYXNkZicsIHByb3BzOiB7IGJhbmFuYTogJ3llbGxvdycsIHBsdWdpbk5hbWU6ICdwcm92JyB9IGFzIGFueSwgcHJvdmlkZXI6IFBMVUdJTl9QUk9WSURFUiB9LFxuICBdLCBjb250ZXh0LCBtb2NrU0RLKTtcblxuICAvLyBUSEVOIC0gZXJyb3IgaXMgbWFya2VkIHRyYW5zaWVudFxuICBleHBlY3QoY29udGV4dC5nZXQoJ2FzZGYnKSkudG9FcXVhbCgneWF5Jyk7XG59KTtcbiJdfQ==