Skip to content

Commit 83b16de

Browse files
author
Rahul Karajgikar
committed
add assertions on exception message
Signed-off-by: Rahul Karajgikar <karajgik@amazon.com>
1 parent 73d027a commit 83b16de

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

server/src/internalClusterTest/java/org/opensearch/cluster/coordination/NodeJoinLeftIT.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@
3232

3333
package org.opensearch.cluster.coordination;
3434

35+
import org.apache.logging.log4j.LogManager;
36+
import org.apache.logging.log4j.core.LogEvent;
37+
import org.apache.logging.log4j.core.LoggerContext;
38+
import org.apache.logging.log4j.core.appender.AbstractAppender;
39+
import org.apache.logging.log4j.core.config.Configuration;
40+
import org.apache.logging.log4j.core.config.LoggerConfig;
41+
import org.apache.logging.log4j.core.config.Property;
42+
import org.apache.logging.log4j.core.layout.PatternLayout;
3543
import org.opensearch.action.admin.cluster.health.ClusterHealthResponse;
3644
import org.opensearch.cluster.NodeConnectionsService;
3745
import org.opensearch.cluster.metadata.IndexMetadata;
@@ -48,15 +56,20 @@
4856
import org.opensearch.test.store.MockFSIndexStore;
4957
import org.opensearch.test.transport.MockTransportService;
5058
import org.opensearch.test.transport.StubbableTransport;
59+
import org.opensearch.transport.ClusterConnectionManager;
5160
import org.opensearch.transport.TransportChannel;
5261
import org.opensearch.transport.TransportRequest;
5362
import org.opensearch.transport.TransportRequestHandler;
5463
import org.opensearch.transport.TransportService;
64+
import org.junit.After;
5565
import org.junit.Before;
5666

67+
import java.util.ArrayList;
5768
import java.util.Arrays;
5869
import java.util.Collection;
70+
import java.util.List;
5971
import java.util.concurrent.atomic.AtomicBoolean;
72+
import java.util.regex.Pattern;
6073

6174
import static org.opensearch.cluster.coordination.FollowersChecker.FOLLOWER_CHECK_ACTION_NAME;
6275
import static org.hamcrest.Matchers.is;
@@ -68,8 +81,10 @@
6881
@ClusterScope(scope = Scope.TEST, numDataNodes = 0)
6982
public class NodeJoinLeftIT extends OpenSearchIntegTestCase {
7083

84+
private TestAppender testAppender;
7185
private String clusterManager;
7286
private String redNodeName;
87+
private LoggerContext loggerContext;
7388

7489
@Override
7590
protected Collection<Class<? extends Plugin>> nodePlugins() {
@@ -93,6 +108,13 @@ protected void beforeIndexDeletion() throws Exception {
93108
@Before
94109
public void setUp() throws Exception {
95110
super.setUp();
111+
testAppender = new TestAppender();
112+
loggerContext = (LoggerContext) LogManager.getContext(false);
113+
Configuration config = loggerContext.getConfiguration();
114+
LoggerConfig loggerConfig = config.getLoggerConfig(ClusterConnectionManager.class.getName());
115+
loggerConfig.addAppender(testAppender, null, null);
116+
loggerContext.updateLoggers();
117+
96118
String indexName = "test";
97119
final Settings nodeSettings = Settings.builder()
98120
.put(RecoverySettings.INDICES_RECOVERY_RETRY_DELAY_NETWORK_SETTING.getKey(), "100ms")
@@ -124,6 +146,16 @@ public void setUp() throws Exception {
124146
.get();
125147
}
126148

149+
@After
150+
public void tearDown() throws Exception {
151+
loggerContext = (LoggerContext) LogManager.getContext(false);
152+
Configuration config = loggerContext.getConfiguration();
153+
LoggerConfig loggerConfig = config.getLoggerConfig(ClusterConnectionManager.class.getName());
154+
loggerConfig.removeAppender(testAppender.getName());
155+
loggerContext.updateLoggers();
156+
super.tearDown();
157+
}
158+
127159
public void testClusterStabilityWhenJoinRequestHappensDuringNodeLeftTask() throws Exception {
128160

129161
ClusterService clusterManagerClsService = internalCluster().getInstance(ClusterService.class, clusterManager);
@@ -181,6 +213,13 @@ public void testClusterStabilityWhenJoinRequestHappensDuringNodeLeftTask() throw
181213
succeedFollowerChecker.set(true);
182214
ClusterHealthResponse response = client().admin().cluster().prepareHealth().setWaitForNodes("3").get();
183215
assertThat(response.isTimedOut(), is(false));
216+
217+
// assert that the right exception message showed up in logs
218+
assertTrue(
219+
"Expected IllegalStateException was not logged",
220+
testAppender.containsExceptionMessage("IllegalStateException[cannot make a new connection as disconnect to node")
221+
);
222+
184223
}
185224

186225
public void testClusterStabilityWhenDisconnectDuringSlowNodeLeftTask() throws Exception {
@@ -251,6 +290,12 @@ public void testClusterStabilityWhenDisconnectDuringSlowNodeLeftTask() throws Ex
251290
succeedFollowerChecker.set(true);
252291
ClusterHealthResponse response = client().admin().cluster().prepareHealth().setWaitForNodes("3").get();
253292
assertThat(response.isTimedOut(), is(false));
293+
294+
// assert that the right exception message showed up in logs
295+
assertTrue(
296+
"Expected IllegalStateException was not logged",
297+
testAppender.containsExceptionMessage("IllegalStateException[cannot make a new connection as disconnect to node")
298+
);
254299
}
255300

256301
public void testRestartDataNode() throws Exception {
@@ -301,4 +346,29 @@ public void messageReceived(
301346
handler.messageReceived(request, channel, task);
302347
}
303348
}
349+
350+
private static class TestAppender extends AbstractAppender {
351+
private final List<String> logs = new ArrayList<>();
352+
353+
TestAppender() {
354+
super("TestAppender", null, PatternLayout.createDefaultLayout(), false, Property.EMPTY_ARRAY);
355+
start();
356+
}
357+
358+
@Override
359+
public void append(LogEvent event) {
360+
logs.add(event.getMessage().getFormattedMessage());
361+
if (event.getThrown() != null) {
362+
logs.add(event.getThrown().toString());
363+
for (StackTraceElement element : event.getThrown().getStackTrace()) {
364+
logs.add(element.toString());
365+
}
366+
}
367+
}
368+
369+
boolean containsExceptionMessage(String exceptionMessage) {
370+
Pattern pattern = Pattern.compile(Pattern.quote(exceptionMessage), Pattern.CASE_INSENSITIVE);
371+
return logs.stream().anyMatch(log -> pattern.matcher(log).find());
372+
}
373+
}
304374
}

0 commit comments

Comments
 (0)