Skip to content

Commit df6888d

Browse files
authored
Added logging specification tests (#1740)
Fixed issue when openining a socket that throws an exception the heartbeat started message was created but no heartbeat failed message. JAVA-4770
1 parent adcc577 commit df6888d

File tree

12 files changed

+237
-83
lines changed

12 files changed

+237
-83
lines changed

driver-core/src/main/com/mongodb/internal/connection/BaseCluster.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,12 @@ abstract class BaseCluster implements Cluster {
120120
this.settings = notNull("settings", settings);
121121
this.serverFactory = notNull("serverFactory", serverFactory);
122122
this.clusterListener = singleClusterListener(settings);
123-
ClusterOpeningEvent clusterOpeningEvent = new ClusterOpeningEvent(clusterId);
124-
this.clusterListener.clusterOpening(clusterOpeningEvent);
125-
logTopologyOpening(clusterId, clusterOpeningEvent);
126123
this.description = new ClusterDescription(settings.getMode(), UNKNOWN, emptyList(),
127124
settings, serverFactory.getSettings());
128125
this.clientMetadata = clientMetadata;
126+
logTopologyMonitoringStarting(clusterId);
127+
ClusterOpeningEvent clusterOpeningEvent = new ClusterOpeningEvent(clusterId);
128+
clusterListener.clusterOpening(clusterOpeningEvent);
129129
}
130130

131131
@Override
@@ -229,9 +229,9 @@ public void close() {
229229
phase.get().countDown();
230230
fireChangeEvent(new ClusterDescription(settings.getMode(), UNKNOWN, emptyList(), settings, serverFactory.getSettings()),
231231
description);
232+
logTopologyMonitoringStopping(clusterId);
232233
ClusterClosedEvent clusterClosedEvent = new ClusterClosedEvent(clusterId);
233234
clusterListener.clusterClosed(clusterClosedEvent);
234-
logTopologyClosedEvent(clusterId, clusterClosedEvent);
235235
stopWaitQueueHandler();
236236
}
237237
}
@@ -259,8 +259,8 @@ protected void updateDescription(final ClusterDescription newDescription) {
259259
protected void fireChangeEvent(final ClusterDescription newDescription, final ClusterDescription previousDescription) {
260260
if (!wouldDescriptionsGenerateEquivalentEvents(newDescription, previousDescription)) {
261261
ClusterDescriptionChangedEvent changedEvent = new ClusterDescriptionChangedEvent(getClusterId(), newDescription, previousDescription);
262-
clusterListener.clusterDescriptionChanged(changedEvent);
263262
logTopologyDescriptionChanged(getClusterId(), changedEvent);
263+
clusterListener.clusterDescriptionChanged(changedEvent);
264264
}
265265
}
266266

@@ -642,9 +642,7 @@ static void logServerSelectionSucceeded(
642642
}
643643
}
644644

