This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/main by this push:
     new 0828381f1f Improve `SocketAppenderReconnectTest` (#3004)
0828381f1f is described below

commit 0828381f1f147b7d98ab8d8732f38343dc215330
Author: Volkan Yazıcı <[email protected]>
AuthorDate: Tue Oct 1 22:25:59 2024 +0200

    Improve `SocketAppenderReconnectTest` (#3004)
---
 .../log4j/core/appender/LineReadingTcpServer.java  |  4 +-
 .../core/appender/SocketAppenderReconnectTest.java | 45 +++++++++++++++-------
 2 files changed, 35 insertions(+), 14 deletions(-)

diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/LineReadingTcpServer.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/LineReadingTcpServer.java
index aa5119164a..9f4028423a 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/LineReadingTcpServer.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/LineReadingTcpServer.java
@@ -23,6 +23,7 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
@@ -82,7 +83,8 @@ final class LineReadingTcpServer implements AutoCloseable {
     }
 
     private ServerSocket createServerSocket(final int port) throws IOException 
{
-        final ServerSocket serverSocket = 
serverSocketFactory.createServerSocket(port);
+        final ServerSocket serverSocket =
+                serverSocketFactory.createServerSocket(port, 1, 
InetAddress.getLoopbackAddress());
         serverSocket.setReuseAddress(true);
         serverSocket.setSoTimeout(0); // Zero indicates `accept()` will block 
indefinitely
         await("server socket binding")
diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
index ba590cfe25..618caad4c0 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderReconnectTest.java
@@ -47,6 +47,7 @@ import org.apache.logging.log4j.core.net.TcpSocketManager;
 import org.apache.logging.log4j.core.net.TcpSocketManager.HostResolver;
 import org.apache.logging.log4j.core.net.ssl.SslKeyStoreConstants;
 import org.apache.logging.log4j.plugins.di.DI;
+import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.test.junit.UsingStatusListener;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.CleanupMode;
@@ -57,6 +58,8 @@ import org.junit.jupiter.api.io.TempDir;
  */
 public class SocketAppenderReconnectTest {
 
+    private static final String CLASS_NAME = 
SocketAppenderReconnectTest.class.getSimpleName();
+
     private static final int EPHEMERAL_PORT = 0;
 
     private static final String APPENDER_NAME = "TestSocket";
@@ -73,10 +76,11 @@ public class SocketAppenderReconnectTest {
 
             // Start the server.
             server.start("Main", EPHEMERAL_PORT);
-            final int port = server.getServerSocket().getLocalPort();
+            final String serverHost = 
server.getServerSocket().getInetAddress().getHostAddress();
+            final int serverPort = server.getServerSocket().getLocalPort();
 
             // Initialize the logger context
-            final Configuration config = createConfiguration(port, null);
+            final Configuration config = createConfiguration(serverHost, 
serverPort, null);
             try (final LoggerContext loggerContext = 
createStartedLoggerContext(config)) {
 
                 // Configure the error handler
@@ -91,7 +95,7 @@ public class SocketAppenderReconnectTest {
                 verifyLoggingFailure(loggerContext, errorHandler);
 
                 // Start the server again, and verify the logging success.
-                server.start("Main", port);
+                server.start("Main", serverPort);
                 verifyLoggingSuccess(loggerContext, server, errorHandler);
             }
         }
@@ -117,9 +121,9 @@ public class SocketAppenderReconnectTest {
 
                 // Initialize the logger context
                 final Configuration config = createConfiguration(
-                        // Passing an invalid port, since the resolution is 
supposed to be performed by the mocked host
-                        // resolver anyway.
-                        0, null);
+                        // Passing dummy host & port, since the resolution is 
supposed to be performed by the mocked
+                        // host resolver anyway.
+                        "localhost", 0, null);
                 try (final LoggerContext loggerContext = 
createStartedLoggerContext(config)) {
 
                     // Configure the error handler
@@ -211,7 +215,9 @@ public class SocketAppenderReconnectTest {
 
             // Start the 1st server
             server1.start("1st", EPHEMERAL_PORT);
-            final int port = server1.getServerSocket().getLocalPort();
+            final String server1Host =
+                    
server1.getServerSocket().getInetAddress().getHostAddress();
+            final int server1Port = server1.getServerSocket().getLocalPort();
 
             // Create the configuration transformer to add the `<Ssl>`, 
`<KeyStore>`, and `<TrustStore>` elements
             final BiFunction<
@@ -237,7 +243,8 @@ public class SocketAppenderReconnectTest {
                     };
 
             // Initialize the logger context
-            final Configuration config1 = createConfiguration(port, 
appenderComponentBuilderTransformer);
+            final Configuration config1 =
+                    createConfiguration(server1Host, server1Port, 
appenderComponentBuilderTransformer);
             try (final LoggerContext loggerContext = 
createStartedLoggerContext(config1)) {
 
                 // Configure the error handler
@@ -249,7 +256,7 @@ public class SocketAppenderReconnectTest {
 
                 // Stop the 1st server and start the 2nd one (using different 
SSL configuration!) on the same port
                 server1.close();
-                server2.start("2nd", port);
+                server2.start("2nd", server1Port);
 
                 // Stage the key store files using the 2nd `SSLContext`
                 Files.write(keyStoreFilePath, 
Files.readAllBytes(Paths.get(keyStore2Location)));
@@ -281,7 +288,8 @@ public class SocketAppenderReconnectTest {
                 //
                 // Hence, the only way is to programmatically build the very 
same configuration, twice, and use the 1st
                 // one for initialization, and the 2nd one for reconfiguration.
-                final Configuration config2 = createConfiguration(port, 
appenderComponentBuilderTransformer);
+                final Configuration config2 =
+                        createConfiguration(server1Host, server1Port, 
appenderComponentBuilderTransformer);
                 loggerContext.reconfigure(config2);
 
                 // Verify the working state on the 2nd server
@@ -291,6 +299,7 @@ public class SocketAppenderReconnectTest {
     }
 
     private static Configuration createConfiguration(
+            final String host,
             final int port,
             @Nullable
                     final BiFunction<
@@ -308,7 +317,7 @@ public class SocketAppenderReconnectTest {
         // Create the appender configuration
         final AppenderComponentBuilder appenderComponentBuilder = configBuilder
                 .newAppender(APPENDER_NAME, "Socket")
-                .addAttribute("host", "localhost")
+                .addAttribute("host", host)
                 .addAttribute("port", port)
                 .addAttribute("ignoreExceptions", false)
                 .addAttribute("reconnectionDelayMillis", 10)
@@ -341,6 +350,9 @@ public class SocketAppenderReconnectTest {
             final BufferingErrorHandler errorHandler)
             throws Exception {
 
+        // Report status
+        StatusLogger.getLogger().debug("[{}] verifying logging success", 
CLASS_NAME);
+
         // Create messages to log
         final int messageCount = 2;
         assertThat(messageCount)
@@ -356,10 +368,10 @@ public class SocketAppenderReconnectTest {
         await("first socket append")
                 .pollInterval(100, TimeUnit.MILLISECONDS)
                 .atMost(120, TimeUnit.SECONDS)
-                .until(() -> {
+                .ignoreExceptions()
+                .untilAsserted(() -> {
                     final String message = expectedMessages.get(0);
                     logger.info(message);
-                    return true;
                 });
 
         // Reset the error handler
@@ -381,11 +393,18 @@ public class SocketAppenderReconnectTest {
 
     private static void verifyLoggingFailure(
             final LoggerContext loggerContext, final BufferingErrorHandler 
errorHandler) {
+
+        // Report status
+        StatusLogger.getLogger().debug("[{}] verifying logging failure", 
CLASS_NAME);
+
+        // Verify the configuration
         final Logger logger = loggerContext.getRootLogger();
         final int retryCount = 3;
         assertThat(retryCount)
                 .as("expecting `retryCount > 1` due to LOG4J2-2829")
                 .isGreaterThan(1);
+
+        // Verify the failure
         for (int i = 0; i < retryCount; i++) {
             try {
                 logger.info("should fail #" + i);

Reply via email to