Skip to content

Commit a5bdb75

Browse files
committed
CSHARP-2209: Fix race condition in ChangeStreamOperationTests
1 parent cb50ab8 commit a5bdb75

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

tests/MongoDB.Driver.Core.Tests/Core/Operations/ChangeStreamOperationTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ public void Execute_should_return_expected_results_for_drop_collection(
269269
var resultSerializer = new ChangeStreamDocumentSerializer<BsonDocument>(BsonDocumentSerializer.Instance);
270270
var messageEncoderSettings = new MessageEncoderSettings();
271271
var subject = new ChangeStreamOperation<ChangeStreamDocument<BsonDocument>>(_collectionNamespace, pipeline, resultSerializer, messageEncoderSettings);
272+
EnsureDatabaseExists();
272273
DropCollection();
273274

274275
using (var cursor = ExecuteOperation(subject, async))
@@ -298,6 +299,7 @@ public void Execute_should_return_expected_results_for_deletes(
298299
var resultSerializer = new ChangeStreamDocumentSerializer<BsonDocument>(BsonDocumentSerializer.Instance);
299300
var messageEncoderSettings = new MessageEncoderSettings();
300301
var subject = new ChangeStreamOperation<ChangeStreamDocument<BsonDocument>>(_collectionNamespace, pipeline, resultSerializer, messageEncoderSettings);
302+
EnsureDatabaseExists();
301303
DropCollection();
302304

303305
using (var cursor = ExecuteOperation(subject, async))
@@ -327,6 +329,7 @@ public void Execute_should_return_expected_results_for_inserts(
327329
var resultSerializer = new ChangeStreamDocumentSerializer<BsonDocument>(BsonDocumentSerializer.Instance);
328330
var messageEncoderSettings = new MessageEncoderSettings();
329331
var subject = new ChangeStreamOperation<ChangeStreamDocument<BsonDocument>>(_collectionNamespace, pipeline, resultSerializer, messageEncoderSettings);
332+
EnsureDatabaseExists();
330333
DropCollection();
331334
Insert("{ _id : 1, x : 1 }");
332335

@@ -361,6 +364,7 @@ public void Execute_should_return_expected_results_for_updates(
361364
{
362365
FullDocument = fullDocument
363366
};
367+
EnsureDatabaseExists();
364368
DropCollection();
365369

366370
using (var cursor = ExecuteOperation(subject, async))

tests/MongoDB.Driver.Core.Tests/Core/Operations/DropDatabaseOperationTests.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,5 @@ public void WriteConcern_get_and_set_should_work(
185185

186186
result.Should().BeSameAs(value);
187187
}
188-
189-
// helper methods
190-
private void EnsureDatabaseExists()
191-
{
192-
var document = new BsonDocument();
193-
Insert(document);
194-
}
195188
}
196189
}

tests/MongoDB.Driver.Core.Tests/Core/Operations/OperationTestBase.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ public virtual void Dispose()
6464
}
6565
}
6666

67+
protected void CreateCollection(CollectionNamespace collectionNamespace)
68+
{
69+
var operation = new CreateCollectionOperation(collectionNamespace, _messageEncoderSettings);
70+
ExecuteOperation(operation);
71+
}
72+
6773
protected void Delete(BsonDocument filter)
6874
{
6975
var requests = new[] { new DeleteRequest(filter) };
@@ -90,7 +96,12 @@ protected Task DropDatabaseAsync()
9096

9197
protected void DropCollection()
9298
{
93-
var dropCollectionOperation = new DropCollectionOperation(_collectionNamespace, _messageEncoderSettings);
99+
DropCollection(_collectionNamespace);
100+
}
101+
102+
protected void DropCollection(CollectionNamespace collectionNamespace)
103+
{
104+
var dropCollectionOperation = new DropCollectionOperation(collectionNamespace, _messageEncoderSettings);
94105
ExecuteOperation(dropCollectionOperation);
95106
}
96107

@@ -100,6 +111,19 @@ protected Task DropCollectionAsync()
100111
return ExecuteOperationAsync(dropCollectionOperation);
101112
}
102113

114+
protected void EnsureDatabaseExists()
115+
{
116+
var collectionName = $"EnsureDatabaseExists-{_databaseNamespace.DatabaseName}";
117+
var collectionNamespace = new CollectionNamespace(_databaseNamespace, collectionName);
118+
var filter = new BsonDocument("_id", 1);
119+
var update = new BsonDocument("$set", new BsonDocument("x", 1));
120+
var operation = new FindOneAndUpdateOperation<BsonDocument>(collectionNamespace, filter, update, BsonDocumentSerializer.Instance, new MessageEncoderSettings())
121+
{
122+
IsUpsert = true
123+
};
124+
ExecuteOperation(operation);
125+
}
126+
103127
protected TResult ExecuteOperation<TResult>(IReadOperation<TResult> operation)
104128
{
105129
using (var binding = CoreTestConfiguration.GetReadBinding(_session.Fork()))

0 commit comments

Comments
 (0)