Skip to content

Commit da08915

Browse files
committed
support unified tests
1 parent 9705893 commit da08915

13 files changed

+1796
-66
lines changed

src/libmongoc/src/mongoc/mongoc-util-private.h

+3
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ mongoc_ends_with (const char *str, const char *suffix);
100100
void
101101
mongoc_lowercase (const char *src, char *buf /* OUT */);
102102

103+
void
104+
mongoc_lowercase_inplace (char *src);
105+
103106
bool
104107
mongoc_parse_port (uint16_t *port, const char *str);
105108

src/libmongoc/src/mongoc/mongoc-util.c

+12
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,18 @@ mongoc_lowercase (const char *src, char *buf /* OUT */)
526526
}
527527
}
528528

529+
void
530+
mongoc_lowercase_inplace (char *src)
531+
{
532+
for (; *src; ++src) {
533+
/* UTF8 non-ascii characters have a 1 at the leftmost bit. If this is the
534+
* case, just copy */
535+
if ((*src & (0x1 << 7)) == 0) {
536+
*src = (char) tolower (*src);
537+
}
538+
}
539+
}
540+
529541
bool
530542
mongoc_parse_port (uint16_t *port, const char *str)
531543
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
{
2+
"description": "fle2v2-BypassQueryAnalysis",
3+
"schemaVersion": "1.23",
4+
"runOnRequirements": [
5+
{
6+
"minServerVersion": "7.0.0",
7+
"serverless": "forbid",
8+
"csfle": true,
9+
"topologies": [
10+
"replicaset",
11+
"sharded",
12+
"load-balanced"
13+
]
14+
}
15+
],
16+
"createEntities": [
17+
{
18+
"client": {
19+
"id": "client0",
20+
"autoEncryptOpts": {
21+
"kmsProviders": {
22+
"local": {
23+
"key": "Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk"
24+
}
25+
},
26+
"keyVaultNamespace": "keyvault.datakeys",
27+
"bypassQueryAnalysis": true
28+
},
29+
"observeEvents": [
30+
"commandStartedEvent"
31+
]
32+
}
33+
},
34+
{
35+
"database": {
36+
"id": "encryptedDB",
37+
"client": "client0",
38+
"databaseName": "default"
39+
}
40+
},
41+
{
42+
"collection": {
43+
"id": "encryptedColl",
44+
"database": "encryptedDB",
45+
"collectionName": "default"
46+
}
47+
},
48+
{
49+
"client": {
50+
"id": "client1"
51+
}
52+
},
53+
{
54+
"database": {
55+
"id": "unencryptedDB",
56+
"client": "client1",
57+
"databaseName": "default"
58+
}
59+
},
60+
{
61+
"collection": {
62+
"id": "unencryptedColl",
63+
"database": "unencryptedDB",
64+
"collectionName": "default"
65+
}
66+
}
67+
],
68+
"initialData": [
69+
{
70+
"databaseName": "keyvault",
71+
"collectionName": "datakeys",
72+
"documents": [
73+
{
74+
"_id": {
75+
"$binary": {
76+
"base64": "EjRWeBI0mHYSNBI0VniQEg==",
77+
"subType": "04"
78+
}
79+
},
80+
"keyMaterial": {
81+
"$binary": {
82+
"base64": "sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==",
83+
"subType": "00"
84+
}
85+
},
86+
"creationDate": {
87+
"$date": {
88+
"$numberLong": "1648914851981"
89+
}
90+
},
91+
"updateDate": {
92+
"$date": {
93+
"$numberLong": "1648914851981"
94+
}
95+
},
96+
"status": {
97+
"$numberInt": "0"
98+
},
99+
"masterKey": {
100+
"provider": "local"
101+
}
102+
}
103+
]
104+
},
105+
{
106+
"databaseName": "default",
107+
"collectionName": "default",
108+
"documents": [],
109+
"createOptions": {
110+
"encryptedFields": {
111+
"fields": [
112+
{
113+
"keyId": {
114+
"$binary": {
115+
"base64": "EjRWeBI0mHYSNBI0VniQEg==",
116+
"subType": "04"
117+
}
118+
},
119+
"path": "encryptedIndexed",
120+
"bsonType": "string",
121+
"queries": {
122+
"queryType": "equality",
123+
"contention": {
124+
"$numberLong": "0"
125+
}
126+
}
127+
},
128+
{
129+
"keyId": {
130+
"$binary": {
131+
"base64": "q83vqxI0mHYSNBI0VniQEg==",
132+
"subType": "04"
133+
}
134+
},
135+
"path": "encryptedUnindexed",
136+
"bsonType": "string"
137+
}
138+
]
139+
}
140+
}
141+
}
142+
],
143+
"tests": [
144+
{
145+
"description": "BypassQueryAnalysis decrypts",
146+
"operations": [
147+
{
148+
"object": "encryptedColl",
149+
"name": "insertOne",
150+
"arguments": {
151+
"document": {
152+
"_id": 1,
153+
"encryptedIndexed": {
154+
"$binary": {
155+
"base64": "C18BAAAFZAAgAAAAANnt+eLTkv4GdDPl8IAfJOvTzArOgFJQ2S/DcLza4W0DBXMAIAAAAAD2u+omZme3P2gBPehMQyQHQ153tPN1+z7bksYA9jKTpAVwADAAAAAAUnCOQqIvmR65YKyYnsiVfVrg9hwUVO3RhhKExo3RWOzgaS0QdsBL5xKFS0JhZSoWBXUAEAAAAAQSNFZ4EjSYdhI0EjRWeJASEHQAAgAAAAV2AFAAAAAAEjRWeBI0mHYSNBI0VniQEpQbp/ZJpWBKeDtKLiXb0P2E9wvc0g3f373jnYQYlJquOrlPOoEy3ngsHPJuSUijvWDsrQzqYa349K7G/66qaXEFZQAgAAAAAOuac/eRLYakKX6B0vZ1r3QodOQFfjqJD+xlGiPu4/PsBWwAIAAAAACkm0o9bj6j0HuADKc0svbqO2UHj6GrlNdF6yKNxh63xRJrAAAAAAAAAAAAAA==",
156+
"subType": "06"
157+
}
158+
}
159+
}
160+
}
161+
},
162+
{
163+
"object": "encryptedColl",
164+
"name": "find",
165+
"arguments": {
166+
"filter": {
167+
"_id": 1
168+
}
169+
},
170+
"expectResult": [
171+
{
172+
"_id": 1,
173+
"encryptedIndexed": "123"
174+
}
175+
]
176+
},
177+
{
178+
"object": "unencryptedColl",
179+
"name": "find",
180+
"arguments": {
181+
"filter": {}
182+
},
183+
"expectResult": [
184+
{
185+
"_id": 1,
186+
"encryptedIndexed": {
187+
"$$type": "binData"
188+
},
189+
"__safeContent__": [
190+
{
191+
"$binary": {
192+
"base64": "31eCYlbQoVboc5zwC8IoyJVSkag9PxREka8dkmbXJeY=",
193+
"subType": "00"
194+
}
195+
}
196+
]
197+
}
198+
]
199+
}
200+
],
201+
"expectEvents": [
202+
{
203+
"client": "client0",
204+
"events": [
205+
{
206+
"commandStartedEvent": {
207+
"command": {
208+
"listCollections": 1,
209+
"filter": {
210+
"name": "default"
211+
}
212+
},
213+
"commandName": "listCollections"
214+
}
215+
},
216+
{
217+
"commandStartedEvent": {
218+
"command": {
219+
"insert": "default",
220+
"documents": [
221+
{
222+
"_id": 1,
223+
"encryptedIndexed": {
224+
"$binary": {
225+
"base64": "C18BAAAFZAAgAAAAANnt+eLTkv4GdDPl8IAfJOvTzArOgFJQ2S/DcLza4W0DBXMAIAAAAAD2u+omZme3P2gBPehMQyQHQ153tPN1+z7bksYA9jKTpAVwADAAAAAAUnCOQqIvmR65YKyYnsiVfVrg9hwUVO3RhhKExo3RWOzgaS0QdsBL5xKFS0JhZSoWBXUAEAAAAAQSNFZ4EjSYdhI0EjRWeJASEHQAAgAAAAV2AFAAAAAAEjRWeBI0mHYSNBI0VniQEpQbp/ZJpWBKeDtKLiXb0P2E9wvc0g3f373jnYQYlJquOrlPOoEy3ngsHPJuSUijvWDsrQzqYa349K7G/66qaXEFZQAgAAAAAOuac/eRLYakKX6B0vZ1r3QodOQFfjqJD+xlGiPu4/PsBWwAIAAAAACkm0o9bj6j0HuADKc0svbqO2UHj6GrlNdF6yKNxh63xRJrAAAAAAAAAAAAAA==",
226+
"subType": "06"
227+
}
228+
}
229+
}
230+
],
231+
"ordered": true,
232+
"encryptionInformation": {
233+
"type": 1,
234+
"schema": {
235+
"default.default": {
236+
"escCollection": "enxcol_.default.esc",
237+
"ecocCollection": "enxcol_.default.ecoc",
238+
"fields": [
239+
{
240+
"keyId": {
241+
"$binary": {
242+
"base64": "EjRWeBI0mHYSNBI0VniQEg==",
243+
"subType": "04"
244+
}
245+
},
246+
"path": "encryptedIndexed",
247+
"bsonType": "string",
248+
"queries": {
249+
"queryType": "equality",
250+
"contention": {
251+
"$numberLong": "0"
252+
}
253+
}
254+
},
255+
{
256+
"keyId": {
257+
"$binary": {
258+
"base64": "q83vqxI0mHYSNBI0VniQEg==",
259+
"subType": "04"
260+
}
261+
},
262+
"path": "encryptedUnindexed",
263+
"bsonType": "string"
264+
}
265+
]
266+
}
267+
}
268+
}
269+
},
270+
"commandName": "insert"
271+
}
272+
},
273+
{
274+
"commandStartedEvent": {
275+
"command": {
276+
"find": "default",
277+
"filter": {
278+
"_id": 1
279+
}
280+
},
281+
"commandName": "find"
282+
}
283+
},
284+
{
285+
"commandStartedEvent": {
286+
"command": {
287+
"find": "datakeys",
288+
"filter": {
289+
"$or": [
290+
{
291+
"_id": {
292+
"$in": [
293+
{
294+
"$binary": {
295+
"base64": "EjRWeBI0mHYSNBI0VniQEg==",
296+
"subType": "04"
297+
}
298+
}
299+
]
300+
}
301+
},
302+
{
303+
"keyAltNames": {
304+
"$in": []
305+
}
306+
}
307+
]
308+
},
309+
"$db": "keyvault",
310+
"readConcern": {
311+
"level": "majority"
312+
}
313+
},
314+
"commandName": "find"
315+
}
316+
}
317+
]
318+
}
319+
]
320+
}
321+
]
322+
}

0 commit comments

Comments
 (0)