Can't we use an ephemeral port here? Gary
On Sun, Mar 13, 2022, 19:14 <pkarw...@apache.org> wrote: > 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 > > > The following commit(s) were added to refs/heads/release-2.x by this push: > new 10460ec Switches Cassandra to random port > 10460ec is described below > > commit 10460ec5200aa7eafb33b200f0f349a66e16c708 > Author: Piotr P. Karwasz <piotr.git...@karwasz.org> > AuthorDate: Mon Mar 14 00:13:41 2022 +0100 > > Switches Cassandra to random port > --- > .../org/apache/logging/log4j/cassandra/CassandraRule.java | 15 > ++++++++++++--- > .../src/test/resources/CassandraAppenderTest.xml | 2 +- > 2 files changed, 13 insertions(+), 4 deletions(-) > > 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 2939d07..ad39dd6 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 > @@ -18,22 +18,25 @@ package org.apache.logging.log4j.cassandra; > > import java.io.IOException; > import java.net.InetAddress; > +import java.net.InetSocketAddress; > import java.nio.file.Files; > import java.nio.file.Path; > import java.security.Permission; > import java.util.concurrent.CountDownLatch; > import java.util.concurrent.ThreadFactory; > > -import com.datastax.driver.core.Cluster; > -import com.datastax.driver.core.Session; > import org.apache.cassandra.service.CassandraDaemon; > 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; > + > /** > * JUnit rule to set up and tear down a Cassandra database instance. > */ > @@ -66,12 +69,18 @@ public class CassandraRule extends ExternalResource { > Files.createDirectories(root.resolve("data")); > final Path config = root.resolve("cassandra.yml"); > Files.copy(getClass().getResourceAsStream("/cassandra.yaml"), > config); > + final int nativePort = AvailablePortFinder.getNextAvailable(); > + System.setProperty("cassandra.native_transport_port", > Integer.toString(nativePort)); > + System.setProperty("cassandra.storage_port", > Integer.toString(AvailablePortFinder.getNextAvailable())); > System.setProperty("cassandra.config", "file:" + > config.toString()); > System.setProperty("cassandra.storagedir", root.toString()); > System.setProperty("cassandra-foreground", "true"); // prevents > Cassandra from closing stdout/stderr > THREAD_FACTORY.newThread(embeddedCassandra).start(); > latch.await(); > - cluster = > Cluster.builder().addContactPoints(InetAddress.getLoopbackAddress()).build(); > + cluster = Cluster.builder() > + .addContactPointsWithPorts(new > InetSocketAddress(InetAddress.getLoopbackAddress(), nativePort)) > + .build(); > + > try (final Session session = cluster.connect()) { > session.execute("CREATE KEYSPACE " + keyspace + " WITH > REPLICATION = " + > "{ 'class': 'SimpleStrategy', 'replication_factor': 2 > };"); > diff --git a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml > b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml > index e1f37e9..f9ce643 100644 > --- a/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml > +++ b/log4j-cassandra/src/test/resources/CassandraAppenderTest.xml > @@ -19,7 +19,7 @@ > <Configuration name="CassandraAppenderTest"> > <Appenders> > <Cassandra name="Cassandra" clusterName="Test Cluster" > keyspace="test" table="logs" bufferSize="10" batched="true"> > - <SocketAddress host="localhost" port="9042"/> > + <SocketAddress host="localhost" > port="${sys:cassandra.native_transport_port}"/> > <ColumnMapping name="id" pattern="%uuid{TIME}" > type="java.util.UUID"/> > <ColumnMapping name="timeid" literal="now()"/> > <ColumnMapping name="message" pattern="%message"/> >