645-
static void logTopologyOpening(
646-
final ClusterId clusterId,
647-
final ClusterOpeningEvent clusterOpeningEvent) {
645+
static void logTopologyMonitoringStarting(final ClusterId clusterId) {
648646
if (STRUCTURED_LOGGER.isRequired(DEBUG, clusterId)) {
649647
STRUCTURED_LOGGER.log(new LogMessage(
650648
TOPOLOGY, DEBUG, "Starting topology monitoring", clusterId,
@@ -669,9 +667,7 @@ static void logTopologyDescriptionChanged(
669667
}
670668
}
671669

672-
static void logTopologyClosedEvent(
673-
final ClusterId clusterId,
674-
final ClusterClosedEvent clusterClosedEvent) {
670+
static void logTopologyMonitoringStopping(final ClusterId clusterId) {
675671
if (STRUCTURED_LOGGER.isRequired(DEBUG, clusterId)) {
676672
STRUCTURED_LOGGER.log(new LogMessage(
677673
TOPOLOGY, DEBUG, "Stopped topology monitoring", clusterId,

driver-core/src/main/com/mongodb/internal/connection/DefaultServer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ class DefaultServer implements ClusterableServer {
7575
this.connectionPool = notNull("connectionPool", connectionPool);
7676

7777
this.serverId = serverId;
78-
7978
serverListener.serverOpening(new ServerOpeningEvent(this.serverId));
8079

8180
this.serverMonitor = serverMonitor;

driver-core/src/main/com/mongodb/internal/connection/DefaultServerMonitor.java

Lines changed: 202 additions & 53 deletions
Large diffs are not rendered by default.

driver-core/src/main/com/mongodb/internal/connection/LoadBalancedCluster.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
import static com.mongodb.connection.ServerConnectionState.CONNECTING;
6464
import static com.mongodb.internal.connection.BaseCluster.logServerSelectionStarted;
6565
import static com.mongodb.internal.connection.BaseCluster.logServerSelectionSucceeded;
66-
import static com.mongodb.internal.connection.BaseCluster.logTopologyClosedEvent;
66+
import static com.mongodb.internal.connection.BaseCluster.logTopologyMonitoringStopping;
6767
import static com.mongodb.internal.event.EventListenerHelper.singleClusterListener;
6868
import static java.lang.String.format;
6969
import static java.util.Collections.emptyList;
@@ -281,9 +281,9 @@ public void close() {
281281
if (localServer != null) {
282282
localServer.close();
283283
}
284+
logTopologyMonitoringStopping(clusterId);
284285
ClusterClosedEvent clusterClosedEvent = new ClusterClosedEvent(clusterId);
285286
clusterListener.clusterClosed(clusterClosedEvent);
286-
logTopologyClosedEvent(clusterId, clusterClosedEvent);
287287
}
288288
}
289289

driver-core/src/main/com/mongodb/internal/connection/SingleServerCluster.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,9 @@ public SingleServerCluster(final ClusterId clusterId, final ClusterSettings sett
5959
// synchronized in the constructor because the change listener is re-entrant to this instance.
6060
// In other words, we are leaking a reference to "this" from the constructor.
6161
withLock(() -> {
62-
server.set(createServer(settings.getHosts().get(0)));
6362
publishDescription(ServerDescription.builder().state(CONNECTING).address(settings.getHosts().get(0))
6463
.build());
64+
server.set(createServer(settings.getHosts().get(0)));
6565
});
6666
}
6767

driver-core/src/main/com/mongodb/internal/logging/LogMessage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ public enum Name {
108108
* Not supported.
109109
*/
110110
OPERATION("operation"),
111+
AWAITED("awaited"),
111112
SERVICE_ID("serviceId"),
112113
SERVER_CONNECTION_ID("serverConnectionId"),
113114
DRIVER_CONNECTION_ID("driverConnectionId"),

driver-reactive-streams/src/test/functional/com/mongodb/reactivestreams/client/unified/UnifiedServerDiscoveryAndMonitoringTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.mongodb.reactivestreams.client.unified;
1818

1919
import org.junit.jupiter.params.provider.Arguments;
20-
2120
import java.util.Collection;
2221

2322
final class UnifiedServerDiscoveryAndMonitoringTest extends UnifiedReactiveStreamsTest {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,7 @@ public String toString() {
495495
+ new BsonDocument("messages", expectedMessages).toJson(JsonWriterSettings.builder().indent(true).build()) + "\n"
496496
+ " actualMessages="
497497
+ new BsonDocument("messages", new BsonArray(actualMessages.stream()
498-
.map(LogMatcher::asDocument).collect(Collectors.toList())))
498+
.map(LogMatcher::logMessageAsDocument).collect(Collectors.toList())))
499499
.toJson(JsonWriterSettings.builder().indent(true).build()) + "\n";
500500
}
501501
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,12 @@ public <T> void waitForServerMonitorEvents(final String client, final Class<T> e
336336
BsonDocument expectedEventContents = getEventContents(expectedEvent);
337337
try {
338338
serverMonitorListener.waitForEvents(expectedEventType,
339-
event -> serverMonitorEventMatches(expectedEventContents, event, null), count, Duration.ofSeconds(10));
339+
event -> serverMonitorEventMatches(expectedEventContents, event, null), count, Duration.ofSeconds(15));
340340
context.pop();
341341
} catch (InterruptedException e) {
342342
throw new RuntimeException(e);
343343
} catch (TimeoutException e) {
344-
fail(context.getMessage("Timed out waiting for server monitor events"));
344+
fail(context.getMessage(e.getMessage()));
345345
}
346346
}
347347

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import java.util.Collection;
3535
import java.util.List;
36+
import java.util.stream.Collectors;
3637

3738
import static org.junit.Assert.assertEquals;
3839
import static org.junit.Assert.assertTrue;
@@ -47,15 +48,20 @@ final class LogMatcher {
4748
this.context = context;
4849
}
4950

50-
void assertLogMessageEquality(final String client, final boolean ignoreExtraMessages, final BsonArray expectedMessages,
51+
void assertLogMessageEquality(final String client, final BsonArray ignoreMessages,
52+
final boolean ignoreExtraMessages, final BsonArray expectedMessages,
5153
final List<LogMessage> actualMessages, final Iterable<Tweak> tweaks) {
5254
context.push(ContextElement.ofLogMessages(client, expectedMessages, actualMessages));
5355

56+
List<LogMessage> logMessages = actualMessages.stream()
57+
.filter(logMessage -> !ignoreMessages.contains(logMessageAsIgnoreMessageDocument(logMessage)))
58+
.collect(Collectors.toList());
59+
5460
if (ignoreExtraMessages) {
5561
assertTrue(context.getMessage("Number of messages must be greater than or equal to the expected number of messages"),
56-
actualMessages.size() >= expectedMessages.size());
62+
logMessages.size() >= expectedMessages.size());
5763
} else {
58-
assertEquals(context.getMessage("Number of log messages must be the same"), expectedMessages.size(), actualMessages.size());
64+
assertEquals(context.getMessage("Number of log messages must be the same"), expectedMessages.size(), logMessages.size());
5965
}
6066

6167
for (int i = 0; i < expectedMessages.size(); i++) {
@@ -64,14 +70,22 @@ void assertLogMessageEquality(final String client, final boolean ignoreExtraMess
6470
expectedMessage = tweak.apply(expectedMessage);
6571
}
6672
if (expectedMessage != null) {
67-
valueMatcher.assertValuesMatch(expectedMessage, asDocument(actualMessages.get(i)));
73+
valueMatcher.assertValuesMatch(expectedMessage, logMessageAsDocument(logMessages.get(i)));
6874
}
6975
}
7076

7177
context.pop();
7278
}
7379

74-
static BsonDocument asDocument(final LogMessage message) {
80+
private static BsonDocument logMessageAsIgnoreMessageDocument(final LogMessage message) {
81+
BsonDocument document = new BsonDocument();
82+
document.put("level", new BsonString(message.getLevel().name().toLowerCase()));
83+
document.put("component", new BsonString(message.getComponent().getValue()));
84+
document.put("data", new BsonDocument("message", new BsonString(message.getMessageId())));
85+
return document;
86+
}
87+
88+
static BsonDocument logMessageAsDocument(final LogMessage message) {
7589
BsonDocument document = new BsonDocument();
7690
document.put("component", new BsonString(message.getComponent().getValue()));
7791
document.put("level", new BsonString(message.getLevel().name().toLowerCase()));

0 commit comments

Comments
 (0)