|
25 | 25 | from pymongo.errors import (BulkWriteError,
|
26 | 26 | ConfigurationError,
|
27 | 27 | WTimeoutError,
|
28 |
| - WriteConcernError) |
| 28 | + WriteConcernError, |
| 29 | + WriteError) |
29 | 30 | from pymongo.mongo_client import MongoClient
|
30 | 31 | from pymongo.operations import IndexModel, InsertOne
|
31 | 32 | from pymongo.read_concern import ReadConcern
|
@@ -210,6 +211,27 @@ def test_error_includes_errInfo(self):
|
210 | 211 | 'nRemoved': 0, 'upserted': []}
|
211 | 212 | self.assertEqual(ctx.exception.details, expected_details)
|
212 | 213 |
|
| 214 | + @client_context.require_version_min(4, 9) |
| 215 | + def test_write_error_details_exposes_errinfo(self): |
| 216 | + listener = EventListener() |
| 217 | + client = rs_or_single_client(event_listeners=[listener]) |
| 218 | + db = client.errinfotest |
| 219 | + self.addCleanup(client.drop_database, "errinfotest") |
| 220 | + validator = {"x": {"$type": "string"}} |
| 221 | + db.create_collection("test", validator=validator) |
| 222 | + with self.assertRaises(WriteError) as ctx: |
| 223 | + db.test.insert_one({'x': 1}) |
| 224 | + self.assertEqual(ctx.exception.code, 121) |
| 225 | + self.assertIsNotNone(ctx.exception.details) |
| 226 | + self.assertIsNotNone(ctx.exception.details.get('errInfo')) |
| 227 | + for event in listener.results['succeeded']: |
| 228 | + if event.command_name == 'insert': |
| 229 | + self.assertEqual( |
| 230 | + event.reply['writeErrors'][0], ctx.exception.details) |
| 231 | + break |
| 232 | + else: |
| 233 | + self.fail("Couldn't find insert event.") |
| 234 | + |
213 | 235 |
|
214 | 236 | def normalize_write_concern(concern):
|
215 | 237 | result = {}
|
|
0 commit comments