Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/bulk/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -1119,7 +1119,7 @@ class BulkOperationBase {
callback,
new BulkWriteError(
toError({
message: 'write operation failed',
message: this.s.bulkResult.writeErrors[0].errmsg,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens if this.s.bulkResult.writeErrors[0] or its errmsg doesn't exist? Let's check that the errmsg exists and use the default write operation failed message if not.

code: this.s.bulkResult.writeErrors[0].code,
writeErrors: this.s.bulkResult.writeErrors
}),
Expand Down
54 changes: 54 additions & 0 deletions test/functional/bulk_tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,60 @@ describe('Bulk', function() {
}
});

it('should provide descriptive error message for unordered batch with duplicate key errors on inserts', function(done) {
const configuration = this.configuration;
const client = configuration.newClient(configuration.writeConcernMax(), {
poolSize: 1
});

client.connect(function(err, client) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For all callbacks in this test, let's use (err, client) => { notation instead of function(err, client) {.

const db = client.db(configuration.db);
const col = db.collection('err_batch_write_unordered_ops_legacy_6');

// Add unique index on a field causing all inserts to fail
col.createIndexes(
[
{
name: 'err_batch_write_unordered_ops_legacy_6',
key: { a: 1 },
unique: true
}
],
function(err) {
expect(err).to.not.exist;

// Initialize the unordered Batch
const batch = col.initializeUnorderedBulkOp();

// Add some operations to be executed in order
batch.insert({ a: 1 });
batch.insert({ a: 1 });

// Execute the operations
batch.execute(configuration.writeConcernMax(), function(err, result) {
expect(err).to.exist;
expect(result).to.not.exist;

// Test basic settings
result = err.result;
expect(result.nInserted).to.equal(1);
expect(result.hasWriteErrors()).to.equal(true);
expect(result.getWriteErrorCount() === 1).to.equal(true);

// Individual error checking
const error = result.getWriteErrorAt(0);
expect(error.code === 11000).to.equal(true);
expect(error.errmsg).to.exist;
expect(err.message).to.equal(error.errmsg);

client.close();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's change this to client.close(done); since we're here. This helps us modernize our tests.

done();
});
}
);
});
});

it(
'should Correctly Execute Unordered Batch of with upserts causing duplicate key errors on updates',
{
Expand Down