UNPKG

aws-cdk

Version:

CDK Toolkit, the command line tool for CDK apps

94 lines 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable import/order */ const api_1 = require("../../lib/api"); const environment_resources_1 = require("../../lib/api/environment-resources"); const mock_sdk_1 = require("../util/mock-sdk"); const mock_toolkitinfo_1 = require("../util/mock-toolkitinfo"); let mockSdk; let envRegistry; let toolkitMock; beforeEach(() => { mockSdk = new mock_sdk_1.MockSdk(); envRegistry = new environment_resources_1.EnvironmentResourcesRegistry(); toolkitMock = mock_toolkitinfo_1.MockToolkitInfo.setup(); }); afterEach(() => { toolkitMock.dispose(); }); function mockToolkitInfo(ti) { api_1.ToolkitInfo.lookup = jest.fn().mockResolvedValue(ti); } function envResources() { return envRegistry.for({ account: '11111111', region: 'us-nowhere', name: 'aws://11111111/us-nowhere', }, mockSdk); } test('failure to read SSM parameter results in upgrade message for existing bootstrap stack under v5', async () => { // GIVEN mockToolkitInfo(api_1.ToolkitInfo.fromStack((0, mock_sdk_1.mockBootstrapStack)(mockSdk, { Outputs: [{ OutputKey: 'BootstrapVersion', OutputValue: '4' }], }))); mockSdk.stubSsm({ getParameter() { throw (0, mock_sdk_1.errorWithCode)('AccessDeniedException', 'Computer says no'); }, }); // THEN await expect(envResources().validateVersion(99, '/abc')).rejects.toThrow(/This CDK deployment requires bootstrap stack version/); }); test('failure to read SSM parameter results in exception passthrough for existing bootstrap stack v5 or higher', async () => { // GIVEN mockToolkitInfo(api_1.ToolkitInfo.fromStack((0, mock_sdk_1.mockBootstrapStack)(mockSdk, { Outputs: [{ OutputKey: 'BootstrapVersion', OutputValue: '5' }], }))); mockSdk.stubSsm({ getParameter() { throw (0, mock_sdk_1.errorWithCode)('AccessDeniedException', 'Computer says no'); }, }); // THEN await expect(envResources().validateVersion(99, '/abc')).rejects.toThrow(/Computer says no/); }); describe('validateversion without bootstrap stack', () => { beforeEach(() => { mockToolkitInfo(api_1.ToolkitInfo.bootstrapStackNotFoundInfo('TestBootstrapStack')); }); test('validating version with explicit SSM parameter succeeds', async () => { // GIVEN mockSdk.stubSsm({ getParameter() { return { Parameter: { Value: '10' } }; }, }); // THEN await expect(envResources().validateVersion(8, '/abc')).resolves.toBeUndefined(); }); test('validating version without explicit SSM parameter fails', async () => { // WHEN await expect(envResources().validateVersion(8, undefined)).rejects.toThrow(/This deployment requires a bootstrap stack with a known name/); }); test('validating version with access denied error gives upgrade hint', async () => { // GIVEN mockSdk.stubSsm({ getParameter() { throw (0, mock_sdk_1.errorWithCode)('AccessDeniedException', 'Computer says no'); }, }); // WHEN await expect(envResources().validateVersion(8, '/abc')).rejects.toThrow(/This CDK deployment requires bootstrap stack version/); }); test('validating version with missing parameter gives bootstrap hint', async () => { // GIVEN mockSdk.stubSsm({ getParameter() { throw (0, mock_sdk_1.errorWithCode)('ParameterNotFound', 'Wut?'); }, }); // WHEN await expect(envResources().validateVersion(8, '/abc')).rejects.toThrow(/Has the environment been bootstrapped?/); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtcmVzb3VyY2VzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbnZpcm9ubWVudC1yZXNvdXJjZXMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUFpQztBQUNqQyx1Q0FBNEM7QUFDNUMsK0VBQW1GO0FBQ25GLCtDQUE4RTtBQUM5RSwrREFBMkQ7QUFFM0QsSUFBSSxPQUFnQixDQUFDO0FBQ3JCLElBQUksV0FBeUMsQ0FBQztBQUM5QyxJQUFJLFdBQXFELENBQUM7QUFDMUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLE9BQU8sR0FBRyxJQUFJLGtCQUFPLEVBQUUsQ0FBQztJQUN4QixXQUFXLEdBQUcsSUFBSSxvREFBNEIsRUFBRSxDQUFDO0lBQ2pELFdBQVcsR0FBRyxrQ0FBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QixDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsZUFBZSxDQUFDLEVBQWU7SUFDdEMsaUJBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLFlBQVk7SUFDbkIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxVQUFVO1FBQ25CLE1BQU0sRUFBRSxZQUFZO1FBQ3BCLElBQUksRUFBRSwyQkFBMkI7S0FDbEMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNkLENBQUM7QUFFRCxJQUFJLENBQUMsZ0dBQWdHLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDaEgsUUFBUTtJQUNSLGVBQWUsQ0FBQyxpQkFBVyxDQUFDLFNBQVMsQ0FBQyxJQUFBLDZCQUFrQixFQUFDLE9BQU8sRUFBRTtRQUNoRSxPQUFPLEVBQUUs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SSxFQUFFO1FBQ2hGLFFBQVE7UUFDUixPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2QsWUFBWTtnQkFDVixNQUFNLElBQUEsd0JBQWEsRUFBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNuRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDcEgsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuaW1wb3J0IHsgVG9vbGtpdEluZm8gfSBmcm9tICcuLi8uLi9saWIvYXBpJztcbmltcG9ydCB7IEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9saWIvYXBpL2Vudmlyb25tZW50LXJlc291cmNlcyc7XG5pbXBvcnQgeyBlcnJvcldpdGhDb2RlLCBtb2NrQm9vdHN0cmFwU3RhY2ssIE1vY2tTZGsgfSBmcm9tICcuLi91dGlsL21vY2stc2RrJztcbmltcG9ydCB7IE1vY2tUb29sa2l0SW5mbyB9IGZyb20gJy4uL3V0aWwvbW9jay10b29sa2l0aW5mbyc7XG5cbmxldCBtb2NrU2RrOiBNb2NrU2RrO1xubGV0IGVudlJlZ2lzdHJ5OiBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5O1xubGV0IHRvb2xraXRNb2NrOiBSZXR1cm5UeXBlPHR5cGVvZiBNb2NrVG9vbGtpdEluZm8uc2V0dXA+O1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIG1vY2tTZGsgPSBuZXcgTW9ja1NkaygpO1xuICBlbnZSZWdpc3RyeSA9IG5ldyBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5KCk7XG4gIHRvb2xraXRNb2NrID0gTW9ja1Rvb2xraXRJbmZvLnNldHVwKCk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgdG9vbGtpdE1vY2suZGlzcG9zZSgpO1xufSk7XG5cbmZ1bmN0aW9uIG1vY2tUb29sa2l0SW5mbyh0aTogVG9vbGtpdEluZm8pIHtcbiAgVG9vbGtpdEluZm8ubG9va3VwID0gamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKHRpKTtcbn1cblxuZnVuY3Rpb24gZW52UmVzb3VyY2VzKCkge1xuICByZXR1cm4gZW52UmVnaXN0cnkuZm9yKHtcbiAgICBhY2NvdW50OiAnMTExMTExMTEnLFxuICAgIHJlZ2lvbjogJ3VzLW5vd2hlcmUnLFxuICAgIG5hbWU6ICdhd3M6Ly8xMTExMTExMS91cy1ub3doZXJlJyxcbiAgfSwgbW9ja1Nkayk7XG59XG5cbnRlc3QoJ2ZhaWx1cmUgdG8gcmVhZCBTU00gcGFyYW1ldGVyIHJlc3VsdHMgaW4gdXBncmFkZSBtZXNzYWdlIGZvciBleGlzdGluZyBib290c3RyYXAgc3RhY2sgdW5kZXIgdjUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIG1vY2tUb29sa2l0SW5mbyhUb29sa2l0SW5mby5mcm9tU3RhY2sobW9ja0Jvb3RzdHJhcFN0YWNrKG1vY2tTZGssIHtcbiAgICBPdXRwdXRzOiBbeyBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJywgT3V0cHV0VmFsdWU6ICc0JyB9XSxcbiAgfSkpKTtcblxuICBtb2NrU2RrLnN0dWJTc20oe1xuICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgIHRocm93IGVycm9yV2l0aENvZGUoJ0FjY2Vzc0RlbmllZEV4Y2VwdGlvbicsICdDb21wdXRlciBzYXlzIG5vJyk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBhd2FpdCBleHBlY3QoZW52UmVzb3VyY2VzKCkudmFsaWRhdGVWZXJzaW9uKDk5LCAnL2FiYycpKS5yZWplY3RzLnRvVGhyb3coL1RoaXMgQ0RLIGRlcGxveW1lbnQgcmVxdWlyZXMgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24vKTtcbn0pO1xuXG50ZXN0KCdmYWlsdXJlIHRvIHJlYWQgU1NNIHBhcmFtZXRlciByZXN1bHRzIGluIGV4Y2VwdGlvbiBwYXNzdGhyb3VnaCBmb3IgZXhpc3RpbmcgYm9vdHN0cmFwIHN0YWNrIHY1IG9yIGhpZ2hlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgbW9ja1Rvb2xraXRJbmZvKFRvb2xraXRJbmZvLmZyb21TdGFjayhtb2NrQm9vdHN0cmFwU3RhY2sobW9ja1Nkaywge1xuICAgIE91dHB1dHM6IFt7IE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLCBPdXRwdXRWYWx1ZTogJzUnIH1dLFxuICB9KSkpO1xuXG4gIG1vY2tTZGsuc3R1YlNzbSh7XG4gICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgdGhyb3cgZXJyb3JXaXRoQ29kZSgnQWNjZXNzRGVuaWVkRXhjZXB0aW9uJywgJ0NvbXB1dGVyIHNheXMgbm8nKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGF3YWl0IGV4cGVjdChlbnZSZXNvdXJjZXMoKS52YWxpZGF0ZVZlcnNpb24oOTksICcvYWJjJykpLnJlamVjdHMudG9UaHJvdygvQ29tcHV0ZXIgc2F5cyBuby8pO1xufSk7XG5cbmRlc2NyaWJlKCd2YWxpZGF0ZXZlcnNpb24gd2l0aG91dCBib290c3RyYXAgc3RhY2snLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tUb29sa2l0SW5mbyhUb29sa2l0SW5mby5ib290c3RyYXBTdGFja05vdEZvdW5kSW5mbygnVGVzdEJvb3RzdHJhcFN0YWNrJykpO1xuICB9KTtcblxuICB0ZXN0KCd2YWxpZGF0aW5nIHZlcnNpb24gd2l0aCBleHBsaWNpdCBTU00gcGFyYW1ldGVyIHN1Y2NlZWRzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja1Nkay5zdHViU3NtKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHsgUGFyYW1ldGVyOiB7IFZhbHVlOiAnMTAnIH0gfTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KGVudlJlc291cmNlcygpLnZhbGlkYXRlVmVyc2lvbig4LCAnL2FiYycpKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ZhbGlkYXRpbmcgdmVyc2lvbiB3aXRob3V0IGV4cGxpY2l0IFNTTSBwYXJhbWV0ZXIgZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdChlbnZSZXNvdXJjZXMoKS52YWxpZGF0ZVZlcnNpb24oOCwgdW5kZWZpbmVkKSkucmVqZWN0cy50b1Rocm93KC9UaGlzIGRlcGxveW1lbnQgcmVxdWlyZXMgYSBib290c3RyYXAgc3RhY2sgd2l0aCBhIGtub3duIG5hbWUvKTtcbiAgfSk7XG5cbiAgdGVzdCgndmFsaWRhdGluZyB2ZXJzaW9uIHdpdGggYWNjZXNzIGRlbmllZCBlcnJvciBnaXZlcyB1cGdyYWRlIGhpbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrU2RrLnN0dWJTc20oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICB0aHJvdyBlcnJvcldpdGhDb2RlKCdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nLCAnQ29tcHV0ZXIgc2F5cyBubycpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QoZW52UmVzb3VyY2VzKCkudmFsaWRhdGVWZXJzaW9uKDgsICcvYWJjJykpLnJlamVjdHMudG9UaHJvdygvVGhpcyBDREsgZGVwbG95bWVudCByZXF1aXJlcyBib290c3RyYXAgc3RhY2sgdmVyc2lvbi8pO1xuICB9KTtcblxuICB0ZXN0KCd2YWxpZGF0aW5nIHZlcnNpb24gd2l0aCBtaXNzaW5nIHBhcmFtZXRlciBnaXZlcyBib290c3RyYXAgaGludCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tTZGsuc3R1YlNzbSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHRocm93IGVycm9yV2l0aENvZGUoJ1BhcmFtZXRlck5vdEZvdW5kJywgJ1d1dD8nKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KGVudlJlc291cmNlcygpLnZhbGlkYXRlVmVyc2lvbig4LCAnL2FiYycpKS5yZWplY3RzLnRvVGhyb3coL0hhcyB0aGUgZW52aXJvbm1lbnQgYmVlbiBib290c3RyYXBwZWQ/Lyk7XG4gIH0pO1xufSk7Il19