Skip to content

Commit e1318c8

Browse files
committed
tests: SSMProvider class usage
1 parent 107a06c commit e1318c8

7 files changed

+556
-26
lines changed

packages/parameters/src/ssm/SSMProvider.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,12 @@ class SSMProvider extends BaseProvider {
144144
options?: SSMGetOptionsInterface
145145
): Promise<string | undefined> {
146146
const sdkOptions: GetParameterCommandInput = {
147+
...(options?.sdkOptions || {}),
147148
Name: name,
148149
};
149150
if (options) {
150-
if (options.hasOwnProperty('decrypt')) sdkOptions.WithDecryption = options.decrypt;
151-
if (options.hasOwnProperty('sdkOptions')) {
152-
Object.assign(sdkOptions, options.sdkOptions);
153-
}
151+
if (options.hasOwnProperty('decrypt'))
152+
sdkOptions.WithDecryption = options.decrypt;
154153
}
155154
const result = await this.client.send(new GetParameterCommand(sdkOptions));
156155

@@ -162,19 +161,19 @@ class SSMProvider extends BaseProvider {
162161
options?: SSMGetMultipleOptionsInterface
163162
): Promise<Record<string, string | undefined>> {
164163
const sdkOptions: GetParametersByPathCommandInput = {
164+
...(options?.sdkOptions || {}),
165165
Path: path,
166166
};
167167
const paginationOptions: PaginationConfiguration = {
168168
client: this.client
169169
};
170170
if (options) {
171-
if (options.hasOwnProperty('decrypt')) sdkOptions.WithDecryption = options.decrypt;
172-
if (options.hasOwnProperty('recursive')) sdkOptions.Recursive = options.recursive;
173-
if (options.hasOwnProperty('sdkOptions')) {
174-
Object.assign(sdkOptions, options.sdkOptions);
175-
if (sdkOptions.MaxResults) {
176-
paginationOptions.pageSize = sdkOptions.MaxResults;
177-
}
171+
if (options.hasOwnProperty('decrypt'))
172+
sdkOptions.WithDecryption = options.decrypt;
173+
if (options.hasOwnProperty('recursive'))
174+
sdkOptions.Recursive = options.recursive;
175+
if (sdkOptions.MaxResults) {
176+
paginationOptions.pageSize = sdkOptions.MaxResults;
178177
}
179178
}
180179

packages/parameters/tests/e2e/dynamoDBProvider.class.test.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
* @group e2e/parameters/dynamodb/class
55
*/
66
import path from 'path';
7-
import { Tracing } from 'aws-cdk-lib/aws-lambda';
87
import { AttributeType } from 'aws-cdk-lib/aws-dynamodb';
98
import { App, Stack, Aspects } from 'aws-cdk-lib';
109
import { DynamoDBClient, PutItemCommand } from '@aws-sdk/client-dynamodb';
@@ -138,10 +137,9 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () =
138137
// Create a stack with a Lambda function
139138
stack = createStackWithLambdaFunction({
140139
app: integTestApp,
141-
stackName: stackName,
142-
functionName: functionName,
140+
stackName,
141+
functionName,
143142
functionEntry: path.join(__dirname, lambdaFunctionCodeFile),
144-
tracing: Tracing.ACTIVE,
145143
environment: {
146144
UUID: uuid,
147145

@@ -154,7 +152,7 @@ describe(`parameters E2E tests (dynamoDBProvider) for runtime: ${runtime}`, () =
154152
SORT_ATTR: sortAttr,
155153
VALUE_ATTR: valueAttr,
156154
},
157-
runtime: runtime,
155+
runtime,
158156
});
159157

160158
// Create the DynamoDB tables
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
import { Context } from 'aws-lambda';
2+
import { SSMProvider } from '../../src/ssm';
3+
import { TinyLogger } from '../helpers/tinyLogger';
4+
// # TODO: Uncomment code below once #1222 is fixed
5+
/*
6+
import { middleware } from '../helpers/sdkMiddlewareRequestCounter';
7+
import { SSMClient } from '@aws-sdk/client-ssm';
8+
*/
9+
10+
const paramA = process.env.PARAM_A ?? 'my-param';
11+
const paramB = process.env.PARAM_B ?? 'my-param';
12+
const paramEncryptedA = process.env.PARAM_ENCRYPTED_A ?? 'my-encrypted-param';
13+
const paramEncryptedB = process.env.PARAM_ENCRYPTED_B ?? 'my-encrypted-param';
14+
15+
// We use a custom logger to log pure JSON objects to stdout
16+
const logger = new TinyLogger();
17+
18+
// Provider test 1
19+
const providerGet = new SSMProvider();
20+
21+
export const handler = async (_event: unknown, _context: Context): Promise<void> => {
22+
// Test 1 - get a single parameter with default options
23+
try {
24+
const parameterValue = await providerGet.get(paramA);
25+
logger.log({
26+
test: 'get',
27+
value: parameterValue
28+
});
29+
} catch (err) {
30+
logger.log({
31+
test: 'get',
32+
error: err.message
33+
});
34+
}
35+
36+
// Test 2 - get a single parameter with decrypt
37+
try {
38+
const parameterValue = await providerGet.get(paramEncryptedA, { decrypt: true });
39+
logger.log({
40+
test: 'get-decrypt',
41+
value: parameterValue
42+
});
43+
} catch (err) {
44+
logger.log({
45+
test: 'get-decrypt',
46+
error: err.message
47+
});
48+
}
49+
50+
// Test 3 - get multiple parameters with default options
51+
try {
52+
// Get path (/param/get)
53+
const parameterPath = paramA.substring(0, paramA.lastIndexOf('/'));
54+
const parameterValues = await providerGet.getMultiple(parameterPath);
55+
logger.log({
56+
test: 'get-multiple',
57+
value: parameterValues
58+
});
59+
} catch (err) {
60+
logger.log({
61+
test: 'get-multiple',
62+
error: err.message
63+
});
64+
}
65+
66+
// Test 4 - get multiple parameters with recursive (aka. get all parameters under a path recursively)
67+
try {
68+
// Get parameters root (i.e. from /param/get/a & /param/get/b to /param)
69+
const parameterRoot = paramA.substring(
70+
0,
71+
paramA.substring(1, paramA.length).indexOf('/') + 1
72+
);
73+
const parameterValues = await providerGet.getMultiple(parameterRoot, { recursive: true });
74+
logger.log({
75+
test: 'get-multiple-recursive',
76+
value: parameterValues
77+
});
78+
} catch (err) {
79+
logger.log({
80+
test: 'get-multiple-recursive',
81+
error: err.message
82+
});
83+
}
84+
85+
// Test 5 - get multiple parameters with decrypt
86+
try {
87+
// Get parameters path (i.e. from /param/get/a & /param/get/b to /param/get)
88+
const parameterPath = paramEncryptedA.substring(0, paramEncryptedA.lastIndexOf('/'));
89+
const parameterValues = await providerGet.getMultiple(parameterPath, { decrypt: true });
90+
logger.log({
91+
test: 'get-multiple-decrypt',
92+
value: parameterValues
93+
});
94+
} catch (err) {
95+
logger.log({
96+
test: 'get-multiple-decrypt',
97+
error: err.message
98+
});
99+
}
100+
101+
// Test 6 - get multiple parameters by name with default options
102+
try {
103+
const parameterValues = await providerGet.getParametersByName({
104+
[paramA]: {},
105+
[paramB]: {},
106+
});
107+
logger.log({
108+
test: 'get-multiple-by-name',
109+
value: parameterValues
110+
});
111+
} catch (err) {
112+
logger.log({
113+
test: 'get-multiple-by-name',
114+
error: err.message
115+
});
116+
}
117+
118+
// Test 7 - get multiple parameters by name with mixed decrypt
119+
try {
120+
const parameterValues = await providerGet.getParametersByName({
121+
[paramA]: {},
122+
[paramEncryptedA]: { decrypt: true },
123+
[paramEncryptedB]: { decrypt: true },
124+
});
125+
logger.log({
126+
test: 'get-multiple-by-name-mixed-decrypt',
127+
value: parameterValues
128+
});
129+
} catch (err) {
130+
logger.log({
131+
test: 'get-multiple-by-name-mixed-decrypt',
132+
error: err.message
133+
});
134+
}
135+
};

0 commit comments

Comments
 (0)