|
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