@@ -8,7 +8,7 @@ module BatchWriteItemTransformTest {
8
8
import opened DynamoDbEncryptionTransforms
9
9
import opened TestFixtures
10
10
import DDB = ComAmazonawsDynamodbTypes
11
- import AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
11
+ import TTypes = AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
12
12
13
13
method {:test} TestBatchWriteItemInputTransform () {
14
14
var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
@@ -25,7 +25,7 @@ module BatchWriteItemTransformTest {
25
25
ReturnItemCollectionMetrics := None
26
26
);
27
27
var transformed := middlewareUnderTest. BatchWriteItemInputTransform (
28
- AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes .BatchWriteItemInputTransformInput(
28
+ TTypes .BatchWriteItemInputTransformInput(
29
29
sdkInput := input
30
30
)
31
31
);
@@ -34,6 +34,35 @@ module BatchWriteItemTransformTest {
34
34
expect_equal ("BatchWriteItemInput", transformed.value.transformedInput, input);
35
35
}
36
36
37
+
38
+ const Item1 : DDB. AttributeMap := map [
39
+ "bar" := DDB. AttributeValue. S ("bar1"),
40
+ "sign" := DDB. AttributeValue. S ("sign1"),
41
+ "encrypt" := DDB. AttributeValue. S ("encrypt1"),
42
+ "plain" := DDB. AttributeValue. S ("plain1")
43
+ ]
44
+
45
+ const Item2 : DDB. AttributeMap := map [
46
+ "bar" := DDB. AttributeValue. S ("bar2"),
47
+ "sign" := DDB. AttributeValue. S ("sign2"),
48
+ "encrypt" := DDB. AttributeValue. S ("encrypt2"),
49
+ "plain" := DDB. AttributeValue. S ("plain2")
50
+ ]
51
+
52
+ const Item3 : DDB. AttributeMap := map [
53
+ "bar" := DDB. AttributeValue. S ("bar3"),
54
+ "sign" := DDB. AttributeValue. S ("sign3"),
55
+ "encrypt" := DDB. AttributeValue. S ("encrypt3"),
56
+ "plain" := DDB. AttributeValue. S ("plain3")
57
+ ]
58
+
59
+ const Item4 : DDB. AttributeMap := map [
60
+ "bar" := DDB. AttributeValue. S ("bar4"),
61
+ "sign" := DDB. AttributeValue. S ("sign4"),
62
+ "encrypt" := DDB. AttributeValue. S ("encrypt4"),
63
+ "plain" := DDB. AttributeValue. S ("plain4")
64
+ ]
65
+
37
66
method {:test} TestBatchWriteItemOutputTransform () {
38
67
var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
39
68
var output := DDB. BatchWriteItemOutput (
@@ -55,7 +84,7 @@ module BatchWriteItemTransformTest {
55
84
ReturnItemCollectionMetrics := None
56
85
);
57
86
var transformed := middlewareUnderTest. BatchWriteItemOutputTransform (
58
- AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes .BatchWriteItemOutputTransformInput(
87
+ TTypes .BatchWriteItemOutputTransformInput(
59
88
sdkOutput := output,
60
89
originalInput := input
61
90
)
@@ -65,4 +94,175 @@ module BatchWriteItemTransformTest {
65
94
expect_equal ("BatchWriteItemOutput", transformed.value.transformedOutput, output);
66
95
}
67
96
97
+ function method MakePut (item : DDB .AttributeMap) : DDB. WriteRequest
98
+ {
99
+ DDB. WriteRequest ( DeleteRequest := None, PutRequest := Some(DDB.PutRequest(Item := item)))
100
+ }
101
+
102
+ // = specification/dynamodb-encryption-client/ddb-sdk-integration.md#decrypt-after-batchwriteitem
103
+ // = type=test
104
+ // # Each item in UnprocessedItems MUST be replaced by its original plaintext value.
105
+ method {:test} TestBatchWriteItemOutputTransformUnprocessed () {
106
+ var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
107
+ var tableName := GetTableName ("foo");
108
+
109
+ var theRequests := GetBatchWriteItemRequestMap (map[tableName := [MakePut(Item1), MakePut (Item2), MakePut (Item3), MakePut (Item4)]]);
110
+
111
+ var input := DDB. BatchWriteItemInput (
112
+ RequestItems := theRequests
113
+ );
114
+ var transInput :- expect middlewareUnderTest. BatchWriteItemInputTransform (
115
+ TTypes.BatchWriteItemInputTransformInput(
116
+ sdkInput := input
117
+ )
118
+ );
119
+
120
+ var unProcessed : DDB. BatchWriteItemRequestMap := transInput. transformedInput. RequestItems;
121
+ expect unProcessed != input. RequestItems;
122
+ var output := DDB. BatchWriteItemOutput (
123
+ UnprocessedItems := Some(unProcessed)
124
+ );
125
+
126
+ var transOutput :- expect middlewareUnderTest. BatchWriteItemOutputTransform (
127
+ TTypes.BatchWriteItemOutputTransformInput(
128
+ sdkOutput := output,
129
+ originalInput := input
130
+ )
131
+ );
132
+
133
+ expect_equal ("BatchWriteOutput", transOutput.transformedOutput.UnprocessedItems, Some(theRequests));
134
+ }
135
+
136
+ method {:test} TestBatchWriteItemOutputTransformUnprocessed2 () {
137
+ var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
138
+ var tableName1 := GetTableName ("foo");
139
+ var tableName2 := GetTableName ("baz");
140
+
141
+ var theRequests := GetBatchWriteItemRequestMap (map[tableName1 := [MakePut(Item1), MakePut (Item2)], tableName2 := [MakePut (Item3), MakePut (Item4)]]);
142
+
143
+ var input := DDB. BatchWriteItemInput (
144
+ RequestItems := theRequests
145
+ );
146
+ var transInput :- expect middlewareUnderTest. BatchWriteItemInputTransform (
147
+ TTypes.BatchWriteItemInputTransformInput(
148
+ sdkInput := input
149
+ )
150
+ );
151
+
152
+ var unProcessed : DDB. BatchWriteItemRequestMap := transInput. transformedInput. RequestItems;
153
+ expect unProcessed != input. RequestItems;
154
+ var output := DDB. BatchWriteItemOutput (
155
+ UnprocessedItems := Some(unProcessed)
156
+ );
157
+
158
+ var transOutput :- expect middlewareUnderTest. BatchWriteItemOutputTransform (
159
+ TTypes.BatchWriteItemOutputTransformInput(
160
+ sdkOutput := output,
161
+ originalInput := input
162
+ )
163
+ );
164
+
165
+ expect_equal ("BatchWriteOutput", transOutput.transformedOutput.UnprocessedItems, Some(theRequests));
166
+ }
167
+
168
+ method {:test} {:vcs_split_on_every_assert} TestBatchWriteItemOutputTransformUnprocessed3 () {
169
+ var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
170
+ var tableName1 := GetTableName ("foo");
171
+ var tableName2 := GetTableName ("baz");
172
+
173
+ var theRequests := GetBatchWriteItemRequestMap (map[tableName1 := [MakePut(Item1), MakePut (Item2)], tableName2 := [MakePut (Item3), MakePut (Item4)]]);
174
+
175
+ var input := DDB. BatchWriteItemInput (
176
+ RequestItems := theRequests
177
+ );
178
+ var transInput :- expect middlewareUnderTest. BatchWriteItemInputTransform (
179
+ TTypes.BatchWriteItemInputTransformInput(
180
+ sdkInput := input
181
+ )
182
+ );
183
+
184
+ expect tableName1 in transInput. transformedInput. RequestItems;
185
+ expect tableName2 in transInput. transformedInput. RequestItems;
186
+
187
+ var list := map [
188
+ tableName1 := transInput. transformedInput. RequestItems[tableName1][0.. 1],
189
+ tableName2 := transInput. transformedInput. RequestItems[tableName2][0.. 1]
190
+ ];
191
+ expect DDB. IsValid_BatchWriteItemRequestMap (list);
192
+ var unProcessed : DDB. BatchWriteItemRequestMap := list;
193
+
194
+ var orig_list := map [
195
+ tableName1 := [MakePut (Item1)],
196
+ tableName2 := [MakePut (Item3)]
197
+ ];
198
+ expect DDB. IsValid_BatchWriteItemRequestMap (orig_list);
199
+ var originalUnProcessed : DDB. BatchWriteItemRequestMap := orig_list;
200
+
201
+ expect unProcessed != input. RequestItems;
202
+ var output := DDB. BatchWriteItemOutput (
203
+ UnprocessedItems := Some(unProcessed)
204
+ );
205
+
206
+ var transOutput :- expect middlewareUnderTest. BatchWriteItemOutputTransform (
207
+ TTypes.BatchWriteItemOutputTransformInput(
208
+ sdkOutput := output,
209
+ originalInput := input
210
+ )
211
+ );
212
+
213
+ expect_equal ("BatchWriteOutput", transOutput.transformedOutput.UnprocessedItems, Some(originalUnProcessed));
214
+ }
215
+
216
+ const Item1a : DDB. AttributeMap := map [
217
+ "bar" := DDB. AttributeValue. S ("bar1"),
218
+ "sign" := DDB. AttributeValue. S ("sign2"),
219
+ "encrypt" := DDB. AttributeValue. S ("encrypt2"),
220
+ "plain" := DDB. AttributeValue. S ("plain2")
221
+ ]
222
+
223
+ const Item1b : DDB. AttributeMap := map [
224
+ "bar" := DDB. AttributeValue. S ("bar1"),
225
+ "sign" := DDB. AttributeValue. S ("sign3"),
226
+ "encrypt" := DDB. AttributeValue. S ("encrypt3"),
227
+ "plain" := DDB. AttributeValue. S ("plain3")
228
+ ]
229
+
230
+ const Item1c : DDB. AttributeMap := map [
231
+ "bar" := DDB. AttributeValue. S ("bar1"),
232
+ "sign" := DDB. AttributeValue. S ("sign4"),
233
+ "encrypt" := DDB. AttributeValue. S ("encrypt4"),
234
+ "plain" := DDB. AttributeValue. S ("plain4")
235
+ ]
236
+
237
+ method {:test} TestBatchWriteItemOutputTransformUnprocessed4 () {
238
+ var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms2 ();
239
+ var tableName1 := GetTableName ("foo");
240
+ var tableName2 := GetTableName ("baz");
241
+
242
+ var theRequests := GetBatchWriteItemRequestMap (map[tableName1 := [MakePut(Item1), MakePut (Item1a)], tableName2 := [MakePut (Item1b), MakePut (Item1c)]]);
243
+
244
+ var input := DDB. BatchWriteItemInput (
245
+ RequestItems := theRequests
246
+ );
247
+ var transInput :- expect middlewareUnderTest. BatchWriteItemInputTransform (
248
+ TTypes.BatchWriteItemInputTransformInput(
249
+ sdkInput := input
250
+ )
251
+ );
252
+
253
+ var unProcessed : DDB. BatchWriteItemRequestMap := transInput. transformedInput. RequestItems;
254
+ expect unProcessed != input. RequestItems;
255
+ var output := DDB. BatchWriteItemOutput (
256
+ UnprocessedItems := Some(unProcessed)
257
+ );
258
+
259
+ var transOutput :- expect middlewareUnderTest. BatchWriteItemOutputTransform (
260
+ TTypes.BatchWriteItemOutputTransformInput(
261
+ sdkOutput := output,
262
+ originalInput := input
263
+ )
264
+ );
265
+
266
+ expect_equal ("BatchWriteOutput", transOutput.transformedOutput.UnprocessedItems, Some(theRequests));
267
+ }
68
268
}
0 commit comments