@@ -8,7 +8,7 @@ module BatchWriteItemTransformTest {
88 import opened DynamoDbEncryptionTransforms
99 import opened TestFixtures
1010 import DDB = ComAmazonawsDynamodbTypes
11- import AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
11+ import TTypes = AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes
1212
1313 method {:test} TestBatchWriteItemInputTransform () {
1414 var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
@@ -25,7 +25,7 @@ module BatchWriteItemTransformTest {
2525 ReturnItemCollectionMetrics := None
2626 );
2727 var transformed := middlewareUnderTest. BatchWriteItemInputTransform (
28- AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes .BatchWriteItemInputTransformInput(
28+ TTypes .BatchWriteItemInputTransformInput(
2929 sdkInput := input
3030 )
3131 );
@@ -34,6 +34,35 @@ module BatchWriteItemTransformTest {
3434 expect_equal ("BatchWriteItemInput", transformed.value.transformedInput, input);
3535 }
3636
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+
3766 method {:test} TestBatchWriteItemOutputTransform () {
3867 var middlewareUnderTest := TestFixtures. GetDynamoDbEncryptionTransforms ();
3968 var output := DDB. BatchWriteItemOutput (
@@ -55,7 +84,7 @@ module BatchWriteItemTransformTest {
5584 ReturnItemCollectionMetrics := None
5685 );
5786 var transformed := middlewareUnderTest. BatchWriteItemOutputTransform (
58- AwsCryptographyDbEncryptionSdkDynamoDbTransformsTypes .BatchWriteItemOutputTransformInput(
87+ TTypes .BatchWriteItemOutputTransformInput(
5988 sdkOutput := output,
6089 originalInput := input
6190 )
@@ -65,4 +94,175 @@ module BatchWriteItemTransformTest {
6594 expect_equal ("BatchWriteItemOutput", transformed.value.transformedOutput, output);
6695 }
6796
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+ }
68268}
0 commit comments