1
1
import { Context } from 'aws-lambda' ;
2
2
import { DynamoDBProvider } from '../../src/dynamodb' ;
3
+ import {
4
+ DynamoDBGetOptionsInterface ,
5
+ DynamoDBGetMultipleOptionsInterface ,
6
+ } from '../../src/types' ;
3
7
import { TinyLogger } from '../helpers/tinyLogger' ;
4
- // # TODO: Uncomment code below once #1222 is fixed
5
- /*
6
8
import { middleware } from '../helpers/sdkMiddlewareRequestCounter' ;
7
9
import { DynamoDBClient } from '@aws-sdk/client-dynamodb' ;
8
- */
10
+
11
+ // We use a custom logger to log pure JSON objects to stdout
12
+ const logger = new TinyLogger ( ) ;
9
13
10
14
const tableGet = process . env . TABLE_GET ?? 'my-table' ;
11
15
const tableGetMultiple = process . env . TABLE_GET_MULTIPLE ?? 'my-table' ;
@@ -15,9 +19,6 @@ const keyAttr = process.env.KEY_ATTR ?? 'id';
15
19
const sortAttr = process . env . SORT_ATTR ?? 'sk' ;
16
20
const valueAttr = process . env . VALUE_ATTR ?? 'value' ;
17
21
18
- // We use a custom logger to log pure JSON objects to stdout
19
- const logger = new TinyLogger ( ) ;
20
-
21
22
// Provider test 1, 5, 6
22
23
const providerGet = new DynamoDBProvider ( {
23
24
tableName : tableGet ,
@@ -39,163 +40,122 @@ const providerGetMultipleCustomKeys = new DynamoDBProvider({
39
40
sortAttr,
40
41
valueAttr,
41
42
} ) ;
42
- // # TODO: Uncomment code below once #1222 is fixed
43
- /*
43
+
44
44
// Provider test 8, 9
45
45
const customClient = new DynamoDBClient ( { } ) ;
46
- providerWithMiddleware .middlewareStack.use(middleware);
46
+ customClient . middlewareStack . use ( middleware ) ;
47
47
const providerWithMiddleware = new DynamoDBProvider ( {
48
- awsSdkV3Client: customClient
48
+ awsSdkV3Client : customClient ,
49
+ tableName : tableGet ,
49
50
} ) ;
50
- */
51
51
52
- export const handler = async ( _event : unknown , _context : Context ) : Promise < void > => {
53
- // Test 1 - get a single parameter with default options (keyAttr: 'id', valueAttr: 'value')
52
+ // Helper function to call get() and log the result
53
+ const _call_get = async (
54
+ paramName : string ,
55
+ testName : string ,
56
+ provider : DynamoDBProvider ,
57
+ options ?: DynamoDBGetOptionsInterface ,
58
+ ) : Promise < void > => {
54
59
try {
55
- const parameterValue = await providerGet . get ( 'my-param' ) ;
60
+ const parameterValue = await provider . get ( paramName , options ) ;
56
61
logger . log ( {
57
- test : 'get' ,
62
+ test : testName ,
58
63
value : parameterValue
59
64
} ) ;
60
65
} catch ( err ) {
61
66
logger . log ( {
62
- test : 'get' ,
67
+ test : testName ,
63
68
error : err . message
64
69
} ) ;
65
70
}
71
+ } ;
66
72
67
- // Test 2 - get multiple parameters with default options (keyAttr: 'id', sortAttr: 'sk', valueAttr: 'value')
73
+ // Helper function to call getMultiple() and log the result
74
+ const _call_get_multiple = async (
75
+ paramPath : string ,
76
+ testName : string ,
77
+ provider : DynamoDBProvider ,
78
+ options ?: DynamoDBGetMultipleOptionsInterface ,
79
+ ) : Promise < void > => {
68
80
try {
69
- const parametersValues = await providerGetMultiple . getMultiple ( 'my-params' ) ;
81
+ const parameterValues = await provider . getMultiple (
82
+ paramPath ,
83
+ options
84
+ ) ;
70
85
logger . log ( {
71
- test : 'get-multiple' ,
72
- value : parametersValues
86
+ test : testName ,
87
+ value : parameterValues
73
88
} ) ;
74
89
} catch ( err ) {
75
90
logger . log ( {
76
- test : 'get-multiple' ,
91
+ test : testName ,
77
92
error : err . message
78
93
} ) ;
79
94
}
95
+ } ;
96
+
97
+ export const handler = async ( _event : unknown , _context : Context ) : Promise < void > => {
98
+ // Test 1 - get a single parameter with default options (keyAttr: 'id', valueAttr: 'value')
99
+ await _call_get ( 'my-param' , 'get' , providerGet ) ;
100
+
101
+ // Test 2 - get multiple parameters with default options (keyAttr: 'id', sortAttr: 'sk', valueAttr: 'value')
102
+ await _call_get_multiple ( 'my-params' , 'get-multiple' , providerGetMultiple ) ;
80
103
81
104
// Test 3 - get a single parameter with custom options (keyAttr: 'key', valueAttr: 'val')
82
- try {
83
- const parameterValueCustom = await providerGetCustomKeys . get ( 'my-param' ) ;
84
- logger . log ( {
85
- test : 'get-custom' ,
86
- value : parameterValueCustom
87
- } ) ;
88
- } catch ( err ) {
89
- logger . log ( {
90
- test : 'get-custom' ,
91
- error : err . message
92
- } ) ;
93
- }
105
+ await _call_get ( 'my-param' , 'get-custom' , providerGetCustomKeys ) ;
94
106
95
107
// Test 4 - get multiple parameters with custom options (keyAttr: 'key', sortAttr: 'sort', valueAttr: 'val')
96
- try {
97
- const parametersValuesCustom = await providerGetMultipleCustomKeys . getMultiple ( 'my-params' ) ;
98
- logger . log ( {
99
- test : 'get-multiple-custom' ,
100
- value : parametersValuesCustom
101
- } ) ;
102
- } catch ( err ) {
103
- logger . log ( {
104
- test : 'get-multiple-custom' ,
105
- error : err . message
106
- } ) ;
107
- }
108
+ await _call_get_multiple ( 'my-params' , 'get-multiple-custom' , providerGetMultipleCustomKeys ) ;
108
109
109
110
// Test 5 - get a single parameter with json transform
110
- try {
111
- const parameterValueJson = await providerGet . get ( 'my-param-json' , {
112
- transform : 'json'
113
- } ) ;
114
- logger . log ( {
115
- test : 'get-json-transform' ,
116
- value : typeof parameterValueJson // should be object
117
- } ) ;
118
- } catch ( err ) {
119
- logger . log ( {
120
- test : 'get-json-transform' ,
121
- error : err . message
122
- } ) ;
123
- }
111
+ await _call_get ( 'my-param-json' , 'get-json-transform' , providerGet , {
112
+ transform : 'json'
113
+ } ) ;
124
114
125
115
// Test 6 - get a single parameter with binary transform
126
- try {
127
- const parameterValueBinary = await providerGet . get ( 'my-param-binary' , {
128
- transform : 'binary'
129
- } ) ;
130
- logger . log ( {
131
- test : 'get-binary-transform' ,
132
- value : typeof parameterValueBinary // should be string
133
- } ) ;
134
- } catch ( err ) {
135
- logger . log ( {
136
- test : 'get-binary-transform' ,
137
- error : err . message
138
- } ) ;
139
- }
116
+ await _call_get ( 'my-param-binary' , 'get-binary-transform' , providerGet , {
117
+ transform : 'binary'
118
+ } ) ;
140
119
141
120
// Test 7 - get multiple parameters with auto transform
142
- try {
143
- const parametersValuesAuto = await providerGetMultiple . getMultiple ( 'my-encoded-params' , {
144
- transform : 'auto'
145
- } ) ;
146
- if ( ! parametersValuesAuto ) throw new Error ( 'parametersValuesAuto is undefined' ) ;
147
-
148
- logger . log ( {
149
- test : 'get-multiple-auto-transform' ,
150
- value :
151
- `${ typeof parametersValuesAuto [ 'config.json' ] } ,${ typeof parametersValuesAuto [ 'key.binary' ] } ` // should be object,string
152
- } ) ;
153
- } catch ( err ) {
154
- logger . log ( {
155
- test : 'get-multiple-auto-transform' ,
156
- error : err . message
157
- } ) ;
158
- }
121
+ await _call_get_multiple ( 'my-encoded-params' , 'get-multiple-auto-transform' , providerGetMultiple , {
122
+ transform : 'auto'
123
+ } ) ;
159
124
160
- // # TODO: Uncomment code below once #1222 is fixed
161
- /**
162
- * Test 8 - get a parameter twice, second time should be cached
163
- *
164
- * Should only make 1 request, we use middleware to count requests
165
- */
166
- /*
125
+ // Test 8
126
+ // get parameter twice with middleware, which counts the number of requests, we check later if we only called DynamoDB once
167
127
try {
128
+ providerWithMiddleware . clearCache ( ) ;
129
+ middleware . counter = 0 ;
168
130
await providerWithMiddleware . get ( 'my-param' ) ;
169
131
await providerWithMiddleware . get ( 'my-param' ) ;
170
132
logger . log ( {
171
- test: 'get-cache-request-count ',
172
- value: middleware.requestCount
133
+ test : 'get-cached ' ,
134
+ value : middleware . counter // should be 1
173
135
} ) ;
174
136
} catch ( err ) {
175
137
logger . log ( {
176
- test: 'get-cache-request-count ',
138
+ test : 'get-cached ' ,
177
139
error : err . message
178
140
} ) ;
179
141
}
180
- */
181
142
182
- /**
183
- * Test 9 - get a parameter once more but with forceFetch = true
184
- *
185
- * Request count should increase to 2, we use middleware to count requests
186
- */
187
- /*
143
+ // Test 9
144
+ // get parameter twice, but force fetch 2nd time, we count number of SDK requests and check that we made two API calls
188
145
try {
146
+ providerWithMiddleware . clearCache ( ) ;
147
+ middleware . counter = 0 ;
148
+ await providerWithMiddleware . get ( 'my-param' ) ;
189
149
await providerWithMiddleware . get ( 'my-param' , { forceFetch : true } ) ;
190
150
logger . log ( {
191
- test: 'get-force-fetch-request-count ',
192
- value: middleware.requestCount
151
+ test : 'get-forced ' ,
152
+ value : middleware . counter // should be 2
193
153
} ) ;
194
154
} catch ( err ) {
195
155
logger . log ( {
196
- test: 'get-force-fetch-request-count ',
156
+ test : 'get-forced ' ,
197
157
error : err . message
198
158
} ) ;
199
159
}
200
- */
160
+
201
161
} ;
0 commit comments