Skip to content

Commit 87559cf

Browse files
committed
Follow unacknowledged write with a find in spec tests (#1355)
This will force completion of the unacknowledged write, which addresses a TCP-based race condition in the tests JAVA-5398
1 parent 2f6c311 commit 87559cf

File tree

4 files changed

+49
-10
lines changed

4 files changed

+49
-10
lines changed

driver-core/src/test/resources/unified-test-format/command-logging/unacknowledged-write.json

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"description": "command-logging",
3-
"schemaVersion": "1.13",
2+
"description": "unacknowledged-write",
3+
"schemaVersion": "1.16",
44
"createEntities": [
55
{
66
"client": {
@@ -53,11 +53,27 @@
5353
"_id": 2
5454
}
5555
}
56+
},
57+
{
58+
"name": "find",
59+
"object": "collection",
60+
"arguments": {
61+
"filter": {}
62+
},
63+
"expectResult": [
64+
{
65+
"_id": 1
66+
},
67+
{
68+
"_id": 2
69+
}
70+
]
5671
}
5772
],
5873
"expectLogMessages": [
5974
{
6075
"client": "client",
76+
"ignoreExtraMessages": true,
6177
"messages": [
6278
{
6379
"level": "debug",
@@ -132,5 +148,3 @@
132148
}
133149
]
134150
}
135-
136-

driver-core/src/test/resources/unified-test-format/command-monitoring/unacknowledgedBulkWrite.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"description": "unacknowledgedBulkWrite",
3-
"schemaVersion": "1.0",
3+
"schemaVersion": "1.7",
44
"createEntities": [
55
{
66
"client": {
@@ -64,11 +64,29 @@
6464
],
6565
"ordered": false
6666
}
67+
},
68+
{
69+
"name": "find",
70+
"object": "collection",
71+
"arguments": {
72+
"filter": {}
73+
},
74+
"expectResult": [
75+
{
76+
"_id": 1,
77+
"x": 11
78+
},
79+
{
80+
"_id": "unorderedBulkWriteInsertW0",
81+
"x": 44
82+
}
83+
]
6784
}
6885
],
6986
"expectEvents": [
7087
{
7188
"client": "client",
89+
"ignoreExtraEvents": true,
7290
"events": [
7391
{
7492
"commandStartedEvent": {

driver-sync/src/test/functional/com/mongodb/client/unified/LogMatcher.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.List;
3636

3737
import static org.junit.Assert.assertEquals;
38+
import static org.junit.Assert.assertTrue;
3839

3940
final class LogMatcher {
4041
private final ValueMatcher valueMatcher;
@@ -46,11 +47,16 @@ final class LogMatcher {
4647
this.context = context;
4748
}
4849

49-
void assertLogMessageEquality(final String client, final BsonArray expectedMessages, final List<LogMessage> actualMessages,
50-
final Iterable<Tweak> tweaks) {
50+
void assertLogMessageEquality(final String client, final boolean ignoreExtraMessages, final BsonArray expectedMessages,
51+
final List<LogMessage> actualMessages, final Iterable<Tweak> tweaks) {
5152
context.push(ContextElement.ofLogMessages(client, expectedMessages, actualMessages));
5253

53-
assertEquals(context.getMessage("Number of log messages must be the same"), expectedMessages.size(), actualMessages.size());
54+
if (ignoreExtraMessages) {
55+
assertTrue(context.getMessage("Number of messages must be greater than or equal to the expected number of messages"),
56+
actualMessages.size() >= expectedMessages.size());
57+
} else {
58+
assertEquals(context.getMessage("Number of log messages must be the same"), expectedMessages.size(), actualMessages.size());
59+
}
5460

5561
for (int i = 0; i < expectedMessages.size(); i++) {
5662
BsonDocument expectedMessage = expectedMessages.get(i).asDocument().clone();

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -282,11 +282,12 @@ private void compareLogMessages(final UnifiedTestContext rootContext, final Bson
282282
final Iterable<LogMatcher.Tweak> tweaks) {
283283
for (BsonValue cur : definition.getArray("expectLogMessages")) {
284284
BsonDocument curLogMessagesForClient = cur.asDocument();
285+
boolean ignoreExtraMessages = curLogMessagesForClient.getBoolean("ignoreExtraMessages", BsonBoolean.FALSE).getValue();
285286
String clientId = curLogMessagesForClient.getString("client").getValue();
286287
TestLoggingInterceptor loggingInterceptor =
287288
entities.getClientLoggingInterceptor(clientId);
288-
rootContext.getLogMatcher().assertLogMessageEquality(clientId, curLogMessagesForClient.getArray("messages"),
289-
loggingInterceptor.getMessages(), tweaks);
289+
rootContext.getLogMatcher().assertLogMessageEquality(clientId, ignoreExtraMessages,
290+
curLogMessagesForClient.getArray("messages"), loggingInterceptor.getMessages(), tweaks);
290291
}
291292
}
292293

0 commit comments

Comments
 (0)