Skip to content

Commit d09cd16

Browse files
chore: add multi order test (#2170)
1 parent 6f5e58e commit d09cd16

12 files changed

Lines changed: 742 additions & 2 deletions

File tree

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
{
2+
"TableName": [
3+
{
4+
"hashKey": {
5+
"N": "5"
6+
},
7+
"intSet": {
8+
"B": "hSyNrutzz/66hy7Aop/U9tubCBYJkStxMs/p/3kNmgZg1i9S4SpyoDQqIgzrAqESJ9swarmKNk7PAdm+DWTLmQ=="
9+
},
10+
"doubleSet": {
11+
"B": "kha4s0Orm/nlE1Q6YzvHZk+YhU5QVarJLDnmW2Glak6vmqi03wX5X/pQyNKWrHTGPeDsrx5jvdKwYghgVqncCg=="
12+
},
13+
"intValue": {
14+
"B": "uPS1BBRz8jbWjN6OWvS0KqkzwzK6mBevD2XKQLMhTRA="
15+
},
16+
"stringSet": {
17+
"B": "/OCTLd5eHaLdcgGNKwY5FXiPPEHaOB71Izt7UH6E/IesOWJ4ye39UV00g4K84xbIVBVT3Y5aXM0KW1/hSYEeIg=="
18+
},
19+
"doubleValue": {
20+
"B": "6MibXf75M2xe/DeX5io6BUNGiP052GJhcEJ91n2i7rU="
21+
},
22+
"version": {
23+
"N": "0"
24+
},
25+
"*amzn-ddb-map-sig*": {
26+
"B": "qON5xK4vsIAEa43E2Il/GgARq3DdKMSOAnLCbl/nEL0="
27+
},
28+
"rangeKey": {
29+
"N": "7"
30+
},
31+
"stringValue": {
32+
"B": "WZRiC0H9mHHZsv81uSB3Qw27nF/Iflf+2QwRcDjRAx5xcWhiUbSTr5mYrp5038yY"
33+
},
34+
"*amzn-ddb-map-desc*": {
35+
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
36+
},
37+
"byteArrayValue": {
38+
"B": "0mFT71NFB/YEZdVA9H0lKhI86Djiy7sezbFFcZ7ua3U="
39+
},
40+
"complexValue": {
41+
"B": "wBFWEy3Ao2nhzCxxCLNdY1T5Gbqk5HM8I47r/8sz8zoVtfZaPYvi1wUFjEeIe4isMfCCmvvdBT0GSFCOB/0yCmmcPx0rINxsj5vLcJBQdXc="
42+
}
43+
},
44+
{
45+
"hashKey": {
46+
"N": "8"
47+
},
48+
"intSet": {
49+
"NS": ["0", "1", "10", "15", "200"]
50+
},
51+
"doubleSet": {
52+
"NS": ["-34.2", "-3", "0", "7.6", "15"]
53+
},
54+
"intValue": {
55+
"N": "123"
56+
},
57+
"stringSet": {
58+
"SS": ["?", "Cruel", "Goodbye", "World"]
59+
},
60+
"doubleValue": {
61+
"N": "15"
62+
},
63+
"version": {
64+
"N": "0"
65+
},
66+
"*amzn-ddb-map-sig*": {
67+
"B": "xBoeUzfWxAsm641nvqJhS7tAaILav/LvusuY39mNYYI="
68+
},
69+
"rangeKey": {
70+
"N": "10"
71+
},
72+
"stringValue": {
73+
"S": "Hello world!"
74+
},
75+
"*amzn-ddb-map-desc*": {
76+
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
77+
},
78+
"byteArrayValue": {
79+
"B": "AAECAwQF"
80+
},
81+
"complexValue": {
82+
"L": [
83+
{
84+
"M": {
85+
"tags": {
86+
"SS": ["apple", "banana", "cherry"]
87+
}
88+
}
89+
}
90+
]
91+
}
92+
},
93+
{
94+
"rangeKey": {
95+
"N": "9"
96+
},
97+
"hashKey": {
98+
"N": "7"
99+
},
100+
"stringValue": {
101+
"S": "Hello world!"
102+
},
103+
"intSet": {
104+
"NS": ["0", "1", "10", "15", "200"]
105+
},
106+
"doubleSet": {
107+
"NS": ["-34.2", "-3", "0", "7.6", "15"]
108+
},
109+
"byteArrayValue": {
110+
"B": "AAECAwQF"
111+
},
112+
"complexValue": {
113+
"L": [
114+
{
115+
"M": {
116+
"tags": {
117+
"SS": ["apple", "banana", "cherry"]
118+
}
119+
}
120+
}
121+
]
122+
},
123+
"intValue": {
124+
"N": "123"
125+
},
126+
"stringSet": {
127+
"SS": ["?", "Cruel", "Goodbye", "World"]
128+
},
129+
"doubleValue": {
130+
"N": "15"
131+
},
132+
"version": {
133+
"N": "0"
134+
}
135+
},
136+
{
137+
"hashKey": {
138+
"N": "6"
139+
},
140+
"intSet": {
141+
"B": "HuutO2N8WwV9l6RQzHYjIgNgcEiIHRQylrvtUV065HObddI5sQXv5AtXWt/MZDZ048yVApCeZDrOzp6peStbiQ=="
142+
},
143+
"doubleSet": {
144+
"NS": ["-34.2", "-3", "0", "7.6", "15"]
145+
},
146+
"intValue": {
147+
"N": "123"
148+
},
149+
"stringSet": {
150+
"B": "GTfT29jFZLl/yWG+617V+4UHP6zWkMM1YemGOUzrQrmd9TtFSlFPDmdaKmfCO5u0f0o4hic6IRNagl6RUVujRw=="
151+
},
152+
"doubleValue": {
153+
"N": "15"
154+
},
155+
"version": {
156+
"N": "0"
157+
},
158+
"*amzn-ddb-map-sig*": {
159+
"B": "ChQhebhKmivOac3FvVonKiXShL3iixjAIKi8veZa+Jo="
160+
},
161+
"rangeKey": {
162+
"N": "8"
163+
},
164+
"stringValue": {
165+
"S": "Hello world!"
166+
},
167+
"*amzn-ddb-map-desc*": {
168+
"B": "AAAAAAAAABVhbXpuLWRkYi1tYXAtc3ltLW1vZGUAAAARL0NCQy9QS0NTNVBhZGRpbmc="
169+
},
170+
"byteArrayValue": {
171+
"B": "cLy/3hMrfSkRmGkhXD4aYC7j5cFlfca//k5gwaUilew="
172+
},
173+
"complexValue": {
174+
"B": "SwP4pvB4goUzz891QwzMmzFhwnUYvxZzQBGlMUNYmciydYrpmBC8zLOOsVW8r34vIWk76pliPuM53F7MFhnusKAR3rLHBsUCvNzjhOC6JBQ="
175+
}
176+
}
177+
]
178+
}

DynamoDbEncryption/runtimes/java/src/test/resources/vectors/encrypted_item/scenarios.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,17 @@
378378
"plaintext": "file://plaintext.json",
379379
"ciphertext": "file://ciphertext/java/wrapped-rsa-hmac-1.json",
380380
"network": false
381+
},
382+
{
383+
"version": "v1_complex",
384+
"provider": "static",
385+
"keys": {
386+
"decrypt": "aesKey",
387+
"verify": "hmacKey"
388+
},
389+
"plaintext": "file://plaintext.json",
390+
"ciphertext": "file://ciphertext/java/static-aes-hmac-complex-1.json",
391+
"network": false
381392
}
382393
]
383394
}

