@aws-solutions-constructs/core 1.153.0 → 1.155.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/.jsii +39 -39
- package/package.json +71 -71
- package/test/kinesis-analytics.test.d.ts +1 -1
- package/test/kinesis-analytics.test.js +114 -14
- package/test/sqs-helper.test.js +99 -1
package/.jsii
CHANGED
|
@@ -13,43 +13,43 @@
|
|
|
13
13
|
"npmlog": "^4.1.2"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@aws-cdk/aws-apigateway": "1.
|
|
17
|
-
"@aws-cdk/aws-certificatemanager": "1.
|
|
18
|
-
"@aws-cdk/aws-cloudfront": "1.
|
|
19
|
-
"@aws-cdk/aws-cloudfront-origins": "1.
|
|
20
|
-
"@aws-cdk/aws-cloudwatch": "1.
|
|
21
|
-
"@aws-cdk/aws-cognito": "1.
|
|
22
|
-
"@aws-cdk/aws-dynamodb": "1.
|
|
23
|
-
"@aws-cdk/aws-ec2": "1.
|
|
24
|
-
"@aws-cdk/aws-ecr": "1.
|
|
25
|
-
"@aws-cdk/aws-ecs": "1.
|
|
26
|
-
"@aws-cdk/aws-elasticache": "1.
|
|
27
|
-
"@aws-cdk/aws-elasticloadbalancingv2": "1.
|
|
28
|
-
"@aws-cdk/aws-elasticloadbalancingv2-targets": "1.
|
|
29
|
-
"@aws-cdk/aws-elasticsearch": "1.
|
|
30
|
-
"@aws-cdk/aws-events": "1.
|
|
31
|
-
"@aws-cdk/aws-glue": "1.
|
|
32
|
-
"@aws-cdk/aws-iam": "1.
|
|
33
|
-
"@aws-cdk/aws-iot": "1.
|
|
34
|
-
"@aws-cdk/aws-kinesis": "1.
|
|
35
|
-
"@aws-cdk/aws-kinesisanalytics": "1.
|
|
36
|
-
"@aws-cdk/aws-kinesisfirehose": "1.
|
|
37
|
-
"@aws-cdk/aws-kms": "1.
|
|
38
|
-
"@aws-cdk/aws-lambda": "1.
|
|
39
|
-
"@aws-cdk/aws-lambda-event-sources": "1.
|
|
40
|
-
"@aws-cdk/aws-logs": "1.
|
|
41
|
-
"@aws-cdk/aws-mediastore": "1.
|
|
42
|
-
"@aws-cdk/aws-s3": "1.
|
|
43
|
-
"@aws-cdk/aws-s3-assets": "1.
|
|
44
|
-
"@aws-cdk/aws-s3-notifications": "1.
|
|
45
|
-
"@aws-cdk/aws-sagemaker": "1.
|
|
46
|
-
"@aws-cdk/aws-secretsmanager": "1.
|
|
47
|
-
"@aws-cdk/aws-sns": "1.
|
|
48
|
-
"@aws-cdk/aws-sqs": "1.
|
|
49
|
-
"@aws-cdk/aws-ssm": "1.
|
|
50
|
-
"@aws-cdk/aws-stepfunctions": "1.
|
|
51
|
-
"@aws-cdk/aws-wafv2": "1.
|
|
52
|
-
"@aws-cdk/core": "1.
|
|
16
|
+
"@aws-cdk/aws-apigateway": "1.155.0",
|
|
17
|
+
"@aws-cdk/aws-certificatemanager": "1.155.0",
|
|
18
|
+
"@aws-cdk/aws-cloudfront": "1.155.0",
|
|
19
|
+
"@aws-cdk/aws-cloudfront-origins": "1.155.0",
|
|
20
|
+
"@aws-cdk/aws-cloudwatch": "1.155.0",
|
|
21
|
+
"@aws-cdk/aws-cognito": "1.155.0",
|
|
22
|
+
"@aws-cdk/aws-dynamodb": "1.155.0",
|
|
23
|
+
"@aws-cdk/aws-ec2": "1.155.0",
|
|
24
|
+
"@aws-cdk/aws-ecr": "1.155.0",
|
|
25
|
+
"@aws-cdk/aws-ecs": "1.155.0",
|
|
26
|
+
"@aws-cdk/aws-elasticache": "1.155.0",
|
|
27
|
+
"@aws-cdk/aws-elasticloadbalancingv2": "1.155.0",
|
|
28
|
+
"@aws-cdk/aws-elasticloadbalancingv2-targets": "1.155.0",
|
|
29
|
+
"@aws-cdk/aws-elasticsearch": "1.155.0",
|
|
30
|
+
"@aws-cdk/aws-events": "1.155.0",
|
|
31
|
+
"@aws-cdk/aws-glue": "1.155.0",
|
|
32
|
+
"@aws-cdk/aws-iam": "1.155.0",
|
|
33
|
+
"@aws-cdk/aws-iot": "1.155.0",
|
|
34
|
+
"@aws-cdk/aws-kinesis": "1.155.0",
|
|
35
|
+
"@aws-cdk/aws-kinesisanalytics": "1.155.0",
|
|
36
|
+
"@aws-cdk/aws-kinesisfirehose": "1.155.0",
|
|
37
|
+
"@aws-cdk/aws-kms": "1.155.0",
|
|
38
|
+
"@aws-cdk/aws-lambda": "1.155.0",
|
|
39
|
+
"@aws-cdk/aws-lambda-event-sources": "1.155.0",
|
|
40
|
+
"@aws-cdk/aws-logs": "1.155.0",
|
|
41
|
+
"@aws-cdk/aws-mediastore": "1.155.0",
|
|
42
|
+
"@aws-cdk/aws-s3": "1.155.0",
|
|
43
|
+
"@aws-cdk/aws-s3-assets": "1.155.0",
|
|
44
|
+
"@aws-cdk/aws-s3-notifications": "1.155.0",
|
|
45
|
+
"@aws-cdk/aws-sagemaker": "1.155.0",
|
|
46
|
+
"@aws-cdk/aws-secretsmanager": "1.155.0",
|
|
47
|
+
"@aws-cdk/aws-sns": "1.155.0",
|
|
48
|
+
"@aws-cdk/aws-sqs": "1.155.0",
|
|
49
|
+
"@aws-cdk/aws-ssm": "1.155.0",
|
|
50
|
+
"@aws-cdk/aws-stepfunctions": "1.155.0",
|
|
51
|
+
"@aws-cdk/aws-wafv2": "1.155.0",
|
|
52
|
+
"@aws-cdk/core": "1.155.0"
|
|
53
53
|
},
|
|
54
54
|
"dependencyClosure": {
|
|
55
55
|
"@aws-cdk/assets": {
|
|
@@ -3984,6 +3984,6 @@
|
|
|
3984
3984
|
"symbolId": "lib/input-validation:VerifiedProps"
|
|
3985
3985
|
}
|
|
3986
3986
|
},
|
|
3987
|
-
"version": "1.
|
|
3988
|
-
"fingerprint": "
|
|
3987
|
+
"version": "1.155.0",
|
|
3988
|
+
"fingerprint": "evXoLbbtr+N4N5y4lAG7zVOFs1EfoN7HVSRokg1UM+E="
|
|
3989
3989
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-solutions-constructs/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.155.0",
|
|
4
4
|
"description": "Core CDK Construct for patterns library",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.ts",
|
|
@@ -52,43 +52,43 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@aws-cdk/aws-cloudfront": "1.
|
|
56
|
-
"@aws-cdk/aws-cloudfront-origins": "1.
|
|
57
|
-
"@aws-cdk/aws-dynamodb": "1.
|
|
58
|
-
"@aws-cdk/aws-elasticache": "1.
|
|
59
|
-
"@aws-cdk/aws-elasticloadbalancingv2": "1.
|
|
60
|
-
"@aws-cdk/aws-elasticloadbalancingv2-targets": "1.
|
|
61
|
-
"@aws-cdk/aws-glue": "1.
|
|
62
|
-
"@aws-cdk/aws-iot": "1.
|
|
63
|
-
"@aws-cdk/aws-kinesis": "1.
|
|
64
|
-
"@aws-cdk/aws-kinesisanalytics": "1.
|
|
65
|
-
"@aws-cdk/aws-kinesisfirehose": "1.
|
|
66
|
-
"@aws-cdk/aws-lambda": "1.
|
|
67
|
-
"@aws-cdk/aws-lambda-event-sources": "1.
|
|
68
|
-
"@aws-cdk/aws-logs": "1.
|
|
69
|
-
"@aws-cdk/aws-s3": "1.
|
|
70
|
-
"@aws-cdk/aws-s3-notifications": "1.
|
|
71
|
-
"@aws-cdk/aws-sns": "1.
|
|
72
|
-
"@aws-cdk/aws-sqs": "1.
|
|
73
|
-
"@aws-cdk/core": "1.
|
|
74
|
-
"@aws-cdk/aws-iam": "1.
|
|
75
|
-
"@aws-cdk/aws-apigateway": "1.
|
|
76
|
-
"@aws-cdk/aws-kms": "1.
|
|
77
|
-
"@aws-cdk/aws-events": "1.
|
|
78
|
-
"@aws-cdk/aws-cognito": "1.
|
|
79
|
-
"@aws-cdk/aws-elasticsearch": "1.
|
|
80
|
-
"@aws-cdk/aws-cloudwatch": "1.
|
|
81
|
-
"@aws-cdk/aws-stepfunctions": "1.
|
|
82
|
-
"@aws-cdk/aws-certificatemanager": "1.
|
|
83
|
-
"@aws-cdk/aws-sagemaker": "1.
|
|
84
|
-
"@aws-cdk/aws-ec2": "1.
|
|
85
|
-
"@aws-cdk/aws-ecs": "1.
|
|
86
|
-
"@aws-cdk/aws-ecr": "1.
|
|
87
|
-
"@aws-cdk/aws-mediastore": "1.
|
|
88
|
-
"@aws-cdk/aws-s3-assets": "1.
|
|
89
|
-
"@aws-cdk/aws-secretsmanager": "1.
|
|
90
|
-
"@aws-cdk/aws-ssm": "1.
|
|
91
|
-
"@aws-cdk/aws-wafv2": "1.
|
|
55
|
+
"@aws-cdk/aws-cloudfront": "1.155.0",
|
|
56
|
+
"@aws-cdk/aws-cloudfront-origins": "1.155.0",
|
|
57
|
+
"@aws-cdk/aws-dynamodb": "1.155.0",
|
|
58
|
+
"@aws-cdk/aws-elasticache": "1.155.0",
|
|
59
|
+
"@aws-cdk/aws-elasticloadbalancingv2": "1.155.0",
|
|
60
|
+
"@aws-cdk/aws-elasticloadbalancingv2-targets": "1.155.0",
|
|
61
|
+
"@aws-cdk/aws-glue": "1.155.0",
|
|
62
|
+
"@aws-cdk/aws-iot": "1.155.0",
|
|
63
|
+
"@aws-cdk/aws-kinesis": "1.155.0",
|
|
64
|
+
"@aws-cdk/aws-kinesisanalytics": "1.155.0",
|
|
65
|
+
"@aws-cdk/aws-kinesisfirehose": "1.155.0",
|
|
66
|
+
"@aws-cdk/aws-lambda": "1.155.0",
|
|
67
|
+
"@aws-cdk/aws-lambda-event-sources": "1.155.0",
|
|
68
|
+
"@aws-cdk/aws-logs": "1.155.0",
|
|
69
|
+
"@aws-cdk/aws-s3": "1.155.0",
|
|
70
|
+
"@aws-cdk/aws-s3-notifications": "1.155.0",
|
|
71
|
+
"@aws-cdk/aws-sns": "1.155.0",
|
|
72
|
+
"@aws-cdk/aws-sqs": "1.155.0",
|
|
73
|
+
"@aws-cdk/core": "1.155.0",
|
|
74
|
+
"@aws-cdk/aws-iam": "1.155.0",
|
|
75
|
+
"@aws-cdk/aws-apigateway": "1.155.0",
|
|
76
|
+
"@aws-cdk/aws-kms": "1.155.0",
|
|
77
|
+
"@aws-cdk/aws-events": "1.155.0",
|
|
78
|
+
"@aws-cdk/aws-cognito": "1.155.0",
|
|
79
|
+
"@aws-cdk/aws-elasticsearch": "1.155.0",
|
|
80
|
+
"@aws-cdk/aws-cloudwatch": "1.155.0",
|
|
81
|
+
"@aws-cdk/aws-stepfunctions": "1.155.0",
|
|
82
|
+
"@aws-cdk/aws-certificatemanager": "1.155.0",
|
|
83
|
+
"@aws-cdk/aws-sagemaker": "1.155.0",
|
|
84
|
+
"@aws-cdk/aws-ec2": "1.155.0",
|
|
85
|
+
"@aws-cdk/aws-ecs": "1.155.0",
|
|
86
|
+
"@aws-cdk/aws-ecr": "1.155.0",
|
|
87
|
+
"@aws-cdk/aws-mediastore": "1.155.0",
|
|
88
|
+
"@aws-cdk/aws-s3-assets": "1.155.0",
|
|
89
|
+
"@aws-cdk/aws-secretsmanager": "1.155.0",
|
|
90
|
+
"@aws-cdk/aws-ssm": "1.155.0",
|
|
91
|
+
"@aws-cdk/aws-wafv2": "1.155.0",
|
|
92
92
|
"deep-diff": "^1.0.2",
|
|
93
93
|
"deepmerge": "^4.0.0",
|
|
94
94
|
"npmlog": "^4.1.2"
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"devDependencies": {
|
|
97
97
|
"@types/deep-diff": "^1.0.0",
|
|
98
98
|
"@types/npmlog": "^4.1.2",
|
|
99
|
-
"@aws-cdk/assert": "1.
|
|
99
|
+
"@aws-cdk/assert": "1.155.0",
|
|
100
100
|
"@types/jest": "^27.4.0",
|
|
101
101
|
"@types/node": "^10.3.0"
|
|
102
102
|
},
|
|
@@ -120,37 +120,37 @@
|
|
|
120
120
|
"deep-diff"
|
|
121
121
|
],
|
|
122
122
|
"peerDependencies": {
|
|
123
|
-
"@aws-cdk/aws-cloudfront": "1.
|
|
124
|
-
"@aws-cdk/aws-dynamodb": "1.
|
|
125
|
-
"@aws-cdk/aws-iot": "1.
|
|
126
|
-
"@aws-cdk/aws-kinesis": "1.
|
|
127
|
-
"@aws-cdk/aws-kinesisanalytics": "1.
|
|
128
|
-
"@aws-cdk/aws-kinesisfirehose": "1.
|
|
129
|
-
"@aws-cdk/aws-lambda": "1.
|
|
130
|
-
"@aws-cdk/aws-lambda-event-sources": "1.
|
|
131
|
-
"@aws-cdk/aws-logs": "1.
|
|
132
|
-
"@aws-cdk/aws-s3": "1.
|
|
133
|
-
"@aws-cdk/aws-s3-notifications": "1.
|
|
134
|
-
"@aws-cdk/aws-sns": "1.
|
|
135
|
-
"@aws-cdk/aws-sqs": "1.
|
|
136
|
-
"@aws-cdk/core": "1.
|
|
137
|
-
"@aws-cdk/aws-iam": "1.
|
|
138
|
-
"@aws-cdk/aws-apigateway": "1.
|
|
139
|
-
"@aws-cdk/aws-kms": "1.
|
|
140
|
-
"@aws-cdk/aws-events": "1.
|
|
141
|
-
"@aws-cdk/aws-cognito": "1.
|
|
142
|
-
"@aws-cdk/aws-elasticsearch": "1.
|
|
143
|
-
"@aws-cdk/aws-cloudwatch": "1.
|
|
144
|
-
"@aws-cdk/aws-stepfunctions": "1.
|
|
145
|
-
"@aws-cdk/aws-cloudfront-origins": "1.
|
|
146
|
-
"@aws-cdk/aws-certificatemanager": "1.
|
|
147
|
-
"@aws-cdk/aws-sagemaker": "1.
|
|
148
|
-
"@aws-cdk/aws-ec2": "1.
|
|
149
|
-
"@aws-cdk/aws-mediastore": "1.
|
|
150
|
-
"@aws-cdk/aws-glue": "1.
|
|
151
|
-
"@aws-cdk/aws-s3-assets": "1.
|
|
152
|
-
"@aws-cdk/aws-secretsmanager": "1.
|
|
153
|
-
"@aws-cdk/aws-ssm": "1.
|
|
154
|
-
"@aws-cdk/aws-wafv2": "1.
|
|
123
|
+
"@aws-cdk/aws-cloudfront": "1.155.0",
|
|
124
|
+
"@aws-cdk/aws-dynamodb": "1.155.0",
|
|
125
|
+
"@aws-cdk/aws-iot": "1.155.0",
|
|
126
|
+
"@aws-cdk/aws-kinesis": "1.155.0",
|
|
127
|
+
"@aws-cdk/aws-kinesisanalytics": "1.155.0",
|
|
128
|
+
"@aws-cdk/aws-kinesisfirehose": "1.155.0",
|
|
129
|
+
"@aws-cdk/aws-lambda": "1.155.0",
|
|
130
|
+
"@aws-cdk/aws-lambda-event-sources": "1.155.0",
|
|
131
|
+
"@aws-cdk/aws-logs": "1.155.0",
|
|
132
|
+
"@aws-cdk/aws-s3": "1.155.0",
|
|
133
|
+
"@aws-cdk/aws-s3-notifications": "1.155.0",
|
|
134
|
+
"@aws-cdk/aws-sns": "1.155.0",
|
|
135
|
+
"@aws-cdk/aws-sqs": "1.155.0",
|
|
136
|
+
"@aws-cdk/core": "1.155.0",
|
|
137
|
+
"@aws-cdk/aws-iam": "1.155.0",
|
|
138
|
+
"@aws-cdk/aws-apigateway": "1.155.0",
|
|
139
|
+
"@aws-cdk/aws-kms": "1.155.0",
|
|
140
|
+
"@aws-cdk/aws-events": "1.155.0",
|
|
141
|
+
"@aws-cdk/aws-cognito": "1.155.0",
|
|
142
|
+
"@aws-cdk/aws-elasticsearch": "1.155.0",
|
|
143
|
+
"@aws-cdk/aws-cloudwatch": "1.155.0",
|
|
144
|
+
"@aws-cdk/aws-stepfunctions": "1.155.0",
|
|
145
|
+
"@aws-cdk/aws-cloudfront-origins": "1.155.0",
|
|
146
|
+
"@aws-cdk/aws-certificatemanager": "1.155.0",
|
|
147
|
+
"@aws-cdk/aws-sagemaker": "1.155.0",
|
|
148
|
+
"@aws-cdk/aws-ec2": "1.155.0",
|
|
149
|
+
"@aws-cdk/aws-mediastore": "1.155.0",
|
|
150
|
+
"@aws-cdk/aws-glue": "1.155.0",
|
|
151
|
+
"@aws-cdk/aws-s3-assets": "1.155.0",
|
|
152
|
+
"@aws-cdk/aws-secretsmanager": "1.155.0",
|
|
153
|
+
"@aws-cdk/aws-ssm": "1.155.0",
|
|
154
|
+
"@aws-cdk/aws-wafv2": "1.155.0"
|
|
155
155
|
}
|
|
156
156
|
}
|
|
@@ -13,25 +13,29 @@
|
|
|
13
13
|
*/
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const core_1 = require("@aws-cdk/core");
|
|
16
|
+
const cdk = require("@aws-cdk/core");
|
|
16
17
|
const kinesisanalytics = require("@aws-cdk/aws-kinesisanalytics");
|
|
18
|
+
const kinesisFirehose = require("@aws-cdk/aws-kinesisfirehose");
|
|
19
|
+
const iam = require("@aws-cdk/aws-iam");
|
|
20
|
+
const kms = require("@aws-cdk/aws-kms");
|
|
17
21
|
const defaults = require("../index");
|
|
18
22
|
const utils_1 = require("../lib/utils");
|
|
19
23
|
require("@aws-cdk/assert/jest");
|
|
20
|
-
test(
|
|
24
|
+
test("test kinesisanalytics override inputProperty", () => {
|
|
21
25
|
const stack = new core_1.Stack();
|
|
22
26
|
const inputProperty = {
|
|
23
27
|
inputSchema: {
|
|
24
|
-
recordColumns: [{ name:
|
|
25
|
-
recordFormat: { recordFormatType:
|
|
28
|
+
recordColumns: [{ name: "x", sqlType: "y" }],
|
|
29
|
+
recordFormat: { recordFormatType: "csv" },
|
|
26
30
|
},
|
|
27
|
-
namePrefix:
|
|
31
|
+
namePrefix: "zzz",
|
|
28
32
|
};
|
|
29
33
|
const defaultProps = defaults.DefaultCfnApplicationProps;
|
|
30
34
|
const inProps = {
|
|
31
|
-
inputs: [inputProperty]
|
|
35
|
+
inputs: [inputProperty],
|
|
32
36
|
};
|
|
33
37
|
const outProps = utils_1.overrideProps(defaultProps, inProps);
|
|
34
|
-
new kinesisanalytics.CfnApplication(stack,
|
|
38
|
+
new kinesisanalytics.CfnApplication(stack, "KinesisAnalytics", outProps);
|
|
35
39
|
expect(stack).toHaveResource("AWS::KinesisAnalytics::Application", {
|
|
36
40
|
Inputs: [
|
|
37
41
|
{
|
|
@@ -39,16 +43,112 @@ test('test kinesisanalytics override inputProperty', () => {
|
|
|
39
43
|
RecordColumns: [
|
|
40
44
|
{
|
|
41
45
|
Name: "x",
|
|
42
|
-
SqlType: "y"
|
|
43
|
-
}
|
|
46
|
+
SqlType: "y",
|
|
47
|
+
},
|
|
44
48
|
],
|
|
45
49
|
RecordFormat: {
|
|
46
|
-
RecordFormatType: "csv"
|
|
47
|
-
}
|
|
50
|
+
RecordFormatType: "csv",
|
|
51
|
+
},
|
|
48
52
|
},
|
|
49
|
-
NamePrefix: "zzz"
|
|
50
|
-
}
|
|
51
|
-
]
|
|
53
|
+
NamePrefix: "zzz",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
52
56
|
});
|
|
53
57
|
});
|
|
54
|
-
|
|
58
|
+
test("Test default implementation", () => {
|
|
59
|
+
const stack = new core_1.Stack();
|
|
60
|
+
const newFirehose = CreateFirehose(stack);
|
|
61
|
+
const kinesisProps = {
|
|
62
|
+
kinesisFirehose: newFirehose,
|
|
63
|
+
kinesisAnalyticsProps: {
|
|
64
|
+
inputs: [{
|
|
65
|
+
inputSchema: {
|
|
66
|
+
recordColumns: [{
|
|
67
|
+
name: 'ts',
|
|
68
|
+
sqlType: 'TIMESTAMP',
|
|
69
|
+
mapping: '$.timestamp'
|
|
70
|
+
}, {
|
|
71
|
+
name: 'trip_id',
|
|
72
|
+
sqlType: 'VARCHAR(64)',
|
|
73
|
+
mapping: '$.trip_id'
|
|
74
|
+
}],
|
|
75
|
+
recordFormat: {
|
|
76
|
+
recordFormatType: 'JSON'
|
|
77
|
+
},
|
|
78
|
+
recordEncoding: 'UTF-8'
|
|
79
|
+
},
|
|
80
|
+
namePrefix: 'SOURCE_SQL_STREAM'
|
|
81
|
+
}]
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
defaults.buildKinesisAnalyticsApp(stack, kinesisProps);
|
|
85
|
+
expect(stack).toHaveResourceLike("AWS::KinesisAnalytics::Application", {
|
|
86
|
+
Inputs: [{
|
|
87
|
+
InputSchema: {
|
|
88
|
+
RecordColumns: [{
|
|
89
|
+
Name: 'ts',
|
|
90
|
+
SqlType: 'TIMESTAMP',
|
|
91
|
+
Mapping: '$.timestamp'
|
|
92
|
+
}, {
|
|
93
|
+
Name: 'trip_id',
|
|
94
|
+
SqlType: 'VARCHAR(64)',
|
|
95
|
+
Mapping: '$.trip_id'
|
|
96
|
+
}],
|
|
97
|
+
RecordFormat: {
|
|
98
|
+
RecordFormatType: 'JSON'
|
|
99
|
+
},
|
|
100
|
+
RecordEncoding: 'UTF-8'
|
|
101
|
+
},
|
|
102
|
+
NamePrefix: 'SOURCE_SQL_STREAM'
|
|
103
|
+
}]
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
// test('Test for customer overrides', {
|
|
107
|
+
// test('Check policy created', {
|
|
108
|
+
function CreateFirehose(stack) {
|
|
109
|
+
// Creating the Firehose is kind of a big deal. FirehoseToS3 is not readily available here in core,
|
|
110
|
+
// so this routine pretty much replicates it. If this function ceases to work correctly, look at
|
|
111
|
+
// FirehoseToS3 and see if that changed.
|
|
112
|
+
const destinationBucket = defaults.CreateScrapBucket(stack, {
|
|
113
|
+
removalPolicy: core_1.RemovalPolicy.DESTROY,
|
|
114
|
+
autoDeleteObjects: true,
|
|
115
|
+
});
|
|
116
|
+
const kinesisFirehoseLogGroup = defaults.buildLogGroup(stack, "firehose-log-group", {});
|
|
117
|
+
const cwLogStream = kinesisFirehoseLogGroup.addStream("firehose-log-stream");
|
|
118
|
+
const firehoseRole = new iam.Role(stack, "test-role", {
|
|
119
|
+
assumedBy: new iam.ServicePrincipal("firehose.amazonaws.com"),
|
|
120
|
+
});
|
|
121
|
+
// Setup the IAM policy for Kinesis Firehose
|
|
122
|
+
const firehosePolicy = new iam.Policy(stack, "KinesisFirehosePolicy", {
|
|
123
|
+
statements: [
|
|
124
|
+
new iam.PolicyStatement({
|
|
125
|
+
actions: [
|
|
126
|
+
"s3:AbortMultipartUpload",
|
|
127
|
+
"s3:GetBucketLocation",
|
|
128
|
+
"s3:GetObject",
|
|
129
|
+
"s3:ListBucket",
|
|
130
|
+
"s3:ListBucketMultipartUploads",
|
|
131
|
+
"s3:PutObject",
|
|
132
|
+
],
|
|
133
|
+
resources: [
|
|
134
|
+
`${destinationBucket.bucketArn}`,
|
|
135
|
+
`${destinationBucket.bucketArn}/*`,
|
|
136
|
+
],
|
|
137
|
+
}),
|
|
138
|
+
new iam.PolicyStatement({
|
|
139
|
+
actions: ["logs:PutLogEvents"],
|
|
140
|
+
resources: [
|
|
141
|
+
`arn:${cdk.Aws.PARTITION}:logs:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:log-group:${kinesisFirehoseLogGroup.logGroupName}:log-stream:${cwLogStream.logStreamName}`,
|
|
142
|
+
],
|
|
143
|
+
}),
|
|
144
|
+
],
|
|
145
|
+
});
|
|
146
|
+
// Attach policy to role
|
|
147
|
+
firehosePolicy.attachToRole(firehoseRole);
|
|
148
|
+
const awsManagedKey = kms.Alias.fromAliasName(stack, "aws-managed-key", "alias/aws/s3");
|
|
149
|
+
const defaultKinesisFirehoseProps = defaults.DefaultCfnDeliveryStreamProps(destinationBucket.bucketArn, firehoseRole.roleArn, kinesisFirehoseLogGroup.logGroupName, cwLogStream.logStreamName, awsManagedKey);
|
|
150
|
+
destinationBucket.grantPut(firehoseRole);
|
|
151
|
+
const firehose = new kinesisFirehose.CfnDeliveryStream(stack, "KinesisFirehose", defaultKinesisFirehoseProps);
|
|
152
|
+
return firehose;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2luZXNpcy1hbmFseXRpY3MudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImtpbmVzaXMtYW5hbHl0aWNzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILHdDQUFxRDtBQUNyRCxxQ0FBcUM7QUFDckMsa0VBQWtFO0FBQ2xFLGdFQUFnRTtBQUNoRSx3Q0FBd0M7QUFDeEMsd0NBQXdDO0FBRXhDLHFDQUFxQztBQUNyQyx3Q0FBNkM7QUFDN0MsZ0NBQThCO0FBRTlCLElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7SUFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFLLEVBQUUsQ0FBQztJQUUxQixNQUFNLGFBQWEsR0FBa0Q7UUFDbkUsV0FBVyxFQUFFO1lBQ1gsYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUU7U0FDMUM7UUFDRCxVQUFVLEVBQUUsS0FBSztLQUNsQixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQ2hCLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQztJQUV0QyxNQUFNLE9BQU8sR0FBeUM7UUFDcEQsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDO0tBQ3hCLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxxQkFBYSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV0RCxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFekUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxvQ0FBb0MsRUFBRTtRQUNqRSxNQUFNLEVBQUU7WUFDTjtnQkFDRSxXQUFXLEVBQUU7b0JBQ1gsYUFBYSxFQUFFO3dCQUNiOzRCQUNFLElBQUksRUFBRSxHQUFHOzRC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aHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFN0YWNrLCBSZW1vdmFsUG9saWN5IH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiQGF3cy1jZGsvY29yZVwiO1xuaW1wb3J0ICogYXMga2luZXNpc2FuYWx5dGljcyBmcm9tIFwiQGF3cy1jZGsvYXdzLWtpbmVzaXNhbmFseXRpY3NcIjtcbmltcG9ydCAqIGFzIGtpbmVzaXNGaXJlaG9zZSBmcm9tIFwiQGF3cy1jZGsvYXdzLWtpbmVzaXNmaXJlaG9zZVwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJAYXdzLWNkay9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSBcIkBhd3MtY2RrL2F3cy1rbXNcIjtcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcIkBhd3MtY2RrL2F3cy1sb2dzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMgfSBmcm9tIFwiLi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgXCJAYXdzLWNkay9hc3NlcnQvamVzdFwiO1xuXG50ZXN0KFwidGVzdCBraW5lc2lzYW5hbHl0aWNzIG92ZXJyaWRlIGlucHV0UHJvcGVydHlcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IGlucHV0UHJvcGVydHk6IGtpbmVzaXNhbmFseXRpY3MuQ2ZuQXBwbGljYXRpb24uSW5wdXRQcm9wZXJ0eSA9IHtcbiAgICBpbnB1dFNjaGVtYToge1xuICAgICAgcmVjb3JkQ29sdW1uczogW3sgbmFtZTogXCJ4XCIsIHNxbFR5cGU6IFwieVwiIH1dLFxuICAgICAgcmVjb3JkRm9ybWF0OiB7IHJlY29yZEZvcm1hdFR5cGU6IFwiY3N2XCIgfSxcbiAgICB9LFxuICAgIG5hbWVQcmVmaXg6IFwienp6XCIsXG4gIH07XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzOiBraW5lc2lzYW5hbHl0aWNzLkNmbkFwcGxpY2F0aW9uUHJvcHMgPVxuICAgIGRlZmF1bHRzLkRlZmF1bHRDZm5BcHBsaWNhdGlvblByb3BzO1xuXG4gIGNvbnN0IGluUHJvcHM6IGtpbmVzaXNhbmFseXRpY3MuQ2ZuQXBwbGljYXRpb25Qcm9wcyA9IHtcbiAgICBpbnB1dHM6IFtpbnB1dFByb3BlcnR5XSxcbiAgfTtcblxuICBjb25zdCBvdXRQcm9wcyA9IG92ZXJyaWRlUHJvcHMoZGVmYXVsdFByb3BzLCBpblByb3BzKTtcblxuICBuZXcga2luZXNpc2FuYWx5dGljcy5DZm5BcHBsaWNhdGlvbihzdGFjaywgXCJLaW5lc2lzQW5hbHl0aWNzXCIsIG91dFByb3BzKTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpLaW5lc2lzQW5hbHl0aWNzOjpBcHBsaWNhdGlvblwiLCB7XG4gICAgSW5wdXRzOiBbXG4gICAgICB7XG4gICAgICAgIElucHV0U2NoZW1hOiB7XG4gICAgICAgICAgUmVjb3JkQ29sdW1uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBOYW1lOiBcInhcIixcbiAgICAgICAgICAgICAgU3FsVHlwZTogXCJ5XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgUmVjb3JkRm9ybWF0OiB7XG4gICAgICAgICAgICBSZWNvcmRGb3JtYXRUeXBlOiBcImNzdlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIE5hbWVQcmVmaXg6IFwienp6XCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xufSk7XG5cbnRlc3QoXCJUZXN0IGRlZmF1bHQgaW1wbGVtZW50YXRpb25cIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IG5ld0ZpcmVob3NlID0gQ3JlYXRlRmlyZWhvc2Uoc3RhY2spO1xuICBjb25zdCBraW5lc2lzUHJvcHM6IGRlZmF1bHRzLkJ1aWxkS2luZXNpc0FuYWx5dGljc0FwcFByb3BzID0ge1xuICAgIGtpbmVzaXNGaXJlaG9zZTogbmV3RmlyZWhvc2UsXG4gICAga2luZXNpc0FuYWx5dGljc1Byb3BzOiB7XG4gICAgICBpbnB1dHM6IFt7XG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgcmVjb3JkQ29sdW1uczogW3tcbiAgICAgICAgICAgIG5hbWU6ICd0cycsXG4gICAgICAgICAgICBzcWxUeXBlOiAnVElNRVNUQU1QJyxcbiAgICAgICAgICAgIG1hcHBpbmc6ICckLnRpbWVzdGFtcCdcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAndHJpcF9pZCcsXG4gICAgICAgICAgICBzcWxUeXBlOiAnVkFSQ0hBUig2NCknLFxuICAgICAgICAgICAgbWFwcGluZzogJyQudHJpcF9pZCdcbiAgICAgICAgICB9XSxcbiAgICAgICAgICByZWNvcmRGb3JtYXQ6IHtcbiAgICAgICAgICAgIHJlY29yZEZvcm1hdFR5cGU6ICdKU09OJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVjb3JkRW5jb2Rpbmc6ICdVVEYtOCdcbiAgICAgICAgfSxcbiAgICAgICAgbmFtZVByZWZpeDogJ1NPVVJDRV9TUUxfU1RSRUFNJ1xuICAgICAgfV1cbiAgICB9LFxuICB9O1xuXG4gIGRlZmF1bHRzLmJ1aWxkS2luZXNpc0FuYWx5dGljc0FwcChzdGFjaywga2luZXNpc1Byb3BzKTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZShcIkFXUzo6S2luZXNpc0FuYWx5dGljczo6QXBwbGljYXRpb25cIiwge1xuICAgIElucHV0czogW3tcbiAgICAgIElucHV0U2NoZW1hOiB7XG4gICAgICAgIFJlY29yZENvbHVtbnM6IFt7XG4gICAgICAgICAgTmFtZTogJ3RzJyxcbiAgICAgICAgICBTcWxUeXBlOiAnVElNRVNUQU1QJyxcbiAgICAgICAgICBNYXBwaW5nOiAnJC50aW1lc3RhbXAnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBOYW1lOiAndHJpcF9pZCcsXG4gICAgICAgICAgU3FsVHlwZTogJ1ZBUkNIQVIoNjQpJyxcbiAgICAgICAgICBNYXBwaW5nOiAnJC50cmlwX2lkJ1xuICAgICAgICB9XSxcbiAgICAgICAgUmVjb3JkRm9ybWF0OiB7XG4gICAgICAgICAgUmVjb3JkRm9ybWF0VHlwZTogJ0pTT04nXG4gICAgICAgIH0sXG4gICAgICAgIFJlY29yZEVuY29kaW5nOiAnVVRGLTgnXG4gICAgICB9LFxuICAgICAgTmFtZVByZWZpeDogJ1NPVVJDRV9TUUxfU1RSRUFNJ1xuICAgIH1dXG4gIH0pO1xufSk7XG5cbi8vIHRlc3QoJ1Rlc3QgZm9yIGN1c3RvbWVyIG92ZXJyaWRlcycsIHtcbi8vIHRlc3QoJ0NoZWNrIHBvbGljeSBjcmVhdGVkJywge1xuXG5mdW5jdGlvbiBDcmVhdGVGaXJlaG9zZShzdGFjazogU3RhY2spOiBraW5lc2lzRmlyZWhvc2UuQ2ZuRGVsaXZlcnlTdHJlYW0ge1xuICAvLyBDcmVhdGluZyB0aGUgRmlyZWhvc2UgaXMga2luZCBvZiBhIGJpZyBkZWFsLiBGaXJlaG9zZVRvUzMgaXMgbm90IHJlYWRpbHkgYXZhaWxhYmxlIGhlcmUgaW4gY29yZSxcbiAgLy8gc28gdGhpcyByb3V0aW5lIHByZXR0eSBtdWNoIHJlcGxpY2F0ZXMgaXQuIElmIHRoaXMgZnVuY3Rpb24gY2Vhc2VzIHRvIHdvcmsgY29ycmVjdGx5LCBsb29rIGF0XG4gIC8vIEZpcmVob3NlVG9TMyBhbmQgc2VlIGlmIHRoYXQgY2hhbmdlZC5cbiAgY29uc3QgZGVzdGluYXRpb25CdWNrZXQgPSBkZWZhdWx0cy5DcmVhdGVTY3JhcEJ1Y2tldChzdGFjaywge1xuICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3Qga2luZXNpc0ZpcmVob3NlTG9nR3JvdXAgPSBkZWZhdWx0cy5idWlsZExvZ0dyb3VwKFxuICAgIHN0YWNrLFxuICAgIFwiZmlyZWhvc2UtbG9nLWdyb3VwXCIsXG4gICAge31cbiAgKTtcblxuICBjb25zdCBjd0xvZ1N0cmVhbTogbG9ncy5Mb2dTdHJlYW0gPSBraW5lc2lzRmlyZWhvc2VMb2dHcm91cC5hZGRTdHJlYW0oXG4gICAgXCJmaXJlaG9zZS1sb2ctc3RyZWFtXCJcbiAgKTtcblxuICBjb25zdCBmaXJlaG9zZVJvbGUgPSBuZXcgaWFtLlJvbGUoc3RhY2ssIFwidGVzdC1yb2xlXCIsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImZpcmVob3NlLmFtYXpvbmF3cy5jb21cIiksXG4gIH0pO1xuXG4gIC8vIFNldHVwIHRoZSBJQU0gcG9saWN5IGZvciBLaW5lc2lzIEZpcmVob3NlXG4gIGNvbnN0IGZpcmVob3NlUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3koc3RhY2ssIFwiS2luZXNpc0ZpcmVob3NlUG9saWN5XCIsIHtcbiAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInMzOkFib3J0TXVsdGlwYXJ0VXBsb2FkXCIsXG4gICAgICAgICAgXCJzMzpHZXRCdWNrZXRMb2NhdGlvblwiLFxuICAgICAgICAgIFwiczM6R2V0T2JqZWN0XCIsXG4gICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgXCJzMzpMaXN0QnVja2V0TXVsdGlwYXJ0VXBsb2Fkc1wiLFxuICAgICAgICAgIFwiczM6UHV0T2JqZWN0XCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGAke2Rlc3RpbmF0aW9uQnVja2V0LmJ1Y2tldEFybn1gLFxuICAgICAgICAgIGAke2Rlc3RpbmF0aW9uQnVja2V0LmJ1Y2tldEFybn0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wibG9nczpQdXRMb2dFdmVudHNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06bG9nczoke2Nkay5Bd3MuUkVHSU9OfToke2Nkay5Bd3MuQUNDT1VOVF9JRH06bG9nLWdyb3VwOiR7a2luZXNpc0ZpcmVob3NlTG9nR3JvdXAubG9nR3JvdXBOYW1lfTpsb2ctc3RyZWFtOiR7Y3dMb2dTdHJlYW0ubG9nU3RyZWFtTmFtZX1gLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgXSxcbiAgfSk7XG5cbiAgLy8gQXR0YWNoIHBvbGljeSB0byByb2xlXG4gIGZpcmVob3NlUG9saWN5LmF0dGFjaFRvUm9sZShmaXJlaG9zZVJvbGUpO1xuXG4gIGNvbnN0IGF3c01hbmFnZWRLZXk6IGttcy5JS2V5ID0ga21zLkFsaWFzLmZyb21BbGlhc05hbWUoXG4gICAgc3RhY2ssXG4gICAgXCJhd3MtbWFuYWdlZC1rZXlcIixcbiAgICBcImFsaWFzL2F3cy9zM1wiXG4gICk7XG5cbiAgY29uc3QgZGVmYXVsdEtpbmVzaXNGaXJlaG9zZVByb3BzOiBraW5lc2lzRmlyZWhvc2UuQ2ZuRGVsaXZlcnlTdHJlYW1Qcm9wcyA9IGRlZmF1bHRzLkRlZmF1bHRDZm5EZWxpdmVyeVN0cmVhbVByb3BzKFxuICAgIGRlc3RpbmF0aW9uQnVja2V0LmJ1Y2tldEFybixcbiAgICBmaXJlaG9zZVJvbGUucm9sZUFybixcbiAgICBraW5lc2lzRmlyZWhvc2VMb2dHcm91cC5sb2dHcm91cE5hbWUsXG4gICAgY3dMb2dTdHJlYW0ubG9nU3RyZWFtTmFtZSxcbiAgICBhd3NNYW5hZ2VkS2V5XG4gICk7XG5cbiAgZGVzdGluYXRpb25CdWNrZXQuZ3JhbnRQdXQoZmlyZWhvc2VSb2xlKTtcblxuICBjb25zdCBmaXJlaG9zZSA9IG5ldyBraW5lc2lzRmlyZWhvc2UuQ2ZuRGVsaXZlcnlTdHJlYW0oXG4gICAgc3RhY2ssXG4gICAgXCJLaW5lc2lzRmlyZWhvc2VcIixcbiAgICBkZWZhdWx0S2luZXNpc0ZpcmVob3NlUHJvcHNcbiAgKTtcbiAgcmV0dXJuIGZpcmVob3NlO1xufVxuIl19
|
package/test/sqs-helper.test.js
CHANGED
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
// Imports
|
|
16
16
|
const core_1 = require("@aws-cdk/core");
|
|
17
|
+
const sqs = require("@aws-cdk/aws-sqs");
|
|
17
18
|
const defaults = require("../");
|
|
18
19
|
require("@aws-cdk/assert/jest");
|
|
20
|
+
const sqs_helper_1 = require("../lib/sqs-helper");
|
|
19
21
|
// --------------------------------------------------------------
|
|
20
22
|
// Test deployment w/ imported encryption key
|
|
21
23
|
// --------------------------------------------------------------
|
|
@@ -54,4 +56,100 @@ test('Test deployment without imported encryption key', () => {
|
|
|
54
56
|
KmsMasterKeyId: "alias/aws/sqs"
|
|
55
57
|
});
|
|
56
58
|
});
|
|
57
|
-
|
|
59
|
+
// --------------------------------------------------------------
|
|
60
|
+
// Test deployment w/ construct created encryption key
|
|
61
|
+
// --------------------------------------------------------------
|
|
62
|
+
test('Test deployment w/ construct created encryption key', () => {
|
|
63
|
+
// Stack
|
|
64
|
+
const stack = new core_1.Stack();
|
|
65
|
+
// Helper declaration
|
|
66
|
+
const [queue, key] = defaults.buildQueue(stack, 'existing-queue', {
|
|
67
|
+
queueProps: {
|
|
68
|
+
queueName: 'existing-queue'
|
|
69
|
+
},
|
|
70
|
+
enableEncryptionWithCustomerManagedKey: true,
|
|
71
|
+
});
|
|
72
|
+
expect(stack).toHaveResource("AWS::SQS::Queue", {
|
|
73
|
+
QueueName: "existing-queue"
|
|
74
|
+
});
|
|
75
|
+
expect(stack).toHaveResource("AWS::KMS::Key", {
|
|
76
|
+
EnableKeyRotation: true
|
|
77
|
+
});
|
|
78
|
+
expect(queue).toBeDefined();
|
|
79
|
+
expect(key).toBeDefined();
|
|
80
|
+
});
|
|
81
|
+
test('Test DLQ when existing Queue Provided', () => {
|
|
82
|
+
const stack = new core_1.Stack();
|
|
83
|
+
const existingQueue = new sqs.Queue(stack, 'test-queue');
|
|
84
|
+
const buildDlqProps = {
|
|
85
|
+
existingQueueObj: existingQueue,
|
|
86
|
+
};
|
|
87
|
+
const returnedQueueu = defaults.buildDeadLetterQueue(stack, buildDlqProps);
|
|
88
|
+
expect(returnedQueueu).toBeUndefined();
|
|
89
|
+
expect(stack).toCountResources("AWS::SQS::Queue", 1);
|
|
90
|
+
});
|
|
91
|
+
test('Test DLQ with all defaults', () => {
|
|
92
|
+
const stack = new core_1.Stack();
|
|
93
|
+
sqs_helper_1.buildDeadLetterQueue(stack, {});
|
|
94
|
+
expect(stack).toHaveResourceLike("AWS::SQS::Queue", {
|
|
95
|
+
KmsMasterKeyId: "alias/aws/sqs"
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
test("Test DLQ with a provided properties", () => {
|
|
99
|
+
const stack = new core_1.Stack();
|
|
100
|
+
const testQueueName = "test-unique252";
|
|
101
|
+
const returnedQueue = sqs_helper_1.buildDeadLetterQueue(stack, {
|
|
102
|
+
deadLetterQueueProps: {
|
|
103
|
+
queueName: testQueueName,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
expect(stack).toHaveResourceLike("AWS::SQS::Queue", {
|
|
107
|
+
QueueName: testQueueName,
|
|
108
|
+
});
|
|
109
|
+
expect(returnedQueue).toBeDefined();
|
|
110
|
+
});
|
|
111
|
+
test('Test DLQ with a provided maxReceiveCount', () => {
|
|
112
|
+
const stack = new core_1.Stack();
|
|
113
|
+
const testMaxReceiveCount = 31;
|
|
114
|
+
const dlqInterface = sqs_helper_1.buildDeadLetterQueue(stack, {
|
|
115
|
+
maxReceiveCount: testMaxReceiveCount
|
|
116
|
+
});
|
|
117
|
+
expect(dlqInterface === null || dlqInterface === void 0 ? void 0 : dlqInterface.maxReceiveCount).toEqual(testMaxReceiveCount);
|
|
118
|
+
});
|
|
119
|
+
test('Test returning an existing Queue', () => {
|
|
120
|
+
const stack = new core_1.Stack();
|
|
121
|
+
const testQueueName = 'existing-queue';
|
|
122
|
+
const existingQueue = new sqs.Queue(stack, 'test-queue', {
|
|
123
|
+
queueName: testQueueName
|
|
124
|
+
});
|
|
125
|
+
const [returnedQueue] = defaults.buildQueue(stack, 'newQueue', {
|
|
126
|
+
existingQueueObj: existingQueue
|
|
127
|
+
});
|
|
128
|
+
expect(stack).toHaveResourceLike("AWS::SQS::Queue", {
|
|
129
|
+
QueueName: testQueueName,
|
|
130
|
+
});
|
|
131
|
+
expect(existingQueue.queueName).toEqual(returnedQueue.queueName);
|
|
132
|
+
});
|
|
133
|
+
test('Test creating a queue with a DLQ', () => {
|
|
134
|
+
const stack = new core_1.Stack();
|
|
135
|
+
const dlqInterface = sqs_helper_1.buildDeadLetterQueue(stack, {});
|
|
136
|
+
const [newQueue] = sqs_helper_1.buildQueue(stack, 'new-queue', {
|
|
137
|
+
deadLetterQueue: dlqInterface
|
|
138
|
+
});
|
|
139
|
+
expect(stack).toCountResources("AWS::SQS::Queue", 2);
|
|
140
|
+
expect(newQueue).toBeDefined();
|
|
141
|
+
expect(newQueue.deadLetterQueue).toBeDefined();
|
|
142
|
+
});
|
|
143
|
+
test('Test creating a FIFO queue', () => {
|
|
144
|
+
const stack = new core_1.Stack();
|
|
145
|
+
const [newFifoQueue] = sqs_helper_1.buildQueue(stack, 'new-queue', {
|
|
146
|
+
queueProps: {
|
|
147
|
+
fifo: true
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
expect(stack).toHaveResourceLike("AWS::SQS::Queue", {
|
|
151
|
+
FifoQueue: true
|
|
152
|
+
});
|
|
153
|
+
expect(newFifoQueue.fifo).toBe(true);
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLWhlbHBlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3FzLWhlbHBlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCxVQUFVO0FBQ1Ysd0NBQXNDO0FBQ3RDLHdDQUF3QztBQUN4QyxnQ0FBZ0M7QUFDaEMsZ0NBQThCO0FBQzlCLGtEQUFxRTtBQUVyRSxpRUFBaUU7QUFDakUsNkNBQTZDO0FBQzdDLGlFQUFpRTtBQUNqRSxJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO0lBQ3RELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFlBQUssRUFBRSxDQUFDO0lBQzFCLHFCQUFxQjtJQUNyQixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtRQUMzQyxVQUFVLEVBQUU7WUFDVixTQUFTLEVBQUUsZ0JBQWdCO1NBQzVCO1FBQ0Qsc0NBQXNDLEVBQUUsSUFBSTtRQUM1QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztLQUNsRCxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1FBQzlDLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUU7UUFDNUMsaUJBQWlCLEVBQUUsSUFBSTtLQUN4QixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILGlFQUFpRTtBQUNqRSxrREFBa0Q7QUFDbEQsaUVBQWlFO0FBQ2pFLElBQUksQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7SUFDM0QsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBSyxFQUFFLENBQUM7SUFDMUIscUJBQXFCO0lBQ3JCLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxF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RSxDQUFDO0lBRTFCLE1BQU0sWUFBWSxHQUFHLGlDQUFvQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVyRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsdUJBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO1FBQ2hELGVBQWUsRUFBRSxZQUFZO0tBQzlCLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFLLEVBQUUsQ0FBQztJQUUxQixNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsdUJBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFO1FBQ3BELFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxJQUFJO1NBQ1g7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUU7UUFDbEQsU0FBUyxFQUFFLElBQUk7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMiBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIkBhd3MtY2RrL2NvcmVcIjtcbmltcG9ydCAqIGFzIHNxcyBmcm9tICdAYXdzLWNkay9hd3Mtc3FzJztcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgJ0Bhd3MtY2RrL2Fzc2VydC9qZXN0JztcbmltcG9ydCB7IGJ1aWxkRGVhZExldHRlclF1ZXVlLCBidWlsZFF1ZXVlIH0gZnJvbSBcIi4uL2xpYi9zcXMtaGVscGVyXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZXN0IGRlcGxveW1lbnQgdy8gaW1wb3J0ZWQgZW5jcnlwdGlvbiBrZXlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gaW1wb3J0ZWQgZW5jcnlwdGlvbiBrZXknLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEhlbHBlciBkZWNsYXJhdGlvblxuICBkZWZhdWx0cy5idWlsZFF1ZXVlKHN0YWNrLCAnZXhpc3RpbmctcXVldWUnLCB7XG4gICAgcXVldWVQcm9wczoge1xuICAgICAgcXVldWVOYW1lOiAnZXhpc3RpbmctcXVldWUnXG4gICAgfSxcbiAgICBlbmFibGVFbmNyeXB0aW9uV2l0aEN1c3RvbWVyTWFuYWdlZEtleTogdHJ1ZSxcbiAgICBlbmNyeXB0aW9uS2V5OiBkZWZhdWx0cy5idWlsZEVuY3J5cHRpb25LZXkoc3RhY2spXG4gIH0pO1xuXG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoXCJBV1M6OlNRUzo6UXVldWVcIiwge1xuICAgIFF1ZXVlTmFtZTogXCJleGlzdGluZy1xdWV1ZVwiXG4gIH0pO1xuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpLTVM6OktleVwiLCB7XG4gICAgRW5hYmxlS2V5Um90YXRpb246IHRydWVcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlc3QgZGVwbG95bWVudCB3aXRob3V0IGltcG9ydGVkIGVuY3J5cHRpb24ga2V5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudGVzdCgnVGVzdCBkZXBsb3ltZW50IHdpdGhvdXQgaW1wb3J0ZWQgZW5jcnlwdGlvbiBrZXknLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEhlbHBlciBkZWNsYXJhdGlvblxuICBkZWZhdWx0cy5idWlsZFF1ZXVlKHN0YWNrLCAnZXhpc3RpbmctcXVldWUnLCB7XG4gICAgcXVldWVQcm9wczoge1xuICAgICAgcXVldWVOYW1lOiAnZXhpc3RpbmctcXVldWUnXG4gICAgfVxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBRdWV1ZU5hbWU6IFwiZXhpc3RpbmctcXVldWVcIixcbiAgICBLbXNNYXN0ZXJLZXlJZDogXCJhbGlhcy9hd3Mvc3FzXCJcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRlc3QgZGVwbG95bWVudCB3LyBjb25zdHJ1Y3QgY3JlYXRlZCBlbmNyeXB0aW9uIGtleVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBjb25zdHJ1Y3QgY3JlYXRlZCBlbmNyeXB0aW9uIGtleScsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gSGVscGVyIGRlY2xhcmF0aW9uXG4gIGNvbnN0IFtxdWV1ZSwga2V5XSA9IGRlZmF1bHRzLmJ1aWxkUXVldWUoc3RhY2ssICdleGlzdGluZy1xdWV1ZScsIHtcbiAgICBxdWV1ZVByb3BzOiB7XG4gICAgICBxdWV1ZU5hbWU6ICdleGlzdGluZy1xdWV1ZSdcbiAgICB9LFxuICAgIGVuYWJsZUVuY3J5cHRpb25XaXRoQ3VzdG9tZXJNYW5hZ2VkS2V5OiB0cnVlLFxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBRdWV1ZU5hbWU6IFwiZXhpc3RpbmctcXVldWVcIlxuICB9KTtcbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZShcIkFXUzo6S01TOjpLZXlcIiwge1xuICAgIEVuYWJsZUtleVJvdGF0aW9uOiB0cnVlXG4gIH0pO1xuICBleHBlY3QocXVldWUpLnRvQmVEZWZpbmVkKCk7XG4gIGV4cGVjdChrZXkpLnRvQmVEZWZpbmVkKCk7XG59KTtcblxudGVzdCgnVGVzdCBETFEgd2hlbiBleGlzdGluZyBRdWV1ZSBQcm92aWRlZCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICBjb25zdCBleGlzdGluZ1F1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgJ3Rlc3QtcXVldWUnKTtcbiAgY29uc3QgYnVpbGREbHFQcm9wczogZGVmYXVsdHMuQnVpbGREZWFkTGV0dGVyUXVldWVQcm9wcyA9IHtcbiAgICBleGlzdGluZ1F1ZXVlT2JqOiBleGlzdGluZ1F1ZXVlLFxuICB9O1xuXG4gIGNvbnN0IHJldHVybmVkUXVldWV1ID0gZGVmYXVsdHMuYnVpbGREZWFkTGV0dGVyUXVldWUoc3RhY2ssIGJ1aWxkRGxxUHJvcHMpO1xuXG4gIGV4cGVjdChyZXR1cm5lZFF1ZXVldSkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3Qoc3RhY2spLnRvQ291bnRSZXNvdXJjZXMoXCJBV1M6OlNRUzo6UXVldWVcIiwgMSk7XG59KTtcblxudGVzdCgnVGVzdCBETFEgd2l0aCBhbGwgZGVmYXVsdHMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgYnVpbGREZWFkTGV0dGVyUXVldWUoc3RhY2ssIHt9KTtcbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZUxpa2UoXCJBV1M6OlNRUzo6UXVldWVcIiwge1xuICAgIEttc01hc3RlcktleUlkOiBcImFsaWFzL2F3cy9zcXNcIlxuICB9KTtcbn0pO1xuXG50ZXN0KFwiVGVzdCBETFEgd2l0aCBhIHByb3ZpZGVkIHByb3BlcnRpZXNcIiwgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCB0ZXN0UXVldWVOYW1lID0gXCJ0ZXN0LXVuaXF1ZTI1MlwiO1xuXG4gIGNvbnN0IHJldHVybmVkUXVldWUgPSBidWlsZERlYWRMZXR0ZXJRdWV1ZShzdGFjaywge1xuICAgIGRlYWRMZXR0ZXJRdWV1ZVByb3BzOiB7XG4gICAgICBxdWV1ZU5hbWU6IHRlc3RRdWV1ZU5hbWUsXG4gICAgfSxcbiAgfSk7XG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2VMaWtlKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBRdWV1ZU5hbWU6IHRlc3RRdWV1ZU5hbWUsXG4gIH0pO1xuICBleHBlY3QocmV0dXJuZWRRdWV1ZSkudG9CZURlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCdUZXN0IERMUSB3aXRoIGEgcHJvdmlkZWQgbWF4UmVjZWl2ZUNvdW50JywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCB0ZXN0TWF4UmVjZWl2ZUNvdW50ID0gMzE7XG5cbiAgY29uc3QgZGxxSW50ZXJmYWNlID0gYnVpbGREZWFkTGV0dGVyUXVldWUoc3RhY2ssIHtcbiAgICBtYXhSZWNlaXZlQ291bnQ6IHRlc3RNYXhSZWNlaXZlQ291bnRcbiAgfSk7XG4gIGV4cGVjdChkbHFJbnRlcmZhY2U/Lm1heFJlY2VpdmVDb3VudCkudG9FcXVhbCh0ZXN0TWF4UmVjZWl2ZUNvdW50KTtcbn0pO1xuXG50ZXN0KCdUZXN0IHJldHVybmluZyBhbiBleGlzdGluZyBRdWV1ZScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgY29uc3QgdGVzdFF1ZXVlTmFtZSA9ICdleGlzdGluZy1xdWV1ZSc7XG5cbiAgY29uc3QgZXhpc3RpbmdRdWV1ZSA9IG5ldyBzcXMuUXVldWUoc3RhY2ssICd0ZXN0LXF1ZXVlJywge1xuICAgIHF1ZXVlTmFtZTogdGVzdFF1ZXVlTmFtZVxuICB9KTtcblxuICBjb25zdCBbcmV0dXJuZWRRdWV1ZV0gPSBkZWZhdWx0cy5idWlsZFF1ZXVlKHN0YWNrLCAnbmV3UXVldWUnLCB7XG4gICAgZXhpc3RpbmdRdWV1ZU9iajogZXhpc3RpbmdRdWV1ZVxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZShcIkFXUzo6U1FTOjpRdWV1ZVwiLCB7XG4gICAgUXVldWVOYW1lOiB0ZXN0UXVldWVOYW1lLFxuICB9KTtcbiAgZXhwZWN0KGV4aXN0aW5nUXVldWUucXVldWVOYW1lKS50b0VxdWFsKHJldHVybmVkUXVldWUucXVldWVOYW1lKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGNyZWF0aW5nIGEgcXVldWUgd2l0aCBhIERMUScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICBjb25zdCBkbHFJbnRlcmZhY2UgPSBidWlsZERlYWRMZXR0ZXJRdWV1ZShzdGFjaywge30pO1xuXG4gIGNvbnN0IFtuZXdRdWV1ZV0gPSBidWlsZFF1ZXVlKHN0YWNrLCAnbmV3LXF1ZXVlJywge1xuICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxSW50ZXJmYWNlXG4gIH0pO1xuXG4gIGV4cGVjdChzdGFjaykudG9Db3VudFJlc291cmNlcyhcIkFXUzo6U1FTOjpRdWV1ZVwiLCAyKTtcbiAgZXhwZWN0KG5ld1F1ZXVlKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QobmV3UXVldWUuZGVhZExldHRlclF1ZXVlKS50b0JlRGVmaW5lZCgpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgY3JlYXRpbmcgYSBGSUZPIHF1ZXVlJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IFtuZXdGaWZvUXVldWVdID0gYnVpbGRRdWV1ZShzdGFjaywgJ25ldy1xdWV1ZScsIHtcbiAgICBxdWV1ZVByb3BzOiB7XG4gICAgICBmaWZvOiB0cnVlXG4gICAgfVxuICB9KTtcblxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlTGlrZShcIkFXUzo6U1FTOjpRdWV1ZVwiLCB7XG4gICAgRmlmb1F1ZXVlOiB0cnVlXG4gIH0pO1xuICBleHBlY3QobmV3Rmlmb1F1ZXVlLmZpZm8pLnRvQmUodHJ1ZSk7XG59KTtcbiJdfQ==
|