diff --git a/driver-core/src/test/functional/com/mongodb/client/test/CollectionHelper.java b/driver-core/src/test/functional/com/mongodb/client/test/CollectionHelper.java index 9bf435d013e..0e58ef638b7 100644 --- a/driver-core/src/test/functional/com/mongodb/client/test/CollectionHelper.java +++ b/driver-core/src/test/functional/com/mongodb/client/test/CollectionHelper.java @@ -109,6 +109,11 @@ public static void dropDatabase(final String name, final WriteConcern writeConce } } + public static BsonDocument getCurrentClusterTime() { + return new CommandReadOperation("admin", new BsonDocument("ping", new BsonInt32(1)), new BsonDocumentCodec()) + .execute(getBinding()).getDocument("$clusterTime", null); + } + public MongoNamespace getNamespace() { return namespace; } diff --git a/driver-sync/src/test/functional/com/mongodb/client/unified/Entities.java b/driver-sync/src/test/functional/com/mongodb/client/unified/Entities.java index ba1ed53cd83..87b6bf0c145 100644 --- a/driver-sync/src/test/functional/com/mongodb/client/unified/Entities.java +++ b/driver-sync/src/test/functional/com/mongodb/client/unified/Entities.java @@ -23,8 +23,6 @@ import com.mongodb.ReadConcernLevel; import com.mongodb.ServerApi; import com.mongodb.ServerApiVersion; -import com.mongodb.internal.connection.TestClusterListener; -import com.mongodb.logging.TestLoggingInterceptor; import com.mongodb.TransactionOptions; import com.mongodb.WriteConcern; import com.mongodb.assertions.Assertions; @@ -56,11 +54,13 @@ import com.mongodb.event.ConnectionPoolListener; import com.mongodb.event.ConnectionPoolReadyEvent; import com.mongodb.event.ConnectionReadyEvent; +import com.mongodb.internal.connection.TestClusterListener; import com.mongodb.internal.connection.TestCommandListener; import com.mongodb.internal.connection.TestConnectionPoolListener; import com.mongodb.internal.connection.TestServerListener; import com.mongodb.internal.logging.LogMessage; import com.mongodb.lang.NonNull; +import com.mongodb.logging.TestLoggingInterceptor; import org.bson.BsonArray; import org.bson.BsonBoolean; import org.bson.BsonDocument; @@ -300,6 +300,7 @@ private void putEntity(final String id, final T entity, final Map } public void init(final BsonArray entitiesArray, + final BsonDocument startingClusterTime, final boolean waitForPoolAsyncWorkManagerStart, final Function mongoClientSupplier, final Function gridFSBucketSupplier, @@ -324,7 +325,7 @@ public void init(final BsonArray entitiesArray, break; } case "session": { - initSession(entity, id); + initSession(entity, id, startingClusterTime); break; } case "bucket": { @@ -596,7 +597,7 @@ private void initCollection(final BsonDocument entity, final String id) { putEntity(id, collection, collections); } - private void initSession(final BsonDocument entity, final String id) { + private void initSession(final BsonDocument entity, final String id, final BsonDocument startingClusterTime) { MongoClient client = clients.get(entity.getString("client").getValue()); ClientSessionOptions.Builder optionsBuilder = ClientSessionOptions.builder(); if (entity.containsKey("sessionOptions")) { @@ -614,6 +615,7 @@ private void initSession(final BsonDocument entity, final String id) { } } ClientSession session = client.startSession(optionsBuilder.build()); + session.advanceClusterTime(startingClusterTime); putEntity(id, session, sessions); putEntity(id + "-identifier", session.getServerSession().getIdentifier(), sessionIdentifiers); } diff --git a/driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java b/driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java index 8b76f426dbc..fb99a28621d 100644 --- a/driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java +++ b/driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java @@ -73,6 +73,7 @@ import static com.mongodb.ClusterFixture.getServerVersion; import static com.mongodb.client.Fixture.getMongoClient; import static com.mongodb.client.Fixture.getMongoClientSettings; +import static com.mongodb.client.test.CollectionHelper.getCurrentClusterTime; import static com.mongodb.client.unified.RunOnRequirementsMatcher.runOnRequirementsMet; import static java.util.Collections.singletonList; import static java.util.stream.Collectors.toList; @@ -105,6 +106,7 @@ public abstract class UnifiedTest { private final UnifiedClientEncryptionHelper clientEncryptionHelper = new UnifiedClientEncryptionHelper(entities); private final List failPoints = new ArrayList<>(); private final UnifiedTestContext rootContext = new UnifiedTestContext(); + private BsonDocument startingClusterTime; private class UnifiedTestContext { private final AssertionContext context = new AssertionContext(); @@ -212,12 +214,12 @@ public void setUp() { if (definition.containsKey("skipReason")) { throw new AssumptionViolatedException(definition.getString("skipReason").getValue()); } - entities.init(entitiesArray, + startingClusterTime = addInitialDataAndGetClusterTime(); + entities.init(entitiesArray, startingClusterTime, fileDescription != null && PRESTART_POOL_ASYNC_WORK_MANAGER_FILE_DESCRIPTIONS.contains(fileDescription), this::createMongoClient, this::createGridFSBucket, this::createClientEncryption); - addInitialData(); } @After @@ -561,6 +563,7 @@ protected boolean terminateLoop() { private OperationResult executeCreateEntities(final BsonDocument operation) { entities.init(operation.getDocument("arguments").getArray("entities"), + startingClusterTime, false, this::createMongoClient, this::createGridFSBucket, @@ -890,7 +893,7 @@ private List lastTwoCommandEvents(final TestCommandListener listen return events.subList(events.size() - 2, events.size()); } - private void addInitialData() { + private BsonDocument addInitialDataAndGetClusterTime() { for (BsonValue cur : initialData.getValues()) { BsonDocument curDataSet = cur.asDocument(); CollectionHelper helper = new CollectionHelper<>(new BsonDocumentCodec(), @@ -905,5 +908,6 @@ private void addInitialData() { WriteConcern.MAJORITY); } } + return getCurrentClusterTime(); } }