/ cloudformation-templates / node_modules / aws-cdk / test / api / toolkit-info.test.js
toolkit-info.test.js
 1  "use strict";
 2  Object.defineProperty(exports, "__esModule", { value: true });
 3  const api_1 = require("../../lib/api");
 4  const mock_sdk_1 = require("../util/mock-sdk");
 5  let mockSdk;
 6  beforeEach(() => {
 7      mockSdk = new mock_sdk_1.MockSdk();
 8  });
 9  test('failure to read SSM parameter results in upgrade message for existing bootstrap stack under v5', async () => {
10      // GIVEN
11      const toolkitInfo = api_1.ToolkitInfo.fromStack(mock_sdk_1.mockBootstrapStack(mockSdk, {
12          Outputs: [{ OutputKey: 'BootstrapVersion', OutputValue: '4' }],
13      }), mockSdk);
14      mockSdk.stubSsm({
15          getParameter() {
16              throw mock_sdk_1.errorWithCode('AccessDeniedException', 'Computer says no');
17          },
18      });
19      // THEN
20      await expect(toolkitInfo.validateVersion(99, '/abc')).rejects.toThrow(/This CDK deployment requires bootstrap stack version/);
21  });
22  test('failure to read SSM parameter results in exception passthrough for existing bootstrap stack v5 or higher', async () => {
23      // GIVEN
24      const toolkitInfo = api_1.ToolkitInfo.fromStack(mock_sdk_1.mockBootstrapStack(mockSdk, {
25          Outputs: [{ OutputKey: 'BootstrapVersion', OutputValue: '5' }],
26      }), mockSdk);
27      mockSdk.stubSsm({
28          getParameter() {
29              throw mock_sdk_1.errorWithCode('AccessDeniedException', 'Computer says no');
30          },
31      });
32      // THEN
33      await expect(toolkitInfo.validateVersion(99, '/abc')).rejects.toThrow(/Computer says no/);
34  });
35  describe('validateversion without bootstrap stack', () => {
36      let toolkitInfo;
37      beforeEach(() => {
38          toolkitInfo = api_1.ToolkitInfo.bootstrapStackNotFoundInfo(mockSdk);
39      });
40      test('validating version with explicit SSM parameter succeeds', async () => {
41          // GIVEN
42          mockSdk.stubSsm({
43              getParameter() {
44                  return { Parameter: { Value: '10' } };
45              },
46          });
47          // THEN
48          await expect(toolkitInfo.validateVersion(8, '/abc')).resolves.toBeUndefined();
49      });
50      test('validating version without explicit SSM parameter fails', async () => {
51          // WHEN
52          await expect(toolkitInfo.validateVersion(8, undefined)).rejects.toThrow(/This deployment requires a bootstrap stack with a known name/);
53      });
54      test('validating version with access denied error gives upgrade hint', async () => {
55          // GIVEN
56          mockSdk.stubSsm({
57              getParameter() {
58                  throw mock_sdk_1.errorWithCode('AccessDeniedException', 'Computer says no');
59              },
60          });
61          // WHEN
62          await expect(toolkitInfo.validateVersion(8, '/abc')).rejects.toThrow(/This CDK deployment requires bootstrap stack version/);
63      });
64      test('validating version with missing parameter gives bootstrap hint', async () => {
65          // GIVEN
66          mockSdk.stubSsm({
67              getParameter() {
68                  throw mock_sdk_1.errorWithCode('ParameterNotFound', 'Wut?');
69              },
70          });
71          // WHEN
72          await expect(toolkitInfo.validateVersion(8, '/abc')).rejects.toThrow(/Has the environment been bootstrapped?/);
73      });
74  });
75  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1pbmZvLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWluZm8udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHVDQUE0QztBQUM1QywrQ0FBOEU7QUFHOUUsSUFBSSxPQUFnQixDQUFDO0FBQ3JCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxPQUFPLEdBQUcsSUFBSSxrQkFBTyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0dBQWdHLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDaEgsUUFBUTtJQUNSLE1BQU0sV0FBVyxHQUFHLGlCQUFXLENBQUMsU0FBUyxDQUFDLDZCQUFrQixDQUFDLE9BQU8sRUFBRTtRQUNwRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDL0QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWIsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNkLFlBQVk7WUFDVixNQUFNLHdCQUFhLENBQUMsdUJBQXVCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztJQUNQLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0FBQ2hJLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDBHQUEwRyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFILFFBQVE7SUFDUixNQUFNLFdBQVcsR0FBRyxpQkFBVyxDQUFDLFNBQVMsQ0FBQyw2QkFBa0IsQ0FBQyxPQUFPLEVBQUU7UUFDcEUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQy9ELENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUViLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDZCxZQUFZO1lBQ1YsTUFBTSx3QkFBYSxDQUFDLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUM1RixDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxXQUF3QixDQUFDO0lBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxXQUFXLEdBQUcsaUJBQVcsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RSxRQUFRO1FBQ1IsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNkLFlBQVk7Z0JBQ1YsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekUsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO0lBQzFJLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdFQUFnRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLFFBQVE7UUFDUixPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2QsWUFBWTtnQkFDVixNQUFNLHdCQUFhLENBQUMsdUJBQXVCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUNuRSxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQy9ILENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGdFQUFnRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLFFBQVE7UUFDUixPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2QsWUFBWTtnQkFDVixNQUFNLHdCQUFhLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUNqSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVG9vbGtpdEluZm8gfSBmcm9tICcuLi8uLi9saWIvYXBpJztcbmltcG9ydCB7IGVycm9yV2l0aENvZGUsIG1vY2tCb290c3RyYXBTdGFjaywgTW9ja1NkayB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuXG5cbmxldCBtb2NrU2RrOiBNb2NrU2RrO1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIG1vY2tTZGsgPSBuZXcgTW9ja1NkaygpO1xufSk7XG5cbnRlc3QoJ2ZhaWx1cmUgdG8gcmVhZCBTU00gcGFyYW1ldGVyIHJlc3VsdHMgaW4gdXBncmFkZSBtZXNzYWdlIGZvciBleGlzdGluZyBib290c3RyYXAgc3RhY2sgdW5kZXIgdjUnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHRvb2xraXRJbmZvID0gVG9vbGtpdEluZm8uZnJvbVN0YWNrKG1vY2tCb290c3RyYXBTdGFjayhtb2NrU2RrLCB7XG4gICAgT3V0cHV0czogW3sgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsIE91dHB1dFZhbHVlOiAnNCcgfV0sXG4gIH0pLCBtb2NrU2RrKTtcblxuICBtb2NrU2RrLnN0dWJTc20oe1xuICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgIHRocm93IGVycm9yV2l0aENvZGUoJ0FjY2Vzc0RlbmllZEV4Y2VwdGlvbicsICdDb21wdXRlciBzYXlzIG5vJyk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBhd2FpdCBleHBlY3QodG9vbGtpdEluZm8udmFsaWRhdGVWZXJzaW9uKDk5LCAnL2FiYycpKS5yZWplY3RzLnRvVGhyb3coL1RoaXMgQ0RLIGRlcGxveW1lbnQgcmVxdWlyZXMgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24vKTtcbn0pO1xuXG50ZXN0KCdmYWlsdXJlIHRvIHJlYWQgU1NNIHBhcmFtZXRlciByZXN1bHRzIGluIGV4Y2VwdGlvbiBwYXNzdGhyb3VnaCBmb3IgZXhpc3RpbmcgYm9vdHN0cmFwIHN0YWNrIHY1IG9yIGhpZ2hlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3QgdG9vbGtpdEluZm8gPSBUb29sa2l0SW5mby5mcm9tU3RhY2sobW9ja0Jvb3RzdHJhcFN0YWNrKG1vY2tTZGssIHtcbiAgICBPdXRwdXRzOiBbeyBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJywgT3V0cHV0VmFsdWU6ICc1JyB9XSxcbiAgfSksIG1vY2tTZGspO1xuXG4gIG1vY2tTZGsuc3R1YlNzbSh7XG4gICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgdGhyb3cgZXJyb3JXaXRoQ29kZSgnQWNjZXNzRGVuaWVkRXhjZXB0aW9uJywgJ0NvbXB1dGVyIHNheXMgbm8nKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBUSEVOXG4gIGF3YWl0IGV4cGVjdCh0b29sa2l0SW5mby52YWxpZGF0ZVZlcnNpb24oOTksICcvYWJjJykpLnJlamVjdHMudG9UaHJvdygvQ29tcHV0ZXIgc2F5cyBuby8pO1xufSk7XG5cbmRlc2NyaWJlKCd2YWxpZGF0ZXZlcnNpb24gd2l0aG91dCBib290c3RyYXAgc3RhY2snLCAoKSA9PiB7XG4gIGxldCB0b29sa2l0SW5mbzogVG9vbGtpdEluZm87XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRvb2xraXRJbmZvID0gVG9vbGtpdEluZm8uYm9vdHN0cmFwU3RhY2tOb3RGb3VuZEluZm8obW9ja1Nkayk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ZhbGlkYXRpbmcgdmVyc2lvbiB3aXRoIGV4cGxpY2l0IFNTTSBwYXJhbWV0ZXIgc3VjY2VlZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrU2RrLnN0dWJTc20oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyBQYXJhbWV0ZXI6IHsgVmFsdWU6ICcxMCcgfSB9O1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdEluZm8udmFsaWRhdGVWZXJzaW9uKDgsICcvYWJjJykpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgndmFsaWRhdGluZyB2ZXJzaW9uIHdpdGhvdXQgZXhwbGljaXQgU1NNIHBhcmFtZXRlciBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KHRvb2xraXRJbmZvLnZhbGlkYXRlVmVyc2lvbig4LCB1bmRlZmluZWQpKS5yZWplY3RzLnRvVGhyb3coL1RoaXMgZGVwbG95bWVudCByZXF1aXJlcyBhIGJvb3RzdHJhcCBzdGFjayB3aXRoIGEga25vd24gbmFtZS8pO1xuICB9KTtcblxuICB0ZXN0KCd2YWxpZGF0aW5nIHZlcnNpb24gd2l0aCBhY2Nlc3MgZGVuaWVkIGVycm9yIGdpdmVzIHVwZ3JhZGUgaGludCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tTZGsuc3R1YlNzbSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHRocm93IGVycm9yV2l0aENvZGUoJ0FjY2Vzc0RlbmllZEV4Y2VwdGlvbicsICdDb21wdXRlciBzYXlzIG5vJyk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0SW5mby52YWxpZGF0ZVZlcnNpb24oOCwgJy9hYmMnKSkucmVqZWN0cy50b1Rocm93KC9UaGlzIENESyBkZXBsb3ltZW50IHJlcXVpcmVzIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uLyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3ZhbGlkYXRpbmcgdmVyc2lvbiB3aXRoIG1pc3NpbmcgcGFyYW1ldGVyIGdpdmVzIGJvb3RzdHJhcCBoaW50JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja1Nkay5zdHViU3NtKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JXaXRoQ29kZSgnUGFyYW1ldGVyTm90Rm91bmQnLCAnV3V0PycpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdEluZm8udmFsaWRhdGVWZXJzaW9uKDgsICcvYWJjJykpLnJlamVjdHMudG9UaHJvdygvSGFzIHRoZSBlbnZpcm9ubWVudCBiZWVuIGJvb3RzdHJhcHBlZD8vKTtcbiAgfSk7XG59KTsiXX0=