@@ -232,3 +232,52 @@ func TestWriteConcernError(t *testing.T) {
232
232
bson .Raw (errInfoDoc ), wcError .Details )
233
233
})
234
234
}
235
+
236
+ func TestErrorsCodeNamePropagated (t * testing.T ) {
237
+ // Ensure the codeName field is propagated for both command and write concern errors.
238
+
239
+ mtOpts := mtest .NewOptions ().
240
+ Topologies (mtest .ReplicaSet ).
241
+ CreateClient (false )
242
+ mt := mtest .New (t , mtOpts )
243
+ defer mt .Close ()
244
+
245
+ mt .RunOpts ("command error" , mtest .NewOptions ().MinServerVersion ("3.4" ), func (mt * mtest.T ) {
246
+ // codeName is propagated in an ok:0 error.
247
+
248
+ cmd := bson.D {
249
+ {"insert" , mt .Coll .Name ()},
250
+ {"documents" , []bson.D {}},
251
+ }
252
+ err := mt .DB .RunCommand (mtest .Background , cmd ).Err ()
253
+ assert .NotNil (mt , err , "expected RunCommand error, got nil" )
254
+
255
+ ce , ok := err .(mongo.CommandError )
256
+ assert .True (mt , ok , "expected error of type %T, got %v of type %T" , mongo.CommandError {}, err , err )
257
+ expectedCodeName := "InvalidLength"
258
+ assert .Equal (mt , expectedCodeName , ce .Name , "expected error code name %q, got %q" , expectedCodeName , ce .Name )
259
+ })
260
+
261
+ wcCollOpts := options .Collection ().
262
+ SetWriteConcern (impossibleWc )
263
+ wcMtOpts := mtest .NewOptions ().
264
+ CollectionOptions (wcCollOpts )
265
+ mt .RunOpts ("write concern error" , wcMtOpts , func (mt * mtest.T ) {
266
+ // codeName is propagated for write concern errors.
267
+
268
+ _ , err := mt .Coll .InsertOne (mtest .Background , bson.D {})
269
+ assert .NotNil (mt , err , "expected InsertOne error, got nil" )
270
+
271
+ we , ok := err .(mongo.WriteException )
272
+ assert .True (mt , ok , "expected error of type %T, got %v of type %T" , mongo.WriteException {}, err , err )
273
+ wce := we .WriteConcernError
274
+ assert .NotNil (mt , wce , "expected write concern error, got %v" , we )
275
+
276
+ var expectedCodeName string
277
+ if codeNameVal , err := mt .GetSucceededEvent ().Reply .LookupErr ("writeConcernError" , "codeName" ); err == nil {
278
+ expectedCodeName = codeNameVal .StringValue ()
279
+ }
280
+
281
+ assert .Equal (mt , expectedCodeName , wce .Name , "expected code name %q, got %q" , expectedCodeName , wce .Name )
282
+ })
283
+ }
0 commit comments