Skip to content

Commit 219b506

Browse files
committed
chore: limit server type
1 parent 2ddf2eb commit 219b506

File tree

1 file changed

+104
-98
lines changed

1 file changed

+104
-98
lines changed

test/integration/client-side-operations-timeout/client_side_operations_timeout.prose.test.ts

Lines changed: 104 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -597,112 +597,118 @@ describe('CSOT spec prose tests', function () {
597597
'TODO(DRIVERS-2347): Requires this ticket to be implemented before we can assert on connection CSOT behaviour';
598598
});
599599

600-
describe(
601-
'9. endSession',
602-
{ requires: { topology: ['replicaset', 'sharded', 'load-balanced'] } },
603-
() => {
604-
/**
605-
* This test MUST only be run against replica sets and sharded clusters with server version 4.4 or higher. It MUST be
606-
* run three times: once with the timeout specified via the MongoClient `timeoutMS` option, once with the timeout
607-
* specified via the ClientSession `defaultTimeoutMS` option, and once more with the timeout specified via the
608-
* `timeoutMS` option for the `endSession` operation. In all cases, the timeout MUST be set to 10 milliseconds.
609-
*
610-
* 1. Using `internalClient`, drop the `db.coll` collection.
611-
* 1. Using `internalClient`, set the following fail point:
612-
* ```js
613-
* {
614-
* configureFailPoint: failCommand,
615-
* mode: { times: 1 },
616-
* data: {
617-
* failCommands: ["abortTransaction"],
618-
* blockConnection: true,
619-
* blockTimeMS: 15
620-
* }
621-
* }
622-
* ```
623-
* 1. Create a new MongoClient (referred to as `client`) and an explicit ClientSession derived from that MongoClient (referred to as `session`).
624-
* 1. Execute the following code:
625-
* ```ts
626-
* coll = client.database("db").collection("coll")
627-
* session.start_transaction()
628-
* coll.insert_one({x: 1}, session=session)
629-
* ```
630-
* 1. Using `session`, execute `session.end_session`
631-
* - Expect this to fail with a timeout error after no more than 15ms.
632-
*/
633-
const failpoint: FailPoint = {
634-
configureFailPoint: 'failCommand',
635-
mode: { times: 1 },
636-
data: {
637-
failCommands: ['abortTransaction'],
638-
blockConnection: true,
639-
blockTimeMS: 60
640-
}
641-
};
642-
643-
beforeEach(async function () {
644-
if (!semver.satisfies(this.configuration.version, '>=4.4')) {
645-
this.skipReason = 'Requires server version 4.4+';
646-
this.skip();
647-
}
648-
const internalClient = this.configuration.newClient();
649-
await internalClient
650-
.db('db')
651-
.collection('coll')
652-
.drop()
653-
.catch(() => null);
654-
await internalClient.db('admin').command(failpoint);
655-
await internalClient.close();
656-
});
600+
describe('9. endSession', () => {
601+
/**
602+
* This test MUST only be run against replica sets and sharded clusters with server version 4.4 or higher. It MUST be
603+
* run three times: once with the timeout specified via the MongoClient `timeoutMS` option, once with the timeout
604+
* specified via the ClientSession `defaultTimeoutMS` option, and once more with the timeout specified via the
605+
* `timeoutMS` option for the `endSession` operation. In all cases, the timeout MUST be set to 10 milliseconds.
606+
*
607+
* 1. Using `internalClient`, drop the `db.coll` collection.
608+
* 1. Using `internalClient`, set the following fail point:
609+
* ```js
610+
* {
611+
* configureFailPoint: failCommand,
612+
* mode: { times: 1 },
613+
* data: {
614+
* failCommands: ["abortTransaction"],
615+
* blockConnection: true,
616+
* blockTimeMS: 15
617+
* }
618+
* }
619+
* ```
620+
* 1. Create a new MongoClient (referred to as `client`) and an explicit ClientSession derived from that MongoClient (referred to as `session`).
621+
* 1. Execute the following code:
622+
* ```ts
623+
* coll = client.database("db").collection("coll")
624+
* session.start_transaction()
625+
* coll.insert_one({x: 1}, session=session)
626+
* ```
627+
* 1. Using `session`, execute `session.end_session`
628+
* - Expect this to fail with a timeout error after no more than 15ms.
629+
*/
630+
const failpoint: FailPoint = {
631+
configureFailPoint: 'failCommand',
632+
mode: { times: 1 },
633+
data: {
634+
failCommands: ['abortTransaction'],
635+
blockConnection: true,
636+
blockTimeMS: 60
637+
}
638+
};
639+
640+
beforeEach(async function () {
641+
if (!semver.satisfies(this.configuration.version, '>=4.4')) {
642+
this.skipReason = 'Requires server version 4.4+';
643+
this.skip();
644+
}
645+
646+
if (
647+
!['Sharded', 'ReplicaSetWithPrimary', 'ReplicaSetNoPrimary'].includes(
648+
this.configuration.topologyType
649+
)
650+
) {
651+
this.skipReason = 'Requires replicaset or sharded clusters';
652+
this.skip();
653+
}
654+
655+
const internalClient = this.configuration.newClient();
656+
await internalClient
657+
.db('db')
658+
.collection('coll')
659+
.drop()
660+
.catch(() => null);
661+
await internalClient.db('admin').command(failpoint);
662+
await internalClient.close();
663+
});
657664

658-
let client: MongoClient;
665+
let client: MongoClient;
659666

660-
afterEach(async function () {
661-
if (semver.satisfies(this.configuration.version, '>=4.4')) {
662-
const internalClient = this.configuration.newClient();
663-
await internalClient.db('admin').command({ ...failpoint, mode: 'off' });
664-
await internalClient.close();
665-
}
666-
await client?.close();
667-
});
667+
afterEach(async function () {
668+
if (semver.satisfies(this.configuration.version, '>=4.4')) {
669+
const internalClient = this.configuration.newClient();
670+
await internalClient.db('admin').command({ ...failpoint, mode: 'off' });
671+
await internalClient.close();
672+
}
673+
await client?.close();
674+
});
668675

669-
describe('when timeoutMS is provided to the client', () => {
670-
it('throws a timeout error from endSession', async function () {
671-
client = this.configuration.newClient({ timeoutMS: 50, monitorCommands: true });
672-
const coll = client.db('db').collection('coll');
673-
const session = client.startSession();
674-
session.startTransaction();
675-
await coll.insertOne({ x: 1 }, { session });
676-
const error = await session.endSession().catch(error => error);
677-
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
678-
});
676+
describe('when timeoutMS is provided to the client', () => {
677+
it('throws a timeout error from endSession', async function () {
678+
client = this.configuration.newClient({ timeoutMS: 50, monitorCommands: true });
679+
const coll = client.db('db').collection('coll');
680+
const session = client.startSession();
681+
session.startTransaction();
682+
await coll.insertOne({ x: 1 }, { session });
683+
const error = await session.endSession().catch(error => error);
684+
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
679685
});
686+
});
680687

681-
describe('when defaultTimeoutMS is provided to startSession', () => {
682-
it('throws a timeout error from endSession', async function () {
683-
client = this.configuration.newClient();
684-
const coll = client.db('db').collection('coll');
685-
const session = client.startSession({ defaultTimeoutMS: 50 });
686-
session.startTransaction();
687-
await coll.insertOne({ x: 1 }, { session });
688-
const error = await session.endSession().catch(error => error);
689-
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
690-
});
688+
describe('when defaultTimeoutMS is provided to startSession', () => {
689+
it('throws a timeout error from endSession', async function () {
690+
client = this.configuration.newClient();
691+
const coll = client.db('db').collection('coll');
692+
const session = client.startSession({ defaultTimeoutMS: 50 });
693+
session.startTransaction();
694+
await coll.insertOne({ x: 1 }, { session });
695+
const error = await session.endSession().catch(error => error);
696+
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
691697
});
698+
});
692699

693-
describe('when timeoutMS is provided to endSession', () => {
694-
it('throws a timeout error from endSession', async function () {
695-
client = this.configuration.newClient();
696-
const coll = client.db('db').collection('coll');
697-
const session = client.startSession();
698-
session.startTransaction();
699-
await coll.insertOne({ x: 1 }, { session });
700-
const error = await session.endSession({ timeoutMS: 50 }).catch(error => error);
701-
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
702-
});
700+
describe('when timeoutMS is provided to endSession', () => {
701+
it('throws a timeout error from endSession', async function () {
702+
client = this.configuration.newClient();
703+
const coll = client.db('db').collection('coll');
704+
const session = client.startSession();
705+
session.startTransaction();
706+
await coll.insertOne({ x: 1 }, { session });
707+
const error = await session.endSession({ timeoutMS: 50 }).catch(error => error);
708+
expect(error).to.be.instanceOf(MongoOperationTimeoutError);
703709
});
704-
}
705-
);
710+
});
711+
});
706712

707713
describe(
708714
'10. Convenient Transactions',

0 commit comments

Comments
 (0)