@aws-cdk-testing/cli-integ 2.110.1 → 2.112.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from './corking';
3
3
  export * from './integ-test';
4
4
  export * from './memoize';
5
5
  export * from './resource-pool';
6
+ export * from './with-cli-lib';
6
7
  export * from './with-sam';
7
8
  export * from './shell';
8
9
  export * from './with-aws';
package/lib/index.js CHANGED
@@ -19,6 +19,7 @@ __exportStar(require("./corking"), exports);
19
19
  __exportStar(require("./integ-test"), exports);
20
20
  __exportStar(require("./memoize"), exports);
21
21
  __exportStar(require("./resource-pool"), exports);
22
+ __exportStar(require("./with-cli-lib"), exports);
22
23
  __exportStar(require("./with-sam"), exports);
23
24
  __exportStar(require("./shell"), exports);
24
25
  __exportStar(require("./with-aws"), exports);
@@ -26,4 +27,4 @@ __exportStar(require("./with-cdk-app"), exports);
26
27
  __exportStar(require("./with-packages"), exports);
27
28
  __exportStar(require("./with-temporary-directory"), exports);
28
29
  __exportStar(require("./resources"), exports);
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXNCO0FBQ3RCLDRDQUEwQjtBQUMxQiwrQ0FBNkI7QUFDN0IsNENBQTBCO0FBQzFCLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0IsMENBQXdCO0FBQ3hCLDZDQUEyQjtBQUMzQixpREFBK0I7QUFDL0Isa0RBQWdDO0FBQ2hDLDZEQUEyQztBQUMzQyw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F3cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvcmtpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlZy10ZXN0JztcbmV4cG9ydCAqIGZyb20gJy4vbWVtb2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc291cmNlLXBvb2wnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXNhbSc7XG5leHBvcnQgKiBmcm9tICcuL3NoZWxsJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1hd3MnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXBhY2thZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC10ZW1wb3JhcnktZGlyZWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb3VyY2VzJzsiXX0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXNCO0FBQ3RCLDRDQUEwQjtBQUMxQiwrQ0FBNkI7QUFDN0IsNENBQTBCO0FBQzFCLGtEQUFnQztBQUNoQyxpREFBK0I7QUFDL0IsNkNBQTJCO0FBQzNCLDBDQUF3QjtBQUN4Qiw2Q0FBMkI7QUFDM0IsaURBQStCO0FBQy9CLGtEQUFnQztBQUNoQyw2REFBMkM7QUFDM0MsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hd3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3JraW5nJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWctdGVzdCc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9pemUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZS1wb29sJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1jbGktbGliJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1zYW0nO1xuZXhwb3J0ICogZnJvbSAnLi9zaGVsbCc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtYXdzJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1jZGstYXBwJztcbmV4cG9ydCAqIGZyb20gJy4vd2l0aC1wYWNrYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL3dpdGgtdGVtcG9yYXJ5LWRpcmVjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL3Jlc291cmNlcyc7Il19
@@ -0,0 +1,17 @@
1
+ import { TestContext } from './integ-test';
2
+ import { AwsContext } from './with-aws';
3
+ import { TestFixture, CdkCliOptions } from './with-cdk-app';
4
+ /**
5
+ * Higher order function to execute a block with a CliLib Integration CDK app fixture
6
+ */
7
+ export declare function withCliLibIntegrationCdkApp<A extends TestContext & AwsContext>(block: (context: CliLibIntegrationTestFixture) => Promise<void>): (context: A) => Promise<void>;
8
+ /**
9
+ * SAM Integration test fixture for CDK - SAM integration test cases
10
+ */
11
+ export declare function withCliLibFixture(block: (context: CliLibIntegrationTestFixture) => Promise<void>): (context: TestContext) => Promise<void>;
12
+ export declare class CliLibIntegrationTestFixture extends TestFixture {
13
+ /**
14
+ *
15
+ */
16
+ cdk(args: string[], options?: CdkCliOptions): Promise<string>;
17
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CliLibIntegrationTestFixture = exports.withCliLibFixture = exports.withCliLibIntegrationCdkApp = void 0;
4
+ const os = require("os");
5
+ const path = require("path");
6
+ const resources_1 = require("./resources");
7
+ const with_aws_1 = require("./with-aws");
8
+ const with_cdk_app_1 = require("./with-cdk-app");
9
+ const with_timeout_1 = require("./with-timeout");
10
+ /**
11
+ * Higher order function to execute a block with a CliLib Integration CDK app fixture
12
+ */
13
+ function withCliLibIntegrationCdkApp(block) {
14
+ return async (context) => {
15
+ const randy = context.randomString;
16
+ const stackNamePrefix = `cdktest-${randy}`;
17
+ const integTestDir = path.join(os.tmpdir(), `cdk-integ-${randy}`);
18
+ context.log(` Stack prefix: ${stackNamePrefix}\n`);
19
+ context.log(` Test directory: ${integTestDir}\n`);
20
+ context.log(` Region: ${context.aws.region}\n`);
21
+ await (0, with_cdk_app_1.cloneDirectory)(path.join(resources_1.RESOURCES_DIR, 'cdk-apps', 'simple-app'), integTestDir, context.output);
22
+ const fixture = new CliLibIntegrationTestFixture(integTestDir, stackNamePrefix, context.output, context.aws, context.randomString);
23
+ let success = true;
24
+ try {
25
+ const installationVersion = fixture.packages.requestedFrameworkVersion();
26
+ if (fixture.packages.majorVersion() === '1') {
27
+ throw new Error('This test suite is only compatible with AWS CDK v2');
28
+ }
29
+ const alphaInstallationVersion = fixture.packages.requestedAlphaVersion();
30
+ await (0, with_cdk_app_1.installNpmPackages)(fixture, {
31
+ 'aws-cdk-lib': installationVersion,
32
+ '@aws-cdk/cli-lib-alpha': alphaInstallationVersion,
33
+ '@aws-cdk/aws-lambda-go-alpha': alphaInstallationVersion,
34
+ '@aws-cdk/aws-lambda-python-alpha': alphaInstallationVersion,
35
+ 'constructs': '^10',
36
+ });
37
+ await block(fixture);
38
+ }
39
+ catch (e) {
40
+ // We survive certain cases involving gopkg.in
41
+ if (errorCausedByGoPkg(e.message)) {
42
+ return;
43
+ }
44
+ success = false;
45
+ throw e;
46
+ }
47
+ finally {
48
+ if (process.env.INTEG_NO_CLEAN) {
49
+ context.log(`Left test directory in '${integTestDir}' ($INTEG_NO_CLEAN)\n`);
50
+ }
51
+ else {
52
+ await fixture.dispose(success);
53
+ }
54
+ }
55
+ };
56
+ }
57
+ exports.withCliLibIntegrationCdkApp = withCliLibIntegrationCdkApp;
58
+ /**
59
+ * Return whether or not the error is being caused by gopkg.in being down
60
+ *
61
+ * Our Go build depends on https://gopkg.in/, which has errors pretty often
62
+ * (every couple of days). It is run by a single volunteer.
63
+ */
64
+ function errorCausedByGoPkg(error) {
65
+ // The error is different depending on what request fails. Messages recognized:
66
+ ////////////////////////////////////////////////////////////////////
67
+ // go: github.com/aws/aws-lambda-go@v1.28.0 requires
68
+ // gopkg.in/yaml.v3@v3.0.0-20200615113413-eeeca48fe776: invalid version: git ls-remote -q origin in /go/pkg/mod/cache/vcs/0901dc1ef67fcce1c9b3ae51078740de4a0e2dc673e720584ac302973af82f36: exit status 128:
69
+ // remote: Cannot obtain refs from GitHub: cannot talk to GitHub: Get https://github.com/go-yaml/yaml.git/info/refs?service=git-upload-pack: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
70
+ // fatal: unable to access 'https://gopkg.in/yaml.v3/': The requested URL returned error: 502
71
+ ////////////////////////////////////////////////////////////////////
72
+ // go: downloading github.com/aws/aws-lambda-go v1.28.0
73
+ // go: github.com/aws/aws-lambda-go@v1.28.0 requires
74
+ // gopkg.in/yaml.v3@v3.0.0-20200615113413-eeeca48fe776: unrecognized import path "gopkg.in/yaml.v3": reading https://gopkg.in/yaml.v3?go-get=1: 502 Bad Gateway
75
+ // server response: Cannot obtain refs from GitHub: cannot talk to GitHub: Get https://github.com/go-yaml/yaml.git/info/refs?service=git-upload-pack: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
76
+ ////////////////////////////////////////////////////////////////////
77
+ // go: github.com/aws/aws-lambda-go@v1.28.0 requires
78
+ // gopkg.in/yaml.v3@v3.0.0-20200615113413-eeeca48fe776: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /go/pkg/mod/cache/vcs/0901dc1ef67fcce1c9b3ae51078740de4a0e2dc673e720584ac302973af82f36: exit status 128:
79
+ // error: RPC failed; HTTP 502 curl 22 The requested URL returned error: 502
80
+ // fatal: the remote end hung up unexpectedly
81
+ ////////////////////////////////////////////////////////////////////
82
+ return (error.includes('gopkg\.in.*invalid version.*exit status 128')
83
+ || error.match(/unrecognized import path[^\n]gopkg\.in/));
84
+ }
85
+ /**
86
+ * SAM Integration test fixture for CDK - SAM integration test cases
87
+ */
88
+ function withCliLibFixture(block) {
89
+ return (0, with_aws_1.withAws)((0, with_timeout_1.withTimeout)(with_cdk_app_1.DEFAULT_TEST_TIMEOUT_S, withCliLibIntegrationCdkApp(block)));
90
+ }
91
+ exports.withCliLibFixture = withCliLibFixture;
92
+ class CliLibIntegrationTestFixture extends with_cdk_app_1.TestFixture {
93
+ /**
94
+ *
95
+ */
96
+ async cdk(args, options = {}) {
97
+ const action = args[0];
98
+ const stackName = args[1];
99
+ const cliOpts = {
100
+ stacks: stackName ? [stackName] : undefined,
101
+ };
102
+ if (action === 'deploy') {
103
+ cliOpts.requireApproval = options.neverRequireApproval ? 'never' : 'broadening';
104
+ }
105
+ return this.shell(['node', '--input-type=module', `<<__EOS__
106
+ import { AwsCdkCli } from '@aws-cdk/cli-lib-alpha';
107
+ const cli = AwsCdkCli.fromCdkAppDirectory();
108
+
109
+ await cli.${action}(${JSON.stringify(cliOpts)});
110
+ __EOS__`], {
111
+ ...options,
112
+ modEnv: {
113
+ AWS_REGION: this.aws.region,
114
+ AWS_DEFAULT_REGION: this.aws.region,
115
+ STACK_NAME_PREFIX: this.stackNamePrefix,
116
+ PACKAGE_LAYOUT_VERSION: this.packages.majorVersion(),
117
+ ...options.modEnv,
118
+ },
119
+ });
120
+ }
121
+ }
122
+ exports.CliLibIntegrationTestFixture = CliLibIntegrationTestFixture;
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jbGktbGliLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC1jbGktbGliLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsMkNBQTRDO0FBQzVDLHlDQUFpRDtBQUNqRCxpREFBd0g7QUFDeEgsaURBQTZDO0FBRTdDOztHQUVHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQXFDLEtBQStEO0lBQzdJLE9BQU8sS0FBSyxFQUFFLE9BQVUsRUFBRSxFQUFFO1FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixZQUFZLElBQUksQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUV4RCxNQUFNLElBQUEsNkJBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkcsTUFBTSxPQUFPLEdBQUcsSUFBSSw0QkFBNEIsQ0FDOUMsWUFBWSxFQUNaLGVBQWUsRUFDZixPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxHQUFHLEVBQ1gsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXhCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJ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TSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNDLENBQUMsRUFBRTtZQUNMLEdBQUcsT0FBTztZQUNWLE1BQU0sRUFBRTtnQkFDTixVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUMzQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ25DLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUN2QyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtnQkFDcEQsR0FBRyxPQUFPLENBQUMsTUFBTTthQUNsQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRjtBQWpDRCxvRUFpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgUkVTT1VSQ0VTX0RJUiB9IGZyb20gJy4vcmVzb3VyY2VzJztcbmltcG9ydCB7IEF3c0NvbnRleHQsIHdpdGhBd3MgfSBmcm9tICcuL3dpdGgtYXdzJztcbmltcG9ydCB7IGNsb25lRGlyZWN0b3J5LCBpbnN0YWxsTnBtUGFja2FnZXMsIFRlc3RGaXh0dXJlLCBERUZBVUxUX1RFU1RfVElNRU9VVF9TLCBDZGtDbGlPcHRpb25zIH0gZnJvbSAnLi93aXRoLWNkay1hcHAnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3dpdGgtdGltZW91dCc7XG5cbi8qKlxuICogSGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYSBibG9jayB3aXRoIGEgQ2xpTGliIEludGVncmF0aW9uIENESyBhcHAgZml4dHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aENsaUxpYkludGVncmF0aW9uQ2RrQXBwPEEgZXh0ZW5kcyBUZXN0Q29udGV4dCAmIEF3c0NvbnRleHQ+KGJsb2NrOiAoY29udGV4dDogQ2xpTGliSW50ZWdyYXRpb25UZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gYXN5bmMgKGNvbnRleHQ6IEEpID0+IHtcbiAgICBjb25zdCByYW5keSA9IGNvbnRleHQucmFuZG9tU3RyaW5nO1xuICAgIGNvbnN0IHN0YWNrTmFtZVByZWZpeCA9IGBjZGt0ZXN0LSR7cmFuZHl9YDtcbiAgICBjb25zdCBpbnRlZ1Rlc3REaXIgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksIGBjZGstaW50ZWctJHtyYW5keX1gKTtcblxuICAgIGNvbnRleHQubG9nKGAgU3RhY2sgcHJlZml4OiAgICR7c3RhY2tOYW1lUHJlZml4fVxcbmApO1xuICAgIGNvbnRleHQubG9nKGAgVGVzdCBkaXJlY3Rvcnk6ICR7aW50ZWdUZXN0RGlyfVxcbmApO1xuICAgIGNvbnRleHQubG9nKGAgUmVnaW9uOiAgICAgICAgICR7Y29udGV4dC5hd3MucmVnaW9ufVxcbmApO1xuXG4gICAgYXdhaXQgY2xvbmVEaXJlY3RvcnkocGF0aC5qb2luKFJFU09VUkNFU19ESVIsICdjZGstYXBwcycsICdzaW1wbGUtYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgQ2xpTGliSW50ZWdyYXRpb25UZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG5cbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbGxhdGlvblZlcnNpb24gPSBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKTtcblxuICAgICAgaWYgKGZpeHR1cmUucGFja2FnZXMubWFqb3JWZXJzaW9uKCkgPT09ICcxJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgdGVzdCBzdWl0ZSBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBBV1MgQ0RLIHYyJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbiA9IGZpeHR1cmUucGFja2FnZXMucmVxdWVzdGVkQWxwaGFWZXJzaW9uKCk7XG4gICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAnYXdzLWNkay1saWInOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAnQGF3cy1jZGsvY2xpLWxpYi1hbHBoYSc6IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtZ28tYWxwaGEnOiBhbHBoYUluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICdAYXdzLWNkay9hd3MtbGFtYmRhLXB5dGhvbi1hbHBoYSc6IGFscGhhSW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgJ2NvbnN0cnVjdHMnOiAnXjEwJyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBibG9jayhmaXh0dXJlKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIFdlIHN1cnZpdmUgY2VydGFpbiBjYXNlcyBpbnZvbHZpbmcgZ29wa2cuaW5cbiAgICAgIGlmIChlcnJvckNhdXNlZEJ5R29Qa2coZS5tZXNzYWdlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuSU5URUdfTk9fQ0xFQU4pIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRJTlRFR19OT19DTEVBTilcXG5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuZGlzcG9zZShzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRoZSBlcnJvciBpcyBiZWluZyBjYXVzZWQgYnkgZ29wa2cuaW4gYmVpbmcgZG93blxuICpcbiAqIE91ciBHbyBidWlsZCBkZXBlbmRzIG9uIGh0dHBzOi8vZ29wa2cuaW4vLCB3aGljaCBoYXMgZXJyb3JzIHByZXR0eSBvZnRlblxuICogKGV2ZXJ5IGNvdXBsZSBvZiBkYXlzKS4gSXQgaXMgcnVuIGJ5IGEgc2luZ2xlIHZvbHVudGVlci5cbiAqL1xuZnVuY3Rpb24gZXJyb3JDYXVzZWRCeUdvUGtnKGVycm9yOiBzdHJpbmcpIHtcbiAgLy8gVGhlIGVycm9yIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24gd2hhdCByZXF1ZXN0IGZhaWxzLiBNZXNzYWdlcyByZWNvZ25pemVkOlxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGxzLXJlbW90ZSAtcSBvcmlnaW4gaW4gL2dvL3BrZy9tb2QvY2FjaGUvdmNzLzA5MDFkYzFlZjY3ZmNjZTFjOWIzYWU1MTA3ODc0MGRlNGEwZTJkYzY3M2U3MjA1ODRhYzMwMjk3M2FmODJmMzY6IGV4aXQgc3RhdHVzIDEyODpcbiAgLy8gICAgICAgIHJlbW90ZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLyAgICAgICAgZmF0YWw6IHVuYWJsZSB0byBhY2Nlc3MgJ2h0dHBzOi8vZ29wa2cuaW4veWFtbC52My8nOiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgIGdvOiBkb3dubG9hZGluZyBnaXRodWIuY29tL2F3cy9hd3MtbGFtYmRhLWdvIHYxLjI4LjBcbiAgLy8gICAgZ286IGdpdGh1Yi5jb20vYXdzL2F3cy1sYW1iZGEtZ29AdjEuMjguMCByZXF1aXJlc1xuICAvLyAgICAgICAgZ29wa2cuaW4veWFtbC52M0B2My4wLjAtMjAyMDA2MTUxMTM0MTMtZWVlY2E0OGZlNzc2OiB1bnJlY29nbml6ZWQgaW1wb3J0IHBhdGggXCJnb3BrZy5pbi95YW1sLnYzXCI6IHJlYWRpbmcgaHR0cHM6Ly9nb3BrZy5pbi95YW1sLnYzP2dvLWdldD0xOiA1MDIgQmFkIEdhdGV3YXlcbiAgLy8gICAgICAgIHNlcnZlciByZXNwb25zZTogQ2Fubm90IG9idGFpbiByZWZzIGZyb20gR2l0SHViOiBjYW5ub3QgdGFsayB0byBHaXRIdWI6IEdldCBodHRwczovL2dpdGh1Yi5jb20vZ28teWFtbC95YW1sLmdpdC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2s6IG5ldC9odHRwOiByZXF1ZXN0IGNhbmNlbGVkIChDbGllbnQuVGltZW91dCBleGNlZWRlZCB3aGlsZSBhd2FpdGluZyBoZWFkZXJzKVxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICBnbzogZ2l0aHViLmNvbS9hd3MvYXdzLWxhbWJkYS1nb0B2MS4yOC4wIHJlcXVpcmVzXG4gIC8vICAgICAgICBnb3BrZy5pbi95YW1sLnYzQHYzLjAuMC0yMDIwMDYxNTExMzQxMy1lZWVjYTQ4ZmU3NzY6IGludmFsaWQgdmVyc2lvbjogZ2l0IGZldGNoIC1mIG9yaWdpbiByZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIHJlZnMvdGFncy8qOnJlZnMvdGFncy8qIGluIC9nby9wa2cvbW9kL2NhY2hlL3Zjcy8wOTAxZGMxZWY2N2ZjY2UxYzliM2FlNTEwNzg3NDBkZTRhMGUyZGM2NzNlNzIwNTg0YWMzMDI5NzNhZjgyZjM2OiBleGl0IHN0YXR1cyAxMjg6XG4gIC8vICAgICAgICBlcnJvcjogUlBDIGZhaWxlZDsgSFRUUCA1MDIgY3VybCAyMiBUaGUgcmVxdWVzdGVkIFVSTCByZXR1cm5lZCBlcnJvcjogNTAyXG4gIC8vICAgICAgICBmYXRhbDogdGhlIHJlbW90ZSBlbmQgaHVuZyB1cCB1bmV4cGVjdGVkbHlcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICByZXR1cm4gKGVycm9yLmluY2x1ZGVzKCdnb3BrZ1xcLmluLippbnZhbGlkIHZlcnNpb24uKmV4aXQgc3RhdHVzIDEyOCcpXG4gICAgfHwgZXJyb3IubWF0Y2goL3VucmVjb2duaXplZCBpbXBvcnQgcGF0aFteXFxuXWdvcGtnXFwuaW4vKSk7XG59XG5cbi8qKlxuICogU0FNIEludGVncmF0aW9uIHRlc3QgZml4dHVyZSBmb3IgQ0RLIC0gU0FNIGludGVncmF0aW9uIHRlc3QgY2FzZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDbGlMaWJGaXh0dXJlKGJsb2NrOiAoY29udGV4dDogQ2xpTGliSW50ZWdyYXRpb25UZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gd2l0aEF3cyh3aXRoVGltZW91dChERUZBVUxUX1RFU1RfVElNRU9VVF9TLCB3aXRoQ2xpTGliSW50ZWdyYXRpb25DZGtBcHAoYmxvY2spKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBDbGlMaWJJbnRlZ3JhdGlvblRlc3RGaXh0dXJlIGV4dGVuZHMgVGVzdEZpeHR1cmUge1xuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjZGsoYXJnczogc3RyaW5nW10sIG9wdGlvbnM6IENka0NsaU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGFjdGlvbiA9IGFyZ3NbMF07XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gYXJnc1sxXTtcblxuICAgIGNvbnN0IGNsaU9wdHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBzdGFja3M6IHN0YWNrTmFtZSA/IFtzdGFja05hbWVdIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBpZiAoYWN0aW9uID09PSAnZGVwbG95Jykge1xuICAgICAgY2xpT3B0cy5yZXF1aXJlQXBwcm92YWwgPSBvcHRpb25zLm5ldmVyUmVxdWlyZUFwcHJvdmFsID8gJ25ldmVyJyA6ICdicm9hZGVuaW5nJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zaGVsbChbJ25vZGUnLCAnLS1pbnB1dC10eXBlPW1vZHVsZScsIGA8PF9fRU9TX19cbiAgICAgIGltcG9ydCB7IEF3c0Nka0NsaSB9IGZyb20gJ0Bhd3MtY2RrL2NsaS1saWItYWxwaGEnO1xuICAgICAgY29uc3QgY2xpID0gQXdzQ2RrQ2xpLmZyb21DZGtBcHBEaXJlY3RvcnkoKTtcblxuICAgICAgYXdhaXQgY2xpLiR7YWN0aW9ufSgke0pTT04uc3RyaW5naWZ5KGNsaU9wdHMpfSk7XG5fX0VPU19fYF0sIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQVdTX1JFR0lPTjogdGhpcy5hd3MucmVnaW9uLFxuICAgICAgICBBV1NfREVGQVVMVF9SRUdJT046IHRoaXMuYXdzLnJlZ2lvbixcbiAgICAgICAgU1RBQ0tfTkFNRV9QUkVGSVg6IHRoaXMuc3RhY2tOYW1lUHJlZml4LFxuICAgICAgICBQQUNLQUdFX0xBWU9VVF9WRVJTSU9OOiB0aGlzLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpLFxuICAgICAgICAuLi5vcHRpb25zLm1vZEVudixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxufVxuIl19
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk-testing/cli-integ",
3
3
  "description": "Integration tests for the AWS CDK CLI",
4
- "version": "2.110.1",
4
+ "version": "2.112.0",
5
5
  "bin": {
6
6
  "run-suite": "bin/run-suite",
7
7
  "download-and-run-old-tests": "bin/download-and-run-old-tests",
@@ -29,18 +29,18 @@
29
29
  },
30
30
  "license": "Apache-2.0",
31
31
  "devDependencies": {
32
- "@aws-cdk/cdk-build-tools": "2.110.1-alpha.0",
32
+ "@aws-cdk/cdk-build-tools": "2.112.0-alpha.0",
33
33
  "@types/semver": "^7.5.5",
34
34
  "@types/yargs": "^15.0.18",
35
35
  "@types/fs-extra": "^9.0.13",
36
36
  "@types/glob": "^7.2.0",
37
37
  "@types/npm": "^7.19.3",
38
- "@aws-cdk/pkglint": "2.110.1-alpha.0"
38
+ "@aws-cdk/pkglint": "2.112.0-alpha.0"
39
39
  },
40
40
  "dependencies": {
41
41
  "@octokit/rest": "^18.12.0",
42
- "aws-sdk": "^2.1492.0",
43
- "axios": "^1.6.0",
42
+ "aws-sdk": "^2.1498.0",
43
+ "axios": "^1.6.2",
44
44
  "fs-extra": "^9.1.0",
45
45
  "glob": "^7.2.3",
46
46
  "jest": "^29.7.0",
@@ -0,0 +1,26 @@
1
+ const cdk = require('aws-cdk-lib/core');
2
+ const iam = require('aws-cdk-lib/aws-iam');
3
+ const sqs = require('aws-cdk-lib/aws-sqs');
4
+
5
+ const stackPrefix = process.env.STACK_NAME_PREFIX;
6
+ if (!stackPrefix) {
7
+ throw new Error(`the STACK_NAME_PREFIX environment variable is required`);
8
+ }
9
+
10
+ class SimpleStack extends cdk.Stack {
11
+ constructor(scope, id, props) {
12
+ super(scope, id, props);
13
+ const queue = new sqs.Queue(this, 'queue', {
14
+ visibilityTimeout: cdk.Duration.seconds(300),
15
+ });
16
+ const role = new iam.Role(this, 'role', {
17
+ assumedBy: new iam.AnyPrincipal(),
18
+ });
19
+ queue.grantConsumeMessages(role);
20
+ }
21
+ }
22
+
23
+ const app = new cdk.App();
24
+ new SimpleStack(app, `${stackPrefix}-simple-1`);
25
+
26
+ app.synth();
@@ -0,0 +1,7 @@
1
+ {
2
+ "app": "node app.js",
3
+ "versionReporting": false,
4
+ "context": {
5
+ "aws-cdk:enableDiffNoFail": "true"
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lib_1 = require("../../lib");
4
+ jest.setTimeout(2 * 60 * 60000); // Includes the time to acquire locks, worst-case single-threaded runtime
5
+ (0, lib_1.integTest)('cli-lib synth', (0, lib_1.withCliLibFixture)(async (fixture) => {
6
+ await fixture.cdk(['synth', fixture.fullStackName('simple-1')]);
7
+ expect(fixture.template('simple-1')).toEqual(expect.objectContaining({
8
+ // Checking for a small subset is enough as proof that synth worked
9
+ Resources: expect.objectContaining({
10
+ queue276F7297: expect.objectContaining({
11
+ Type: 'AWS::SQS::Queue',
12
+ Properties: {
13
+ VisibilityTimeout: 300,
14
+ },
15
+ Metadata: {
16
+ 'aws:cdk:path': `${fixture.stackNamePrefix}-simple-1/queue/Resource`,
17
+ },
18
+ }),
19
+ }),
20
+ }));
21
+ }));
22
+ (0, lib_1.integTest)('cli-lib list', (0, lib_1.withCliLibFixture)(async (fixture) => {
23
+ const listing = await fixture.cdk(['list'], { captureStderr: false });
24
+ expect(listing).toContain(fixture.fullStackName('simple-1'));
25
+ }));
26
+ (0, lib_1.integTest)('cli-lib deploy', (0, lib_1.withCliLibFixture)(async (fixture) => {
27
+ const stackName = fixture.fullStackName('simple-1');
28
+ try {
29
+ // deploy the stack
30
+ await fixture.cdk(['deploy', stackName], {
31
+ neverRequireApproval: true,
32
+ });
33
+ // verify the number of resources in the stack
34
+ const expectedStack = await fixture.aws.cloudFormation('describeStackResources', {
35
+ StackName: stackName,
36
+ });
37
+ expect(expectedStack.StackResources?.length).toEqual(3);
38
+ }
39
+ finally {
40
+ // delete the stack
41
+ await fixture.cdk(['destroy', stackName], {
42
+ captureStderr: false,
43
+ });
44
+ }
45
+ }));
46
+ (0, lib_1.integTest)('security related changes without a CLI are expected to fail when approval is required', (0, lib_1.withCliLibFixture)(async (fixture) => {
47
+ const stdErr = await fixture.cdk(['deploy', fixture.fullStackName('simple-1')], {
48
+ onlyStderr: true,
49
+ captureStderr: true,
50
+ allowErrExit: true,
51
+ neverRequireApproval: false,
52
+ });
53
+ expect(stdErr).toContain('This deployment will make potentially sensitive changes according to your current security approval level');
54
+ expect(stdErr).toContain('Deployment failed: Error: \"--require-approval\" is enabled and stack includes security-sensitive updates');
55
+ // Ensure stack was not deployed
56
+ await expect(fixture.aws.cloudFormation('describeStacks', {
57
+ StackName: fixture.fullStackName('simple-1'),
58
+ })).rejects.toThrow('does not exist');
59
+ }));
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWxpYi5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjbGktbGliLmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUF5RDtBQUV6RCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBTSxDQUFDLENBQUMsQ0FBQyx5RUFBeUU7QUFFM0csSUFBQSxlQUFTLEVBQUMsZUFBZSxFQUFFLElBQUEsdUJBQWlCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQzdELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDbkUsbUVBQW1FO1FBQ25FLFNBQVMsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUM7WUFDakMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDckMsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsVUFBVSxFQUFFO29CQUNWLGlCQUFpQixFQUFFLEdBQUc7aUJBQ3ZCO2dCQUNELFFBQVEsRUFBRTtvQkFDUixjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSwwQkFBMEI7aUJBQ3JFO2FBQ0YsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixJQUFBLGVBQVMsRUFBQyxjQUFjLEVBQUUsSUFBQSx1QkFBaUIsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRUosSUFBQSxlQUFTLEVBQUMsZ0JBQWdCLEVBQUUsSUFBQSx1QkFBaUIsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDOUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVwRCxJQUFJO1FBQ0YsbUJBQW1CO1FBQ25CLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUN2QyxvQkFBb0IsRUFBRSxJQUFJO1NBQzNCLENBQUMsQ0FBQztRQUVILDhDQUE4QztRQUM5QyxNQUFNLGFBQWEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLHdCQUF3QixFQUFFO1lBQy9FLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6RDtZQUFTO1FBQ1IsbUJBQW1CO1FBQ25CLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUN4QyxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUM7S0FDSjtBQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFSixJQUFBLGVBQVMsRUFBQyx1RkFBdUYsRUFBRSxJQUFBLHVCQUFpQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNySSxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQzlFLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLFlBQVksRUFBRSxJQUFJO1FBQ2xCLG9CQUFvQixFQUFFLEtBQUs7S0FDNUIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQywyR0FBMkcsQ0FBQyxDQUFDO0lBQ3RJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsMkdBQTJHLENBQUMsQ0FBQztJQUV0SSxnQ0FBZ0M7SUFDaEMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7UUFDeEQsU0FBUyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO0tBQzdDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoQ2xpTGliRml4dHVyZSB9IGZyb20gJy4uLy4uL2xpYic7XG5cbmplc3Quc2V0VGltZW91dCgyICogNjAgKiA2MF8wMDApOyAvLyBJbmNsdWRlcyB0aGUgdGltZSB0byBhY3F1aXJlIGxvY2tzLCB3b3JzdC1jYXNlIHNpbmdsZS10aHJlYWRlZCBydW50aW1lXG5cbmludGVnVGVzdCgnY2xpLWxpYiBzeW50aCcsIHdpdGhDbGlMaWJGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnc3ludGgnLCBmaXh0dXJlLmZ1bGxTdGFja05hbWUoJ3NpbXBsZS0xJyldKTtcbiAgZXhwZWN0KGZpeHR1cmUudGVtcGxhdGUoJ3NpbXBsZS0xJykpLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgIC8vIENoZWNraW5nIGZvciBhIHNtYWxsIHN1YnNldCBpcyBlbm91Z2ggYXMgcHJvb2YgdGhhdCBzeW50aCB3b3JrZWRcbiAgICBSZXNvdXJjZXM6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgIHF1ZXVlMjc2RjcyOTc6IGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBWaXNpYmlsaXR5VGltZW91dDogMzAwLFxuICAgICAgICB9LFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6Y2RrOnBhdGgnOiBgJHtmaXh0dXJlLnN0YWNrTmFtZVByZWZpeH0tc2ltcGxlLTEvcXVldWUvUmVzb3VyY2VgLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgfSksXG4gIH0pKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjbGktbGliIGxpc3QnLCB3aXRoQ2xpTGliRml4dHVyZShhc3luYyAoZml4dHVyZSkgPT4ge1xuICBjb25zdCBsaXN0aW5nID0gYXdhaXQgZml4dHVyZS5jZGsoWydsaXN0J10sIHsgY2FwdHVyZVN0ZGVycjogZmFsc2UgfSk7XG4gIGV4cGVjdChsaXN0aW5nKS50b0NvbnRhaW4oZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzaW1wbGUtMScpKTtcbn0pKTtcblxuaW50ZWdUZXN0KCdjbGktbGliIGRlcGxveScsIHdpdGhDbGlMaWJGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHN0YWNrTmFtZSA9IGZpeHR1cmUuZnVsbFN0YWNrTmFtZSgnc2ltcGxlLTEnKTtcblxuICB0cnkge1xuICAgIC8vIGRlcGxveSB0aGUgc3RhY2tcbiAgICBhd2FpdCBmaXh0dXJlLmNkayhbJ2RlcGxveScsIHN0YWNrTmFtZV0sIHtcbiAgICAgIG5ldmVyUmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gdmVyaWZ5IHRoZSBudW1iZXIgb2YgcmVzb3VyY2VzIGluIHRoZSBzdGFja1xuICAgIGNvbnN0IGV4cGVjdGVkU3RhY2sgPSBhd2FpdCBmaXh0dXJlLmF3cy5jbG91ZEZvcm1hdGlvbignZGVzY3JpYmVTdGFja1Jlc291cmNlcycsIHtcbiAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgIH0pO1xuICAgIGV4cGVjdChleHBlY3RlZFN0YWNrLlN0YWNrUmVzb3VyY2VzPy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZGVsZXRlIHRoZSBzdGFja1xuICAgIGF3YWl0IGZpeHR1cmUuY2RrKFsnZGVzdHJveScsIHN0YWNrTmFtZV0sIHtcbiAgICAgIGNhcHR1cmVTdGRlcnI6IGZhbHNlLFxuICAgIH0pO1xuICB9XG59KSk7XG5cbmludGVnVGVzdCgnc2VjdXJpdHkgcmVsYXRlZCBjaGFuZ2VzIHdpdGhvdXQgYSBDTEkgYXJlIGV4cGVjdGVkIHRvIGZhaWwgd2hlbiBhcHByb3ZhbCBpcyByZXF1aXJlZCcsIHdpdGhDbGlMaWJGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gIGNvbnN0IHN0ZEVyciA9IGF3YWl0IGZpeHR1cmUuY2RrKFsnZGVwbG95JywgZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzaW1wbGUtMScpXSwge1xuICAgIG9ubHlTdGRlcnI6IHRydWUsXG4gICAgY2FwdHVyZVN0ZGVycjogdHJ1ZSxcbiAgICBhbGxvd0VyckV4aXQ6IHRydWUsXG4gICAgbmV2ZXJSZXF1aXJlQXBwcm92YWw6IGZhbHNlLFxuICB9KTtcblxuICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ1RoaXMgZGVwbG95bWVudCB3aWxsIG1ha2UgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGNoYW5nZXMgYWNjb3JkaW5nIHRvIHlvdXIgY3VycmVudCBzZWN1cml0eSBhcHByb3ZhbCBsZXZlbCcpO1xuICBleHBlY3Qoc3RkRXJyKS50b0NvbnRhaW4oJ0RlcGxveW1lbnQgZmFpbGVkOiBFcnJvcjogXFxcIi0tcmVxdWlyZS1hcHByb3ZhbFxcXCIgaXMgZW5hYmxlZCBhbmQgc3RhY2sgaW5jbHVkZXMgc2VjdXJpdHktc2Vuc2l0aXZlIHVwZGF0ZXMnKTtcblxuICAvLyBFbnN1cmUgc3RhY2sgd2FzIG5vdCBkZXBsb3llZFxuICBhd2FpdCBleHBlY3QoZml4dHVyZS5hd3MuY2xvdWRGb3JtYXRpb24oJ2Rlc2NyaWJlU3RhY2tzJywge1xuICAgIFN0YWNrTmFtZTogZml4dHVyZS5mdWxsU3RhY2tOYW1lKCdzaW1wbGUtMScpLFxuICB9KSkucmVqZWN0cy50b1Rocm93KCdkb2VzIG5vdCBleGlzdCcpO1xufSkpO1xuIl19