|
34 | 34 | from bson.codec_options import CodecOptions |
35 | 35 | from bson.son import SON |
36 | 36 | from pymongo.common import validate_uuid_representation |
37 | | -from pymongo.synchronous.mongo_client import MongoClient |
38 | 37 | from pymongo.write_concern import WriteConcern |
39 | 38 |
|
40 | 39 |
|
41 | | -class TestBinary(unittest.TestCase): |
42 | | - csharp_data: bytes |
43 | | - java_data: bytes |
| 40 | +class BinaryData: |
| 41 | + # Generated by the Java driver |
| 42 | + from_java = ( |
| 43 | + b"bAAAAAdfaWQAUCBQxkVm+XdxJ9tOBW5ld2d1aWQAEAAAAAMIQkfACFu" |
| 44 | + b"Z/0RustLOU/G6Am5ld2d1aWRzdHJpbmcAJQAAAGZmOTk1YjA4LWMwND" |
| 45 | + b"ctNDIwOC1iYWYxLTUzY2VkMmIyNmU0NAAAbAAAAAdfaWQAUCBQxkVm+" |
| 46 | + b"XdxJ9tPBW5ld2d1aWQAEAAAAANgS/xhRXXv8kfIec+dYdyCAm5ld2d1" |
| 47 | + b"aWRzdHJpbmcAJQAAAGYyZWY3NTQ1LTYxZmMtNGI2MC04MmRjLTYxOWR" |
| 48 | + b"jZjc5Yzg0NwAAbAAAAAdfaWQAUCBQxkVm+XdxJ9tQBW5ld2d1aWQAEA" |
| 49 | + b"AAAAPqREIbhZPUJOSdHCJIgaqNAm5ld2d1aWRzdHJpbmcAJQAAADI0Z" |
| 50 | + b"DQ5Mzg1LTFiNDItNDRlYS04ZGFhLTgxNDgyMjFjOWRlNAAAbAAAAAdf" |
| 51 | + b"aWQAUCBQxkVm+XdxJ9tRBW5ld2d1aWQAEAAAAANjQBn/aQuNfRyfNyx" |
| 52 | + b"29COkAm5ld2d1aWRzdHJpbmcAJQAAADdkOGQwYjY5LWZmMTktNDA2My" |
| 53 | + b"1hNDIzLWY0NzYyYzM3OWYxYwAAbAAAAAdfaWQAUCBQxkVm+XdxJ9tSB" |
| 54 | + b"W5ld2d1aWQAEAAAAAMtSv/Et1cAQUFHUYevqxaLAm5ld2d1aWRzdHJp" |
| 55 | + b"bmcAJQAAADQxMDA1N2I3LWM0ZmYtNGEyZC04YjE2LWFiYWY4NzUxNDc" |
| 56 | + b"0MQAA" |
| 57 | + ) |
| 58 | + java_data = base64.b64decode(from_java) |
| 59 | + |
| 60 | + # Generated by the .net driver |
| 61 | + from_csharp = ( |
| 62 | + b"ZAAAABBfaWQAAAAAAAVuZXdndWlkABAAAAAD+MkoCd/Jy0iYJ7Vhl" |
| 63 | + b"iF3BAJuZXdndWlkc3RyaW5nACUAAAAwOTI4YzlmOC1jOWRmLTQ4Y2" |
| 64 | + b"ItOTgyNy1iNTYxOTYyMTc3MDQAAGQAAAAQX2lkAAEAAAAFbmV3Z3V" |
| 65 | + b"pZAAQAAAAA9MD0oXQe6VOp7mK4jkttWUCbmV3Z3VpZHN0cmluZwAl" |
| 66 | + b"AAAAODVkMjAzZDMtN2JkMC00ZWE1LWE3YjktOGFlMjM5MmRiNTY1A" |
| 67 | + b"ABkAAAAEF9pZAACAAAABW5ld2d1aWQAEAAAAAPRmIO2auc/Tprq1Z" |
| 68 | + b"oQ1oNYAm5ld2d1aWRzdHJpbmcAJQAAAGI2ODM5OGQxLWU3NmEtNGU" |
| 69 | + b"zZi05YWVhLWQ1OWExMGQ2ODM1OAAAZAAAABBfaWQAAwAAAAVuZXdn" |
| 70 | + b"dWlkABAAAAADISpriopuTEaXIa7arYOCFAJuZXdndWlkc3RyaW5nA" |
| 71 | + b"CUAAAA4YTZiMmEyMS02ZThhLTQ2NGMtOTcyMS1hZWRhYWQ4MzgyMT" |
| 72 | + b"QAAGQAAAAQX2lkAAQAAAAFbmV3Z3VpZAAQAAAAA98eg0CFpGlPihP" |
| 73 | + b"MwOmYGOMCbmV3Z3VpZHN0cmluZwAlAAAANDA4MzFlZGYtYTQ4NS00" |
| 74 | + b"ZjY5LThhMTMtY2NjMGU5OTgxOGUzAAA=" |
| 75 | + ) |
| 76 | + csharp_data = base64.b64decode(from_csharp) |
44 | 77 |
|
45 | | - @classmethod |
46 | | - def setUpClass(cls): |
47 | | - # Generated by the Java driver |
48 | | - from_java = ( |
49 | | - b"bAAAAAdfaWQAUCBQxkVm+XdxJ9tOBW5ld2d1aWQAEAAAAAMIQkfACFu" |
50 | | - b"Z/0RustLOU/G6Am5ld2d1aWRzdHJpbmcAJQAAAGZmOTk1YjA4LWMwND" |
51 | | - b"ctNDIwOC1iYWYxLTUzY2VkMmIyNmU0NAAAbAAAAAdfaWQAUCBQxkVm+" |
52 | | - b"XdxJ9tPBW5ld2d1aWQAEAAAAANgS/xhRXXv8kfIec+dYdyCAm5ld2d1" |
53 | | - b"aWRzdHJpbmcAJQAAAGYyZWY3NTQ1LTYxZmMtNGI2MC04MmRjLTYxOWR" |
54 | | - b"jZjc5Yzg0NwAAbAAAAAdfaWQAUCBQxkVm+XdxJ9tQBW5ld2d1aWQAEA" |
55 | | - b"AAAAPqREIbhZPUJOSdHCJIgaqNAm5ld2d1aWRzdHJpbmcAJQAAADI0Z" |
56 | | - b"DQ5Mzg1LTFiNDItNDRlYS04ZGFhLTgxNDgyMjFjOWRlNAAAbAAAAAdf" |
57 | | - b"aWQAUCBQxkVm+XdxJ9tRBW5ld2d1aWQAEAAAAANjQBn/aQuNfRyfNyx" |
58 | | - b"29COkAm5ld2d1aWRzdHJpbmcAJQAAADdkOGQwYjY5LWZmMTktNDA2My" |
59 | | - b"1hNDIzLWY0NzYyYzM3OWYxYwAAbAAAAAdfaWQAUCBQxkVm+XdxJ9tSB" |
60 | | - b"W5ld2d1aWQAEAAAAAMtSv/Et1cAQUFHUYevqxaLAm5ld2d1aWRzdHJp" |
61 | | - b"bmcAJQAAADQxMDA1N2I3LWM0ZmYtNGEyZC04YjE2LWFiYWY4NzUxNDc" |
62 | | - b"0MQAA" |
63 | | - ) |
64 | | - cls.java_data = base64.b64decode(from_java) |
65 | | - |
66 | | - # Generated by the .net driver |
67 | | - from_csharp = ( |
68 | | - b"ZAAAABBfaWQAAAAAAAVuZXdndWlkABAAAAAD+MkoCd/Jy0iYJ7Vhl" |
69 | | - b"iF3BAJuZXdndWlkc3RyaW5nACUAAAAwOTI4YzlmOC1jOWRmLTQ4Y2" |
70 | | - b"ItOTgyNy1iNTYxOTYyMTc3MDQAAGQAAAAQX2lkAAEAAAAFbmV3Z3V" |
71 | | - b"pZAAQAAAAA9MD0oXQe6VOp7mK4jkttWUCbmV3Z3VpZHN0cmluZwAl" |
72 | | - b"AAAAODVkMjAzZDMtN2JkMC00ZWE1LWE3YjktOGFlMjM5MmRiNTY1A" |
73 | | - b"ABkAAAAEF9pZAACAAAABW5ld2d1aWQAEAAAAAPRmIO2auc/Tprq1Z" |
74 | | - b"oQ1oNYAm5ld2d1aWRzdHJpbmcAJQAAAGI2ODM5OGQxLWU3NmEtNGU" |
75 | | - b"zZi05YWVhLWQ1OWExMGQ2ODM1OAAAZAAAABBfaWQAAwAAAAVuZXdn" |
76 | | - b"dWlkABAAAAADISpriopuTEaXIa7arYOCFAJuZXdndWlkc3RyaW5nA" |
77 | | - b"CUAAAA4YTZiMmEyMS02ZThhLTQ2NGMtOTcyMS1hZWRhYWQ4MzgyMT" |
78 | | - b"QAAGQAAAAQX2lkAAQAAAAFbmV3Z3VpZAAQAAAAA98eg0CFpGlPihP" |
79 | | - b"MwOmYGOMCbmV3Z3VpZHN0cmluZwAlAAAANDA4MzFlZGYtYTQ4NS00" |
80 | | - b"ZjY5LThhMTMtY2NjMGU5OTgxOGUzAAA=" |
81 | | - ) |
82 | | - cls.csharp_data = base64.b64decode(from_csharp) |
83 | 78 |
|
| 79 | +class TestBinary(unittest.TestCase): |
84 | 80 | def test_binary(self): |
85 | 81 | a_string = "hello world" |
86 | 82 | a_binary = Binary(b"hello world") |
@@ -159,7 +155,7 @@ def test_uuid_subtype_4(self): |
159 | 155 |
|
160 | 156 | def test_legacy_java_uuid(self): |
161 | 157 | # Test decoding |
162 | | - data = self.java_data |
| 158 | + data = BinaryData.java_data |
163 | 159 | docs = bson.decode_all(data, CodecOptions(SON[str, Any], False, PYTHON_LEGACY)) |
164 | 160 | for d in docs: |
165 | 161 | self.assertNotEqual(d["newguid"], uuid.UUID(d["newguidstring"])) |
@@ -197,27 +193,8 @@ def test_legacy_java_uuid(self): |
197 | 193 | ) |
198 | 194 | self.assertEqual(data, encoded) |
199 | 195 |
|
200 | | - @client_context.require_connection |
201 | | - def test_legacy_java_uuid_roundtrip(self): |
202 | | - data = self.java_data |
203 | | - docs = bson.decode_all(data, CodecOptions(SON[str, Any], False, JAVA_LEGACY)) |
204 | | - |
205 | | - client_context.client.pymongo_test.drop_collection("java_uuid") |
206 | | - db = client_context.client.pymongo_test |
207 | | - coll = db.get_collection("java_uuid", CodecOptions(uuid_representation=JAVA_LEGACY)) |
208 | | - |
209 | | - coll.insert_many(docs) |
210 | | - self.assertEqual(5, coll.count_documents({})) |
211 | | - for d in coll.find(): |
212 | | - self.assertEqual(d["newguid"], uuid.UUID(d["newguidstring"])) |
213 | | - |
214 | | - coll = db.get_collection("java_uuid", CodecOptions(uuid_representation=PYTHON_LEGACY)) |
215 | | - for d in coll.find(): |
216 | | - self.assertNotEqual(d["newguid"], d["newguidstring"]) |
217 | | - client_context.client.pymongo_test.drop_collection("java_uuid") |
218 | | - |
219 | 196 | def test_legacy_csharp_uuid(self): |
220 | | - data = self.csharp_data |
| 197 | + data = BinaryData.csharp_data |
221 | 198 |
|
222 | 199 | # Test decoding |
223 | 200 | docs = bson.decode_all(data, CodecOptions(SON[str, Any], False, PYTHON_LEGACY)) |
@@ -257,59 +234,6 @@ def test_legacy_csharp_uuid(self): |
257 | 234 | ) |
258 | 235 | self.assertEqual(data, encoded) |
259 | 236 |
|
260 | | - @client_context.require_connection |
261 | | - def test_legacy_csharp_uuid_roundtrip(self): |
262 | | - data = self.csharp_data |
263 | | - docs = bson.decode_all(data, CodecOptions(SON[str, Any], False, CSHARP_LEGACY)) |
264 | | - |
265 | | - client_context.client.pymongo_test.drop_collection("csharp_uuid") |
266 | | - db = client_context.client.pymongo_test |
267 | | - coll = db.get_collection("csharp_uuid", CodecOptions(uuid_representation=CSHARP_LEGACY)) |
268 | | - |
269 | | - coll.insert_many(docs) |
270 | | - self.assertEqual(5, coll.count_documents({})) |
271 | | - for d in coll.find(): |
272 | | - self.assertEqual(d["newguid"], uuid.UUID(d["newguidstring"])) |
273 | | - |
274 | | - coll = db.get_collection("csharp_uuid", CodecOptions(uuid_representation=PYTHON_LEGACY)) |
275 | | - for d in coll.find(): |
276 | | - self.assertNotEqual(d["newguid"], d["newguidstring"]) |
277 | | - client_context.client.pymongo_test.drop_collection("csharp_uuid") |
278 | | - |
279 | | - def test_uri_to_uuid(self): |
280 | | - uri = "mongodb://foo/?uuidrepresentation=csharpLegacy" |
281 | | - client = MongoClient(uri, connect=False) |
282 | | - self.assertEqual(client.pymongo_test.test.codec_options.uuid_representation, CSHARP_LEGACY) |
283 | | - |
284 | | - @client_context.require_connection |
285 | | - def test_uuid_queries(self): |
286 | | - db = client_context.client.pymongo_test |
287 | | - coll = db.test |
288 | | - coll.drop() |
289 | | - |
290 | | - uu = uuid.uuid4() |
291 | | - coll.insert_one({"uuid": Binary(uu.bytes, 3)}) |
292 | | - self.assertEqual(1, coll.count_documents({})) |
293 | | - |
294 | | - # Test regular UUID queries (using subtype 4). |
295 | | - coll = db.get_collection( |
296 | | - "test", CodecOptions(uuid_representation=UuidRepresentation.STANDARD) |
297 | | - ) |
298 | | - self.assertEqual(0, coll.count_documents({"uuid": uu})) |
299 | | - coll.insert_one({"uuid": uu}) |
300 | | - self.assertEqual(2, coll.count_documents({})) |
301 | | - docs = list(coll.find({"uuid": uu})) |
302 | | - self.assertEqual(1, len(docs)) |
303 | | - self.assertEqual(uu, docs[0]["uuid"]) |
304 | | - |
305 | | - # Test both. |
306 | | - uu_legacy = Binary.from_uuid(uu, UuidRepresentation.PYTHON_LEGACY) |
307 | | - predicate = {"uuid": {"$in": [uu, uu_legacy]}} |
308 | | - self.assertEqual(2, coll.count_documents(predicate)) |
309 | | - docs = list(coll.find(predicate)) |
310 | | - self.assertEqual(2, len(docs)) |
311 | | - coll.drop() |
312 | | - |
313 | 237 | def test_pickle(self): |
314 | 238 | b1 = Binary(b"123", 2) |
315 | 239 |
|
|
0 commit comments