Skip to content

Commit 3ce1141

Browse files
committed
GODRIVER-1788 correctly replace errors in IndexView CreateMany (#543)
1 parent 6082465 commit 3ce1141

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

mongo/index_view.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ func (iv IndexView) CreateMany(ctx context.Context, models []IndexModel, opts ..
249249

250250
err = op.Execute(ctx)
251251
if err != nil {
252-
return nil, err
252+
return nil, replaceErrors(err)
253253
}
254254

255255
return names, nil

mongo/integration/index_view_test.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,24 @@ func TestIndexView(t *testing.T) {
218218
})
219219
}
220220
})
221+
// Needs to run on these versions for failpoints
222+
mt.RunOpts("replace error", mtest.NewOptions().Topologies(mtest.ReplicaSet).MinServerVersion("4.0"), func(mt *mtest.T) {
223+
mt.SetFailPoint(mtest.FailPoint{
224+
ConfigureFailPoint: "failCommand",
225+
Mode: "alwaysOn",
226+
Data: mtest.FailPointData{
227+
FailCommands: []string{"createIndexes"},
228+
ErrorCode: 100,
229+
},
230+
})
231+
232+
_, err := mt.Coll.Indexes().CreateOne(mtest.Background, mongo.IndexModel{Keys: bson.D{{"x", 1}}})
233+
assert.NotNil(mt, err, "expected CreateOne error, got nil")
234+
cmdErr, ok := err.(mongo.CommandError)
235+
assert.True(mt, ok, "expected mongo.CommandError, got %T", err)
236+
assert.Equal(mt, int32(100), cmdErr.Code, "expected error code 100, got %v", cmdErr.Code)
237+
238+
})
221239
})
222240
mt.Run("create many", func(mt *mtest.T) {
223241
mt.Run("success", func(mt *mtest.T) {
@@ -277,9 +295,12 @@ func TestIndexView(t *testing.T) {
277295
majority := options.CreateIndexes().SetCommitQuorumMajority()
278296
votingMembers := options.CreateIndexes().SetCommitQuorumVotingMembers()
279297

280-
indexModel := mongo.IndexModel{
298+
indexModel1 := mongo.IndexModel{
281299
Keys: bson.D{{"x", 1}},
282300
}
301+
indexModel2 := mongo.IndexModel{
302+
Keys: bson.D{{"y", 1}},
303+
}
283304

284305
testCases := []struct {
285306
name string
@@ -299,13 +320,13 @@ func TestIndexView(t *testing.T) {
299320
mtOpts := mtest.NewOptions().MinServerVersion(tc.minServerVersion).MaxServerVersion(tc.maxServerVersion)
300321
mt.RunOpts(tc.name, mtOpts, func(mt *mtest.T) {
301322
mt.ClearEvents()
302-
_, err := mt.Coll.Indexes().CreateOne(mtest.Background, indexModel, tc.opts)
323+
_, err := mt.Coll.Indexes().CreateMany(mtest.Background, []mongo.IndexModel{indexModel1, indexModel2}, tc.opts)
303324
if tc.expectError {
304-
assert.NotNil(mt, err, "expected CreateOne error, got nil")
325+
assert.NotNil(mt, err, "expected CreateMany error, got nil")
305326
return
306327
}
307328

308-
assert.Nil(mt, err, "CreateOne error: %v", err)
329+
assert.Nil(mt, err, "CreateMany error: %v", err)
309330
cmd := mt.GetStartedEvent().Command
310331
sentBSONValue, err := cmd.LookupErr("commitQuorum")
311332
assert.Nil(mt, err, "expected commitQuorum in command %s", cmd)
@@ -319,6 +340,31 @@ func TestIndexView(t *testing.T) {
319340
})
320341
}
321342
})
343+
// Needs to run on these versions for failpoints
344+
mt.RunOpts("replace error", mtest.NewOptions().Topologies(mtest.ReplicaSet).MinServerVersion("4.0"), func(mt *mtest.T) {
345+
mt.SetFailPoint(mtest.FailPoint{
346+
ConfigureFailPoint: "failCommand",
347+
Mode: "alwaysOn",
348+
Data: mtest.FailPointData{
349+
FailCommands: []string{"createIndexes"},
350+
ErrorCode: 100,
351+
},
352+
})
353+
354+
_, err := mt.Coll.Indexes().CreateMany(mtest.Background, []mongo.IndexModel{
355+
{
356+
Keys: bson.D{{"foo", int32(-1)}},
357+
},
358+
{
359+
Keys: bson.D{{"bar", int32(1)}, {"baz", int32(-1)}},
360+
},
361+
})
362+
assert.NotNil(mt, err, "expected CreateMany error, got nil")
363+
cmdErr, ok := err.(mongo.CommandError)
364+
assert.True(mt, ok, "expected mongo.CommandError, got %T", err)
365+
assert.Equal(mt, int32(100), cmdErr.Code, "expected error code 100, got %v", cmdErr.Code)
366+
367+
})
322368
})
323369
mt.Run("drop one", func(mt *mtest.T) {
324370
iv := mt.Coll.Indexes()

0 commit comments

Comments
 (0)