diff --git a/test/integration/transactions-convenient-api/transactions-convenient-api.spec.test.ts b/test/integration/transactions-convenient-api/transactions-convenient-api.spec.test.ts index e9ca8f42d3f..8b4c0ee3d5f 100644 --- a/test/integration/transactions-convenient-api/transactions-convenient-api.spec.test.ts +++ b/test/integration/transactions-convenient-api/transactions-convenient-api.spec.test.ts @@ -5,19 +5,8 @@ import { runUnifiedSuite } from '../../tools/unified-spec-runner/runner'; const SKIPPED_TESTS = [ 'callback succeeds after multiple connection errors', - 'callback is not retried after non-transient error', 'callback is not retried after non-transient error (DuplicateKeyError)', - 'withTransaction succeeds if callback aborts', - 'unpin after transient error within a transaction', - 'withTransaction succeeds if callback commits', - 'withTransaction still succeeds if callback aborts and runs extra op', - 'withTransaction still succeeds if callback commits and runs extra op', - 'withTransaction commits after callback returns (second transaction)', - 'withTransaction commits after callback returns', - 'withTransaction and no transaction options set', - 'withTransaction inherits transaction options from defaultTransactionOptions', - 'withTransaction explicit transaction options override defaultTransactionOptions', - 'withTransaction explicit transaction options' + 'withTransaction succeeds if callback aborts' ]; describe('Transactions Convenient API Spec Unified Tests', function () { @@ -33,7 +22,7 @@ describe('Transactions Convenient API Spec Unified Tests', function () { runUnifiedSuite(loadSpecTests(path.join('transactions-convenient-api', 'unified')), test => { return SKIPPED_TESTS.includes(test.description) - ? 'TODO(NODE-5855/DRIVERS-2816): Skipping failing transaction tests' + ? 'TODO(NODE-5855): Skipping failing transaction tests' : false; }); }); diff --git a/test/tools/unified-spec-runner/entities.ts b/test/tools/unified-spec-runner/entities.ts index 0e5a8f3d5d7..e36afdc5d16 100644 --- a/test/tools/unified-spec-runner/entities.ts +++ b/test/tools/unified-spec-runner/entities.ts @@ -7,6 +7,7 @@ import { ChangeStream, ClientEncryption, ClientSession, + type ClusterTime, Collection, type CommandFailedEvent, type CommandStartedEvent, @@ -556,6 +557,7 @@ export class EntitiesMap extends Map { static async createEntities( config: TestConfiguration, + clusterTime: ClusterTime | null, entities?: EntityDescription[], entityMap?: EntitiesMap ): Promise { @@ -627,6 +629,10 @@ export class EntitiesMap extends Map { } } const session = client.startSession(options); + // Advance the session cluster time. See DRIVERS-2816. + if (clusterTime) { + session.advanceClusterTime(clusterTime); + } map.set(entity.session.id, session); } else if ('bucket' in entity) { const db = map.getEntity('db', entity.bucket.database); diff --git a/test/tools/unified-spec-runner/operations.ts b/test/tools/unified-spec-runner/operations.ts index 37cc74a0ee0..541ec5a1e45 100644 --- a/test/tools/unified-spec-runner/operations.ts +++ b/test/tools/unified-spec-runner/operations.ts @@ -45,7 +45,7 @@ operations.set('createEntities', async ({ entities, operation, testConfig }) => if (!operation.arguments?.entities) { throw new Error('encountered createEntities operation without entities argument'); } - await EntitiesMap.createEntities(testConfig, operation.arguments.entities!, entities); + await EntitiesMap.createEntities(testConfig, null, operation.arguments.entities!, entities); }); operations.set('abortTransaction', async ({ entities, operation }) => { diff --git a/test/tools/unified-spec-runner/runner.ts b/test/tools/unified-spec-runner/runner.ts index 9f1fb3925f5..0c3b7413215 100644 --- a/test/tools/unified-spec-runner/runner.ts +++ b/test/tools/unified-spec-runner/runner.ts @@ -113,6 +113,9 @@ async function runUnifiedTest( return ctx.skip(); } + const ping = await utilClient.db().admin().command({ ping: 1 }); + const clusterTime = ping.$clusterTime; + // If initialData is specified, for each collectionData therein the test runner MUST drop the // collection and insert the specified documents (if any) using a "majority" write concern. If no // documents are specified, the test runner MUST create the collection with a "majority" write concern. @@ -161,7 +164,11 @@ async function runUnifiedTest( } trace('createEntities'); - entities = await EntitiesMap.createEntities(ctx.configuration, unifiedSuite.createEntities); + entities = await EntitiesMap.createEntities( + ctx.configuration, + clusterTime, + unifiedSuite.createEntities + ); // Workaround for SERVER-39704: // test runners MUST execute a non-transactional distinct command on