DynamoDbEncryption/runtimes/java/src/test/sdkv1/com/amazonaws/services/dynamodbv2/datamodeling/LegacyTestVectors.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.lang.reflect.InvocationTargetException;
1212
import java.nio.ByteBuffer;
1313
import java.util.HashMap;
14+
import java.util.List;
1415
import java.util.Map;
1516
import java.util.stream.Collectors;
1617
import software.amazon.awssdk.core.SdkBytes;
@@ -279,6 +280,10 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
279280
attributeActionsOnEncrypt.put("version", CryptoAction.SIGN_ONLY);
280281
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.SIGN_ONLY);
281282
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.SIGN_ONLY);
283+
attributeActionsOnEncrypt.put(
284+
"complexValue",
285+
CryptoAction.ENCRYPT_AND_SIGN
286+
);
282287
} else if (value instanceof SignOnly) {
283288
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
284289
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
@@ -290,6 +295,7 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
290295
attributeActionsOnEncrypt.put("version", CryptoAction.SIGN_ONLY);
291296
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.SIGN_ONLY);
292297
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.SIGN_ONLY);
298+
attributeActionsOnEncrypt.put("complexValue", CryptoAction.SIGN_ONLY);
293299
} else if (value instanceof Untouched) {
294300
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
295301
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
@@ -301,6 +307,7 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
301307
attributeActionsOnEncrypt.put("version", CryptoAction.DO_NOTHING);
302308
attributeActionsOnEncrypt.put("doubleValue", CryptoAction.DO_NOTHING);
303309
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.DO_NOTHING);
310+
attributeActionsOnEncrypt.put("complexValue", CryptoAction.DO_NOTHING);
304311
} else if (value instanceof BaseClass) {
305312
// This is a BaseClass
306313
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
@@ -322,6 +329,10 @@ public static HashMap<String, CryptoAction> ActionsFromClass(
322329
CryptoAction.ENCRYPT_AND_SIGN
323330
);
324331
attributeActionsOnEncrypt.put("doubleSet", CryptoAction.ENCRYPT_AND_SIGN);
332+
attributeActionsOnEncrypt.put(
333+
"complexValue",
334+
CryptoAction.ENCRYPT_AND_SIGN
335+
);
325336
} else if (value instanceof KeysOnly) {
326337
attributeActionsOnEncrypt.put(HASH_KEY, CryptoAction.SIGN_ONLY);
327338
attributeActionsOnEncrypt.put(RANGE_KEY, CryptoAction.SIGN_ONLY);
@@ -393,6 +404,21 @@ public static BaseClass attributeMapToBaseClass(
393404
.collect(Collectors.toSet())
394405
);
395406
}
407+
if (attributeMap.containsKey("complexValue")) {
408+
java.util.List<java.util.Map<String, java.util.Set<String>>> complex =
409+
attributeMap
410+
.get("complexValue")
411+
.l()
412+
.stream()
413+
.map(av -> {
414+
java.util.Map<String, java.util.Set<String>> m =
415+
new java.util.HashMap<>();
416+
av.m().forEach((k, v) -> m.put(k, new java.util.HashSet<>(v.ss())));
417+
return m;
418+
})
419+
.collect(java.util.stream.Collectors.toList());
420+
value.setComplexValue(complex);
421+
}
396422

