Skip to content

Commit fe41283

Browse files
test(NODE-6980): refactor flaky legacy find test to async-await (#4559)
1 parent d7426ce commit fe41283

File tree

1 file changed

+43
-64
lines changed

1 file changed

+43
-64
lines changed

test/integration/crud/find.test.js

Lines changed: 43 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
'use strict';
2-
const { assert: test } = require('../shared');
2+
const { assert: test, filterForCommands } = require('../shared');
33
const { expect } = require('chai');
44
const sinon = require('sinon');
55
const { setTimeout } = require('timers');
6-
const { Code, ObjectId, Long, Binary, ReturnDocument, CursorResponse } = require('../../mongodb');
6+
const {
7+
Code,
8+
ObjectId,
9+
Long,
10+
Binary,
11+
ReturnDocument,
12+
CursorResponse,
13+
MongoServerError
14+
} = require('../../mongodb');
715

816
describe('Find', function () {
17+
/** @type(import('../../mongodb').MongoClient */
918
let client;
1019

1120
beforeEach(async function () {
@@ -496,70 +505,40 @@ describe('Find', function () {
496505
}
497506
});
498507

499-
it('shouldCorrectlyPerformFindsWithHintTurnedOn', {
500-
metadata: {
501-
requires: { topology: ['single', 'replicaset', 'sharded', 'ssl', 'heap', 'wiredtiger'] }
502-
},
508+
it('shouldCorrectlyPerformFindsWithHintTurnedOn', async function () {
509+
const configuration = this.configuration;
510+
client = configuration.newClient(configuration.writeConcernMax(), {
511+
monitorCommands: true
512+
});
503513

504-
test: function (done) {
505-
var configuration = this.configuration;
506-
var client = configuration.newClient(configuration.writeConcernMax(), { maxPoolSize: 1 });
507-
client.connect(function (err, client) {
508-
var db = client.db(configuration.db);
509-
db.createCollection('test_hint', function (err, collection) {
510-
collection.insert({ a: 1 }, configuration.writeConcernMax(), function (err) {
511-
expect(err).to.not.exist;
512-
db.createIndex(
513-
collection.collectionName,
514-
'a',
515-
configuration.writeConcernMax(),
516-
function (err) {
517-
expect(err).to.not.exist;
518-
collection.find({ a: 1 }, { hint: 'a' }).toArray(function (err) {
519-
test.ok(err != null);
514+
const finds = [];
515+
client.on('commandStarted', filterForCommands('find', finds));
520516

521-
collection.find({ a: 1 }, { hint: ['a'] }).toArray(function (err, items) {
522-
expect(err).to.not.exist;
523-
test.equal(1, items.length);
524-
525-
collection.find({ a: 1 }, { hint: { a: 1 } }).toArray(function (err, items) {
526-
test.equal(1, items.length);
527-
528-
// Modify hints
529-
collection.hint = 'a_1';
530-
test.equal('a_1', collection.hint);
531-
collection.find({ a: 1 }).toArray(function (err, items) {
532-
test.equal(1, items.length);
533-
534-
collection.hint = ['a'];
535-
test.equal(1, collection.hint['a']);
536-
collection.find({ a: 1 }).toArray(function (err, items) {
537-
test.equal(1, items.length);
538-
539-
collection.hint = { a: 1 };
540-
test.equal(1, collection.hint['a']);
541-
collection.find({ a: 1 }).toArray(function (err, items) {
542-
test.equal(1, items.length);
543-
544-
collection.hint = null;
545-
test.ok(collection.hint == null);
546-
collection.find({ a: 1 }).toArray(function (err, items) {
547-
test.equal(1, items.length);
548-
// Let's close the db
549-
client.close(done);
550-
});
551-
});
552-
});
553-
});
554-
});
555-
});
556-
});
557-
}
558-
);
559-
});
560-
});
561-
});
562-
}
517+
await client.connect();
518+
519+
const db = client.db(configuration.db);
520+
const collection = await db.createCollection('test_hint');
521+
522+
await collection.deleteMany({});
523+
await collection.insert({ a: 1 }, configuration.writeConcernMax());
524+
525+
await db.createIndex(collection.collectionName, 'a', configuration.writeConcernMax());
526+
527+
expect(
528+
await collection
529+
.find({ a: 1 }, { hint: 'a' })
530+
.toArray()
531+
.catch(e => e)
532+
).to.be.instanceOf(MongoServerError);
533+
expect(finds[0].command.hint).to.equal('a');
534+
535+
// Test with hint as array
536+
expect(await collection.find({ a: 1 }, { hint: ['a'] }).toArray()).to.have.lengthOf(1);
537+
expect(finds[1].command.hint).to.deep.equal({ a: 1 });
538+
539+
// Test with hint as object
540+
expect(await collection.find({ a: 1 }, { hint: { a: 1 } }).toArray()).to.have.lengthOf(1);
541+
expect(finds[2].command.hint).to.deep.equal({ a: 1 });
563542
});
564543

565544
it('shouldCorrectlyPerformFindByObjectId', {

0 commit comments

Comments
 (0)