Skip to content

Commit 658710d

Browse files
committed
feat(aws-lambda-secretsmanager): unit test code review fixes.
1 parent 5dff62f commit 658710d

File tree

2 files changed

+56
-224
lines changed

2 files changed

+56
-224
lines changed

Diff for: source/patterns/@aws-solutions-constructs/aws-lambda-secretsmanager/test/__snapshots__/lambda-secretsmanager.test.js.snap

-220
Original file line numberDiff line numberDiff line change
@@ -1,225 +1,5 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`Test deployment w/ existing secret 1`] = `
4-
Object {
5-
"Parameters": Object {
6-
"AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8ArtifactHash8D9AD644": Object {
7-
"Description": "Artifact hash for asset \\"0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8\\"",
8-
"Type": "String",
9-
},
10-
"AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8S3Bucket9E1964CB": Object {
11-
"Description": "S3 bucket for asset \\"0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8\\"",
12-
"Type": "String",
13-
},
14-
"AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8S3VersionKey7153CEE7": Object {
15-
"Description": "S3 key for asset version \\"0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8\\"",
16-
"Type": "String",
17-
},
18-
},
19-
"Resources": Object {
20-
"lambdatosecretsmanagerstackLambdaFunction2BCCE9C9": Object {
21-
"DependsOn": Array [
22-
"lambdatosecretsmanagerstackLambdaFunctionServiceRoleDefaultPolicy8E30EE71",
23-
"lambdatosecretsmanagerstackLambdaFunctionServiceRole035B2C55",
24-
],
25-
"Metadata": Object {
26-
"cfn_nag": Object {
27-
"rules_to_suppress": Array [
28-
Object {
29-
"id": "W58",
30-
"reason": "Lambda functions has the required permission to write CloudWatch Logs. It uses custom policy instead of arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole with tighter permissions.",
31-
},
32-
Object {
33-
"id": "W89",
34-
"reason": "This is not a rule for the general case, just for specific use cases/industries",
35-
},
36-
Object {
37-
"id": "W92",
38-
"reason": "Impossible for us to define the correct concurrency for clients",
39-
},
40-
],
41-
},
42-
},
43-
"Properties": Object {
44-
"Code": Object {
45-
"S3Bucket": Object {
46-
"Ref": "AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8S3Bucket9E1964CB",
47-
},
48-
"S3Key": Object {
49-
"Fn::Join": Array [
50-
"",
51-
Array [
52-
Object {
53-
"Fn::Select": Array [
54-
0,
55-
Object {
56-
"Fn::Split": Array [
57-
"||",
58-
Object {
59-
"Ref": "AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8S3VersionKey7153CEE7",
60-
},
61-
],
62-
},
63-
],
64-
},
65-
Object {
66-
"Fn::Select": Array [
67-
1,
68-
Object {
69-
"Fn::Split": Array [
70-
"||",
71-
Object {
72-
"Ref": "AssetParameters0c3255e93ffe7a906c7422e9f0e9cc4c7fd86ee996ee3bb302e2f134b38463c8S3VersionKey7153CEE7",
73-
},
74-
],
75-
},
76-
],
77-
},
78-
],
79-
],
80-
},
81-
},
82-
"Environment": Object {
83-
"Variables": Object {
84-
"AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1",
85-
"SECRET_NAME": Object {
86-
"Fn::Select": Array [
87-
6,
88-
Object {
89-
"Fn::Split": Array [
90-
":",
91-
Object {
92-
"Ref": "secret4DA88516",
93-
},
94-
],
95-
},
96-
],
97-
},
98-
},
99-
},
100-
"Handler": "index.handler",
101-
"Role": Object {
102-
"Fn::GetAtt": Array [
103-
"lambdatosecretsmanagerstackLambdaFunctionServiceRole035B2C55",
104-
"Arn",
105-
],
106-
},
107-
"Runtime": "nodejs10.x",
108-
"TracingConfig": Object {
109-
"Mode": "Active",
110-
},
111-
},
112-
"Type": "AWS::Lambda::Function",
113-
},
114-
"lambdatosecretsmanagerstackLambdaFunctionServiceRole035B2C55": Object {
115-
"Properties": Object {
116-
"AssumeRolePolicyDocument": Object {
117-
"Statement": Array [
118-
Object {
119-
"Action": "sts:AssumeRole",
120-
"Effect": "Allow",
121-
"Principal": Object {
122-
"Service": "lambda.amazonaws.com",
123-
},
124-
},
125-
],
126-
"Version": "2012-10-17",
127-
},
128-
"Policies": Array [
129-
Object {
130-
"PolicyDocument": Object {
131-
"Statement": Array [
132-
Object {
133-
"Action": Array [
134-
"logs:CreateLogGroup",
135-
"logs:CreateLogStream",
136-
"logs:PutLogEvents",
137-
],
138-
"Effect": "Allow",
139-
"Resource": Object {
140-
"Fn::Join": Array [
141-
"",
142-
Array [
143-
"arn:",
144-
Object {
145-
"Ref": "AWS::Partition",
146-
},
147-
":logs:",
148-
Object {
149-
"Ref": "AWS::Region",
150-
},
151-
":",
152-
Object {
153-
"Ref": "AWS::AccountId",
154-
},
155-
":log-group:/aws/lambda/*",
156-
],
157-
],
158-
},
159-
},
160-
],
161-
"Version": "2012-10-17",
162-
},
163-
"PolicyName": "LambdaFunctionServiceRolePolicy",
164-
},
165-
],
166-
},
167-
"Type": "AWS::IAM::Role",
168-
},
169-
"lambdatosecretsmanagerstackLambdaFunctionServiceRoleDefaultPolicy8E30EE71": Object {
170-
"Metadata": Object {
171-
"cfn_nag": Object {
172-
"rules_to_suppress": Array [
173-
Object {
174-
"id": "W12",
175-
"reason": "Lambda needs the following minimum required permissions to send trace data to X-Ray and access ENIs in a VPC.",
176-
},
177-
],
178-
},
179-
},
180-
"Properties": Object {
181-
"PolicyDocument": Object {
182-
"Statement": Array [
183-
Object {
184-
"Action": Array [
185-
"xray:PutTraceSegments",
186-
"xray:PutTelemetryRecords",
187-
],
188-
"Effect": "Allow",
189-
"Resource": "*",
190-
},
191-
Object {
192-
"Action": Array [
193-
"secretsmanager:GetSecretValue",
194-
"secretsmanager:DescribeSecret",
195-
],
196-
"Effect": "Allow",
197-
"Resource": Object {
198-
"Ref": "secret4DA88516",
199-
},
200-
},
201-
],
202-
"Version": "2012-10-17",
203-
},
204-
"PolicyName": "lambdatosecretsmanagerstackLambdaFunctionServiceRoleDefaultPolicy8E30EE71",
205-
"Roles": Array [
206-
Object {
207-
"Ref": "lambdatosecretsmanagerstackLambdaFunctionServiceRole035B2C55",
208-
},
209-
],
210-
},
211-
"Type": "AWS::IAM::Policy",
212-
},
213-
"secret4DA88516": Object {
214-
"Properties": Object {
215-
"GenerateSecretString": Object {},
216-
},
217-
"Type": "AWS::SecretsManager::Secret",
218-
},
219-
},
220-
}
221-
`;
222-
2233
exports[`Test minimal deployment with new Lambda function 1`] = `
2244
Object {
2255
"Parameters": Object {

Diff for: source/patterns/@aws-solutions-constructs/aws-lambda-secretsmanager/test/lambda-secretsmanager.test.ts

+56-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import * as ec2 from "@aws-cdk/aws-ec2";
1919
import { LambdaToSecretsmanager } from '../lib';
2020
import { SynthUtils } from '@aws-cdk/assert';
2121
import '@aws-cdk/assert/jest';
22+
import * as defaults from "@aws-solutions-constructs/core";
2223

2324
// --------------------------------------------------------------
2425
// Test minimal deployment with new Lambda function
@@ -67,17 +68,68 @@ test('Test deployment w/ existing secret', () => {
6768
// Stack
6869
const stack = new Stack();
6970
// Helper declaration
70-
const secret = new Secret(stack, 'secret', {});
71-
new LambdaToSecretsmanager(stack, 'lambda-to-secretsmanager-stack', {
71+
const existingSecret = new Secret(stack, 'secret', {});
72+
const pattern = new LambdaToSecretsmanager(stack, 'lambda-to-secretsmanager-stack', {
7273
lambdaFunctionProps: {
7374
runtime: lambda.Runtime.NODEJS_10_X,
7475
handler: 'index.handler',
7576
code: lambda.Code.fromAsset(`${__dirname}/lambda`)
7677
},
77-
existingSecretObj: secret
78+
existingSecretObj: existingSecret
7879
});
7980
// Assertion 1
80-
expect(SynthUtils.toCloudFormation(stack)).toMatchSnapshot();
81+
expect(stack).toHaveResource("AWS::SecretsManager::Secret", {
82+
GenerateSecretString: {},
83+
});
84+
// Assertion 2
85+
expect(pattern.secret).toBe(existingSecret);
86+
});
87+
88+
// --------------------------------------------------------------
89+
// Test deployment w/ existing function
90+
// --------------------------------------------------------------
91+
test('Test deployment w/ existing function', () => {
92+
// Stack
93+
const stack = new Stack();
94+
// Helper declaration
95+
const lambdaFunctionProps = {
96+
runtime: lambda.Runtime.NODEJS_10_X,
97+
handler: 'index.handler',
98+
code: lambda.Code.fromAsset(`${__dirname}/lambda`)
99+
};
100+
const existingFuntion = defaults.deployLambdaFunction(stack, lambdaFunctionProps);
101+
102+
const pattern = new LambdaToSecretsmanager(stack, 'lambda-to-secretsmanager-stack', {
103+
existingLambdaObj: existingFuntion
104+
});
105+
// Assertion 1
106+
expect(stack).toHaveResource("AWS::SecretsManager::Secret", {
107+
GenerateSecretString: {},
108+
});
109+
// Assertion 2
110+
expect(pattern.lambdaFunction).toBe(existingFuntion);
111+
});
112+
113+
// --------------------------------------------------------------
114+
// Test minimal deployment with write access to Secret
115+
// --------------------------------------------------------------
116+
test('Test minimal deployment write access to Secret', () => {
117+
// Stack
118+
const stack = new Stack();
119+
// Helper declaration
120+
new LambdaToSecretsmanager(stack, 'lambda-to-secretsmanager-stack', {
121+
lambdaFunctionProps: {
122+
runtime: lambda.Runtime.NODEJS_10_X,
123+
handler: 'index.handler',
124+
code: lambda.Code.fromAsset(`${__dirname}/lambda`),
125+
},
126+
grantWriteAccess: 'ReadWrite'
127+
});
128+
// Assertion 1
129+
expect(stack).toHaveResource("AWS::SecretsManager::Secret", {
130+
GenerateSecretString: {},
131+
});
132+
81133
});
82134

83135
// --------------------------------------------------------------

0 commit comments

Comments
 (0)