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

pkarwasz pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 8febdb0667197bbd80132299486f6a6f07eb9eb6
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Sun May 29 07:40:37 2022 +0200

    Downgrade Cassandra to 3.11.13 and fix test
    
    Due to architectural changes the test needs to be updated.
    
    This also increases the connection timeout to 60s to decrease the test's
    instability.
---
 log4j-cassandra/pom.xml                            |  8 +++++-
 .../logging/log4j/cassandra/CassandraRule.java     | 29 +++++++++++++++-------
 2 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/log4j-cassandra/pom.xml b/log4j-cassandra/pom.xml
index 25a7d98e36..ef58aed750 100644
--- a/log4j-cassandra/pom.xml
+++ b/log4j-cassandra/pom.xml
@@ -35,7 +35,7 @@
     <projectDir>/log4j-cassandra</projectDir>
     <module.name>org.apache.logging.log4j.cassandra</module.name>
     <maven.doap.skip>true</maven.doap.skip>
-    <cassandra-all.version>4.0.4</cassandra-all.version>
+    <cassandra-all.version>3.11.13</cassandra-all.version>
   </properties>
 
   <dependencies>
@@ -88,6 +88,12 @@
         </exclusion>
       </exclusions>
     </dependency>
+    <dependency>
+      <groupId>org.apache.cassandra</groupId>
+      <artifactId>cassandra-thrift</artifactId>
+      <version>3.11.13</version>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-slf4j-impl</artifactId>
diff --git 
a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
 
b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
index aaaea5060c..56dd7e4227 100644
--- 
a/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
+++ 
b/log4j-cassandra/src/test/java/org/apache/logging/log4j/cassandra/CassandraRule.java
@@ -25,22 +25,24 @@ import java.net.InetSocketAddress;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.security.Permission;
+import java.util.Collection;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ThreadFactory;
 
 import org.apache.cassandra.service.CassandraDaemon;
-import org.apache.cassandra.service.CassandraDaemon.Server;
+import org.apache.cassandra.service.NativeTransportService;
+import org.apache.cassandra.transport.Server;
 import org.apache.cassandra.transport.Server.ConnectionTracker;
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.core.util.Cancellable;
 import org.apache.logging.log4j.core.util.Closer;
 import org.apache.logging.log4j.core.util.Log4jThreadFactory;
-import org.apache.logging.log4j.test.AvailablePortFinder;
 import org.apache.logging.log4j.util.PropertiesUtil;
 import org.junit.rules.ExternalResource;
 
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
+import com.datastax.driver.core.SocketOptions;
 
 import io.netty.channel.socket.ServerSocketChannel;
 
@@ -88,6 +90,7 @@ public class CassandraRule extends ExternalResource {
         System.setProperty("cassandra.native_transport_port", 
Integer.toString(nativeSocket.getPort()));
         cluster = Cluster.builder()
                 .addContactPointsWithPorts(nativeSocket)
+                .withSocketOptions(new 
SocketOptions().setConnectTimeoutMillis(60000))
                 .build();
         
         try (final Session session = cluster.connect()) {
@@ -107,7 +110,7 @@ public class CassandraRule extends ExternalResource {
 
     private static class EmbeddedCassandra implements Cancellable {
 
-        private final CassandraDaemon daemon = new CassandraDaemon();
+        private final CassandraDaemon daemon = 
CassandraDaemon.getInstanceForTesting();
         private final CountDownLatch latch;
 
         private EmbeddedCassandra(final CountDownLatch latch) {
@@ -147,6 +150,7 @@ public class CassandraRule extends ExternalResource {
 
         @Override
         public void run() {
+            daemon.applyConfig();
             try {
                 daemon.init(null);
             } catch (final IOException e) {
@@ -157,10 +161,17 @@ public class CassandraRule extends ExternalResource {
         }
 
         public InetSocketAddress getNativeSocket() {
-            final Server server = daemon.nativeServer;
-            if (server instanceof org.apache.cassandra.transport.Server) {
-                try {
-                    final Field trackerField = 
org.apache.cassandra.transport.Server.class.getDeclaredField("connectionTracker");
+            try {
+                final Field nativeServiceField = 
CassandraDaemon.class.getDeclaredField("nativeTransportService");
+                nativeServiceField.setAccessible(true);
+                final NativeTransportService nativeService = 
(NativeTransportService) nativeServiceField.get(daemon);
+                final Field serversField = 
NativeTransportService.class.getDeclaredField("servers");
+                serversField.setAccessible(true);
+                @SuppressWarnings("unchecked")
+                final Collection<Server> servers = (Collection<Server>) 
serversField.get(nativeService);
+                if (servers.size() > 0) {
+                    final Server server = servers.iterator().next();
+                    final Field trackerField = 
Server.class.getDeclaredField("connectionTracker");
                     trackerField.setAccessible(true);
                     final ConnectionTracker connectionTracker = 
(ConnectionTracker) trackerField.get(server);
                     final ServerSocketChannel serverChannel = 
connectionTracker.allChannels
@@ -170,9 +181,9 @@ public class CassandraRule extends ExternalResource {
                             .findFirst()
                             .orElse(null);
                     return serverChannel.localAddress();
-                } catch (ReflectiveOperationException | ClassCastException e) {
-                    fail(e);
                 }
+            } catch (ReflectiveOperationException | ClassCastException e) {
+                fail(e);
             }
             return null;
         }

Reply via email to