397423
return value;
398424
}
@@ -435,6 +461,18 @@ public static Map<String, AttributeValue> baseClassToV1AttrMap(
435461
.collect(java.util.stream.Collectors.toList())
436462
)
437463
);
464+
if (obj.getComplexValue() != null) {
465+
java.util.List<AttributeValue> listItems = obj
466+
.getComplexValue()
467+
.stream()
468+
.map(m -> {
469+
Map<String, AttributeValue> avMap = new HashMap<>();
470+
m.forEach((k, v) -> avMap.put(k, new AttributeValue().withSS(v)));
471+
return new AttributeValue().withM(avMap);
472+
})
473+
.collect(java.util.stream.Collectors.toList());
474+
map.put("complexValue", new AttributeValue().withL(listItems));
475+
}
438476
return map;
439477
}
440478

@@ -531,6 +569,40 @@ > baseClassToAttributeMap(Object TEST_VALUE) {
531569
)
532570
.build()
533571
);
572+
if (((BaseClass) TEST_VALUE).getComplexValue() != null) {
573+
java.util.List<
574+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
575+
> listItems =
576+
((BaseClass) TEST_VALUE).getComplexValue()
577+
.stream()
578+
.map(m -> {
579+
Map<
580+
String,
581+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
582+
> avMap = new HashMap<>();
583+
m.forEach((k, v) ->
584+
avMap.put(
585+
k,
586+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
587+
.builder()
588+
.ss(v)
589+
.build()
590+
)
591+
);
592+
return software.amazon.awssdk.services.dynamodb.model.AttributeValue
593+
.builder()
594+
.m(avMap)
595+
.build();
596+
})
597+
.collect(java.util.stream.Collectors.toList());
598+
attributes.put(
599+
"complexValue",
600+
software.amazon.awssdk.services.dynamodb.model.AttributeValue
601+
.builder()
602+
.l(listItems)
603+
.build()
604+
);
605+
}
534606
} else if (TEST_VALUE instanceof KeysOnly) {
535607
attributes.put(
536608
HASH_KEY,

0 commit comments

Comments
 (0)