Skip to content

Commit f2eb58b

Browse files
committed
Improve lsid comparison is command event equality assertions
JAVA-3115
1 parent 565d502 commit f2eb58b

File tree

6 files changed

+21
-36
lines changed

6 files changed

+21
-36
lines changed

driver-async/src/test/functional/com/mongodb/async/client/ReadConcernTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,7 @@ public void onResult(final Long result, final Throwable t) {
8686
commandDocument.put("$readPreference", ReadPreference.primaryPreferred().toDocument());
8787
}
8888
assertEventsEquality(Arrays.<CommandEvent>asList(new CommandStartedEvent(1, null, getDefaultDatabaseName(),
89-
"count", commandDocument)), events,
90-
commandListener.getSessions());
89+
"count", commandDocument)), events);
9190

9291
}
9392

driver-async/src/test/functional/com/mongodb/async/client/TransactionsTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public class TransactionsTest {
8383
private MongoClient mongoClient;
8484
private CollectionHelper<Document> collectionHelper;
8585
private Map<String, ClientSession> sessionsMap;
86+
private HashMap<String, BsonDocument> lsidMap;
8687

8788
@BeforeClass
8889
public static void beforeClass() {
@@ -152,6 +153,9 @@ public void apply(final SocketSettings.Builder builder) {
152153
sessionsMap = new HashMap<String, ClientSession>();
153154
sessionsMap.put("session0", sessionZero);
154155
sessionsMap.put("session1", sessionOne);
156+
lsidMap = new HashMap<String, BsonDocument>();
157+
lsidMap.put("session0", sessionZero.getServerSession().getIdentifier());
158+
lsidMap.put("session1", sessionOne.getServerSession().getIdentifier());
155159
}
156160

157161
private ReadConcern getReadConcern(final BsonDocument clientOptions) {
@@ -244,8 +248,6 @@ public void shouldPassAllOutcomes() {
244248
final ClientSession clientSession = receiver.startsWith("session") ? sessionsMap.get(receiver)
245249
: (operation.getDocument("arguments").containsKey("session")
246250
? sessionsMap.get(operation.getDocument("arguments").getString("session").getValue()) : null);
247-
BsonDocument sessionIdentifier = (clientSession == null) ? null : clientSession.getServerSession().getIdentifier();
248-
commandListener.addExpectedSessionNextStartedEvent(sessionIdentifier);
249251
try {
250252
if (operationName.equals("startTransaction")) {
251253
BsonDocument arguments = operation.getDocument("arguments", new BsonDocument());
@@ -346,7 +348,7 @@ public void execute() {
346348
List<CommandEvent> expectedEvents = getExpectedEvents(definition.getArray("expectations"), databaseName, null);
347349
List<CommandEvent> events = commandListener.getCommandStartedEvents();
348350

349-
assertEventsEquality(expectedEvents, events, commandListener.getSessions());
351+
assertEventsEquality(expectedEvents, events, lsidMap);
350352
}
351353

352354
BsonDocument expectedOutcome = definition.getDocument("outcome", new BsonDocument());

driver-core/src/test/functional/com/mongodb/client/CommandMonitoringTestHelper.java

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import java.util.ArrayList;
4444
import java.util.List;
45+
import java.util.Map;
4546
import java.util.concurrent.TimeUnit;
4647

4748
import static com.mongodb.ClusterFixture.isDiscoverableReplicaSet;
@@ -114,28 +115,21 @@ public static void assertEventsEquality(final List<CommandEvent> expectedEvents,
114115
}
115116

116117
public static void assertEventsEquality(final List<CommandEvent> expectedEvents, final List<CommandEvent> events,
117-
@Nullable final List<BsonDocument> expectedSessionIdentifiers) {
118+
@Nullable final Map<String, BsonDocument> lsidMap) {
118119
assertEquals(expectedEvents.size(), events.size());
119-
if (expectedSessionIdentifiers != null) {
120-
assertEquals(events.size(), expectedSessionIdentifiers.size());
121-
}
122120

123121
for (int i = 0; i < events.size(); i++) {
124122
CommandEvent actual = events.get(i);
125123
CommandEvent expected = expectedEvents.get(i);
126-
BsonDocument sessionIdentifier = null;
127-
if (expectedSessionIdentifiers != null) {
128-
sessionIdentifier = expectedSessionIdentifiers.get(i);
129-
}
130124

131125
assertEquals(expected.getClass(), actual.getClass());
132126
assertEquals(expected.getCommandName().toLowerCase(), actual.getCommandName().toLowerCase());
133127

134128
if (actual.getClass().equals(CommandStartedEvent.class)) {
135129
CommandStartedEvent actualCommandStartedEvent = massageActualCommandStartedEvent((CommandStartedEvent) actual,
136-
sessionIdentifier);
130+
lsidMap);
137131
CommandStartedEvent expectedCommandStartedEvent = massageExpectedCommandStartedEvent((CommandStartedEvent) expected,
138-
sessionIdentifier);
132+
lsidMap);
139133

140134
assertEquals(expectedCommandStartedEvent.getDatabaseName(), actualCommandStartedEvent.getDatabaseName());
141135
assertEquals(expectedCommandStartedEvent.getCommand(), actualCommandStartedEvent.getCommand());
@@ -207,12 +201,12 @@ private static CommandSucceededEvent massageActualCommandSucceededEvent(final Co
207201
}
208202

209203
private static CommandStartedEvent massageActualCommandStartedEvent(final CommandStartedEvent event,
210-
@Nullable final BsonDocument sessionIdentifier) {
204+
@Nullable final Map<String, BsonDocument> lsidMap) {
211205
BsonDocument command = getWritableCloneOfCommand(event.getCommand());
212206

213207
massageCommand(event, command);
214208

215-
if (sessionIdentifier == null) {
209+
if (lsidMap == null) {
216210
command.remove("lsid");
217211
}
218212
if (command.containsKey("readConcern") && (command.getDocument("readConcern").containsKey("afterClusterTime"))) {
@@ -224,15 +218,15 @@ private static CommandStartedEvent massageActualCommandStartedEvent(final Comman
224218
}
225219

226220
private static CommandStartedEvent massageExpectedCommandStartedEvent(final CommandStartedEvent event,
227-
@Nullable final BsonDocument sessionIdentifier) {
221+
@Nullable final Map<String, BsonDocument> lsidMap) {
228222
BsonDocument command = getWritableCloneOfCommand(event.getCommand());
229223

230224
massageCommand(event, command);
231225

232-
if (sessionIdentifier == null) {
226+
if (lsidMap == null) {
233227
command.remove("lsid");
234228
} else {
235-
command.put("lsid", sessionIdentifier);
229+
command.put("lsid", lsidMap.get(command.getString("lsid").getValue()));
236230
}
237231

238232
if (command.containsKey("txnNumber") && command.isNull("txnNumber")) {

driver-core/src/test/functional/com/mongodb/internal/connection/TestCommandListener.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@
4343

4444
public class TestCommandListener implements CommandListener {
4545
private final List<CommandEvent> events = new ArrayList<CommandEvent>();
46-
private final List<BsonDocument> sessions = new ArrayList<BsonDocument>();
47-
private BsonDocument expectedSessionIdentifierForNextStartedEvent;
4846

4947
private static final CodecRegistry CODEC_REGISTRY_HACK;
5048

@@ -87,7 +85,6 @@ public void commandStarted(final CommandStartedEvent event) {
8785
events.add(new CommandStartedEvent(event.getRequestId(), event.getConnectionDescription(), event.getDatabaseName(),
8886
event.getCommandName(),
8987
event.getCommand() == null ? null : getWritableClone(event.getCommand())));
90-
sessions.add(expectedSessionIdentifierForNextStartedEvent);
9188
}
9289

9390
private BsonDocument getWritableClone(final BsonDocument original) {
@@ -181,12 +178,4 @@ private void assertEquivalence(final CommandStartedEvent actual, final CommandSt
181178
assertEquals(expected.getDatabaseName(), actual.getDatabaseName());
182179
assertEquals(expected.getCommand(), actual.getCommand());
183180
}
184-
185-
public void addExpectedSessionNextStartedEvent(final BsonDocument sessionIdentifier) {
186-
expectedSessionIdentifierForNextStartedEvent = sessionIdentifier;
187-
}
188-
189-
public List<BsonDocument> getSessions() {
190-
return sessions;
191-
}
192181
}

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ public void shouldIncludeReadConcernInCommand() {
8585
commandDocument.put("$readPreference", ReadPreference.primaryPreferred().toDocument());
8686
}
8787
assertEventsEquality(Arrays.<CommandEvent>asList(new CommandStartedEvent(1, null, getDefaultDatabaseName(),
88-
"count", commandDocument)), events,
89-
commandListener.getSessions());
88+
"count", commandDocument)), events);
9089
}
9190

9291
private boolean canRunTests() {

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public class TransactionsTest {
8585
private MongoClient mongoClient;
8686
private CollectionHelper<Document> collectionHelper;
8787
private Map<String, ClientSession> sessionsMap;
88+
private Map<String, BsonDocument> lsidMap;
8889

8990
@BeforeClass
9091
public static void beforeClass() {
@@ -153,6 +154,9 @@ public void apply(final SocketSettings.Builder builder) {
153154
sessionsMap = new HashMap<String, ClientSession>();
154155
sessionsMap.put("session0", sessionZero);
155156
sessionsMap.put("session1", sessionOne);
157+
lsidMap = new HashMap<String, BsonDocument>();
158+
lsidMap.put("session0", sessionZero.getServerSession().getIdentifier());
159+
lsidMap.put("session1", sessionOne.getServerSession().getIdentifier());
156160
}
157161

158162
private ReadConcern getReadConcern(final BsonDocument clientOptions) {
@@ -242,8 +246,6 @@ public void shouldPassAllOutcomes() {
242246
clientSession = operation.getDocument("arguments").containsKey("session")
243247
? sessionsMap.get(operation.getDocument("arguments").getString("session").getValue()) : null;
244248
}
245-
BsonDocument sessionIdentifier = (clientSession == null) ? null : clientSession.getServerSession().getIdentifier();
246-
commandListener.addExpectedSessionNextStartedEvent(sessionIdentifier);
247249
try {
248250
if (operationName.equals("startTransaction")) {
249251
BsonDocument arguments = operation.getDocument("arguments", new BsonDocument());
@@ -334,7 +336,7 @@ public void shouldPassAllOutcomes() {
334336
List<CommandEvent> expectedEvents = getExpectedEvents(definition.getArray("expectations"), databaseName, null);
335337
List<CommandEvent> events = commandListener.getCommandStartedEvents();
336338

337-
assertEventsEquality(expectedEvents, events, commandListener.getSessions());
339+
assertEventsEquality(expectedEvents, events, lsidMap);
338340
}
339341

340342
BsonDocument expectedOutcome = definition.getDocument("outcome", new BsonDocument());

0 commit comments

Comments
 (0)