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

ycai pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 686d9e86 CASSANDRASC-119: Fix flaky test due to port conflicts (#113)
686d9e86 is described below

commit 686d9e8699bd0a56857e24523d883120023b9841
Author: Yifan Cai <[email protected]>
AuthorDate: Mon Apr 15 09:48:59 2024 -0700

    CASSANDRASC-119: Fix flaky test due to port conflicts (#113)
    
    Patch by Yifan Cai; Reviewed by Francisco Guerrero for CASSANDRASC-119
---
 .../apache/cassandra/sidecar/server/Server.java    |  5 ++-
 .../cassandra/sidecar/server/ServerVerticle.java   |  5 ++-
 .../sidecar/testing/IntegrationTestModule.java     |  6 +--
 .../cassandra/sidecar/ExecutorPoolsHelper.java     |  4 +-
 .../org/apache/cassandra/sidecar/TestModule.java   |  6 +--
 .../sstableuploads/BaseUploadsHandlerTest.java     |  8 ++--
 .../cassandra/sidecar/server/ServerSSLTest.java    | 46 +++++-----------------
 .../cassandra/sidecar/utils/CacheFactoryTest.java  |  4 +-
 .../sidecar/utils/SSTableImporterTest.java         |  6 +--
 .../config/yaml/TestServiceConfiguration.java      | 41 +++++++++++++++++++
 10 files changed, 71 insertions(+), 60 deletions(-)

diff --git a/src/main/java/org/apache/cassandra/sidecar/server/Server.java 
b/src/main/java/org/apache/cassandra/sidecar/server/Server.java
index 51b67b2d..d6bd652f 100644
--- a/src/main/java/org/apache/cassandra/sidecar/server/Server.java
+++ b/src/main/java/org/apache/cassandra/sidecar/server/Server.java
@@ -208,14 +208,15 @@ public class Server
     /**
      * Expose the port of the first deployed verticle for testing purposes
      *
-     * @return the port where the first verticle is deployed, or -1 if the 
server has not been deployed
+     * @return the port where the first verticle is deployed
+     * @throws IllegalStateException if the server has not been deployed
      */
     @VisibleForTesting
     public int actualPort()
     {
         if (!deployedServerVerticles.isEmpty())
             return deployedServerVerticles.get(0).actualPort();
-        return -1;
+        throw new IllegalStateException("No deployed server verticles. Maybe 
server failed to deploy due to port conflict");
     }
 
     protected Future<String> notifyServerStart(String deploymentId)
diff --git 
a/src/main/java/org/apache/cassandra/sidecar/server/ServerVerticle.java 
b/src/main/java/org/apache/cassandra/sidecar/server/ServerVerticle.java
index 109b3695..54ca7041 100644
--- a/src/main/java/org/apache/cassandra/sidecar/server/ServerVerticle.java
+++ b/src/main/java/org/apache/cassandra/sidecar/server/ServerVerticle.java
@@ -131,13 +131,14 @@ public class ServerVerticle extends AbstractVerticle
     }
 
     /**
-     * @return the actual port of the first deployed server, or -1 if no 
servers are deployed
+     * @return the actual port of the first deployed server
+     * @throws IllegalStateException if no servers are deployed
      */
     @VisibleForTesting
     int actualPort()
     {
         if (deployedServers != null && !deployedServers.isEmpty())
             return deployedServers.get(0).actualPort();
-        return -1;
+        throw new IllegalStateException("No deployed server. Maybe server 
failed to deploy due to port conflict");
     }
 }
diff --git 
a/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestModule.java
 
b/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestModule.java
index d0c069d5..5a5deadc 100644
--- 
a/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestModule.java
+++ 
b/src/test/integration/org/apache/cassandra/sidecar/testing/IntegrationTestModule.java
@@ -37,8 +37,8 @@ import 
org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.SidecarConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.HealthCheckConfigurationImpl;
 import 
org.apache.cassandra.sidecar.config.yaml.SchemaKeyspaceConfigurationImpl;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 import org.jetbrains.annotations.NotNull;
 
 import static 
org.apache.cassandra.sidecar.server.SidecarServerEvents.ON_SERVER_STOP;
@@ -67,9 +67,7 @@ public class IntegrationTestModule extends AbstractModule
     public SidecarConfiguration configuration()
     {
         ServiceConfiguration conf
-        = ServiceConfigurationImpl.builder()
-                                  .host("127.0.0.1")
-                                  .port(0) // let the test find an available 
port
+        = TestServiceConfiguration.builder()
                                   
.schemaKeyspaceConfiguration(SchemaKeyspaceConfigurationImpl.builder()
                                                                                
               .isEnabled(true)
                                                                                
               .build())
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/ExecutorPoolsHelper.java 
b/src/test/java/org/apache/cassandra/sidecar/ExecutorPoolsHelper.java
index fbf2c03e..a7603e40 100644
--- a/src/test/java/org/apache/cassandra/sidecar/ExecutorPoolsHelper.java
+++ b/src/test/java/org/apache/cassandra/sidecar/ExecutorPoolsHelper.java
@@ -27,7 +27,7 @@ import io.vertx.core.Vertx;
 import org.apache.cassandra.sidecar.concurrent.ExecutorPools;
 import org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.WorkerPoolConfiguration;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.WorkerPoolConfigurationImpl;
 
 import static 
org.apache.cassandra.sidecar.config.ServiceConfiguration.INTERNAL_POOL;
@@ -41,7 +41,7 @@ public class ExecutorPoolsHelper
     public static ExecutorPools createdSharedTestPool(Vertx vertx)
     {
         ServiceConfiguration serviceConfiguration
-        = ServiceConfigurationImpl.builder()
+        = TestServiceConfiguration.builder()
                                   
.workerPoolsConfiguration(buildTestWorkerPoolConfiguration())
                                   .build();
         return new ExecutorPools(vertx, serviceConfiguration);
diff --git a/src/test/java/org/apache/cassandra/sidecar/TestModule.java 
b/src/test/java/org/apache/cassandra/sidecar/TestModule.java
index c69e06ad..399f7bcc 100644
--- a/src/test/java/org/apache/cassandra/sidecar/TestModule.java
+++ b/src/test/java/org/apache/cassandra/sidecar/TestModule.java
@@ -52,8 +52,8 @@ import 
org.apache.cassandra.sidecar.config.yaml.HealthCheckConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.RestoreJobConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SSTableUploadConfigurationImpl;
 import 
org.apache.cassandra.sidecar.config.yaml.SchemaKeyspaceConfigurationImpl;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.ThrottleConfigurationImpl;
 import org.apache.cassandra.sidecar.metrics.instance.InstanceMetricsImpl;
 import org.apache.cassandra.sidecar.stats.RestoreJobStats;
@@ -103,9 +103,7 @@ public class TestModule extends AbstractModule
                                        .replicationStrategy("SimpleStrategy")
                                        .build();
         ServiceConfiguration serviceConfiguration =
-        ServiceConfigurationImpl.builder()
-                                .host("127.0.0.1")
-                                .port(0) // let the test find an available port
+        TestServiceConfiguration.builder()
                                 .throttleConfiguration(throttleConfiguration)
                                 
.schemaKeyspaceConfiguration(schemaKeyspaceConfiguration)
                                 
.ssTableUploadConfiguration(uploadConfiguration)
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/BaseUploadsHandlerTest.java
 
b/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/BaseUploadsHandlerTest.java
index d45949f3..0c8683d7 100644
--- 
a/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/BaseUploadsHandlerTest.java
+++ 
b/src/test/java/org/apache/cassandra/sidecar/routes/sstableuploads/BaseUploadsHandlerTest.java
@@ -57,8 +57,8 @@ import 
org.apache.cassandra.sidecar.config.SSTableUploadConfiguration;
 import org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.SidecarConfiguration;
 import org.apache.cassandra.sidecar.config.TrafficShapingConfiguration;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 import org.apache.cassandra.sidecar.server.MainModule;
 import org.apache.cassandra.sidecar.server.Server;
 import org.apache.cassandra.sidecar.snapshots.SnapshotUtils;
@@ -95,8 +95,6 @@ class BaseUploadsHandlerTest
     protected SidecarRateLimiter ingressFileRateLimiter;
     protected CassandraTableOperations mockCFOperations;
 
-
-
     @BeforeEach
     void setup() throws InterruptedException, IOException
     {
@@ -117,7 +115,7 @@ class BaseUploadsHandlerTest
         
when(trafficShapingConfiguration.inboundGlobalFileBandwidthBytesPerSecond())
         .thenReturn(DEFAULT_INBOUND_FILE_GLOBAL_BANDWIDTH_LIMIT);
         ServiceConfiguration serviceConfiguration =
-        ServiceConfigurationImpl.builder()
+        TestServiceConfiguration.builder()
                                 .requestIdleTimeoutMillis(500)
                                 
.requestTimeoutMillis(TimeUnit.SECONDS.toMillis(30))
                                 
.ssTableUploadConfiguration(mockSSTableUploadConfiguration)
@@ -240,7 +238,7 @@ class BaseUploadsHandlerTest
 
         public TestCassandraAdapterDelegate()
         {
-            super(Vertx.vertx(), 1, null, null, null, null, null, "localhost", 
9043);
+            super(Vertx.vertx(), 1, null, null, null, null, null, "localhost", 
9042);
         }
 
         @Override
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/server/ServerSSLTest.java 
b/src/test/java/org/apache/cassandra/sidecar/server/ServerSSLTest.java
index bacefd73..e19d8237 100644
--- a/src/test/java/org/apache/cassandra/sidecar/server/ServerSSLTest.java
+++ b/src/test/java/org/apache/cassandra/sidecar/server/ServerSSLTest.java
@@ -54,9 +54,9 @@ import io.vertx.junit5.VertxTestContext;
 import org.apache.cassandra.sidecar.TestModule;
 import org.apache.cassandra.sidecar.config.SidecarConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.KeyStoreConfigurationImpl;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SslConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 import org.assertj.core.api.InstanceOfAssertFactories;
 
 import static 
org.apache.cassandra.sidecar.common.ResourceUtils.writeResourceToPath;
@@ -184,10 +184,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -207,10 +204,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -231,10 +225,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(9043)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -256,10 +247,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -281,10 +269,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -309,10 +294,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -332,10 +314,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(0)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -361,10 +340,7 @@ class ServerSSLTest
                             .build();
 
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
-                                                             .port(9043)
-                                                             .build());
+               .serviceConfiguration(TestServiceConfiguration.newInstance());
         vertx = vertx();
         server = server();
 
@@ -401,12 +377,10 @@ class ServerSSLTest
 
         int serverVerticleInstances = 16;
         builder.sslConfiguration(ssl)
-               .serviceConfiguration(ServiceConfigurationImpl.builder()
-                                                             .host("127.0.0.1")
+               .serviceConfiguration(TestServiceConfiguration.builder()
                                                              // > 1 to ensure 
that hot reloading works for all
                                                              // the deployed 
servers on each verticle instance
                                                              
.serverVerticleInstances(serverVerticleInstances)
-                                                             .port(9043)
                                                              .build());
         vertx = vertx();
 
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/utils/CacheFactoryTest.java 
b/src/test/java/org/apache/cassandra/sidecar/utils/CacheFactoryTest.java
index f8b9e35b..2b394bae 100644
--- a/src/test/java/org/apache/cassandra/sidecar/utils/CacheFactoryTest.java
+++ b/src/test/java/org/apache/cassandra/sidecar/utils/CacheFactoryTest.java
@@ -36,7 +36,7 @@ import 
org.apache.cassandra.sidecar.config.SSTableImportConfiguration;
 import org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.CacheConfigurationImpl;
 import org.apache.cassandra.sidecar.config.yaml.SSTableImportConfigurationImpl;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
@@ -63,7 +63,7 @@ class CacheFactoryTest
         SSTableImportConfiguration ssTableImportConfiguration =
         new SSTableImportConfigurationImpl(ssTableImportCacheConfiguration);
         ServiceConfiguration serviceConfiguration =
-        ServiceConfigurationImpl.builder()
+        TestServiceConfiguration.builder()
                                 
.ssTableImportConfiguration(ssTableImportConfiguration)
                                 .build();
         SSTableImporter mockSSTableImporter = mock(SSTableImporter.class);
diff --git 
a/src/test/java/org/apache/cassandra/sidecar/utils/SSTableImporterTest.java 
b/src/test/java/org/apache/cassandra/sidecar/utils/SSTableImporterTest.java
index 957630c6..b54a817b 100644
--- a/src/test/java/org/apache/cassandra/sidecar/utils/SSTableImporterTest.java
+++ b/src/test/java/org/apache/cassandra/sidecar/utils/SSTableImporterTest.java
@@ -35,7 +35,7 @@ import org.apache.cassandra.sidecar.common.TableOperations;
 import org.apache.cassandra.sidecar.concurrent.ExecutorPools;
 import org.apache.cassandra.sidecar.config.ServiceConfiguration;
 import org.apache.cassandra.sidecar.config.yaml.SSTableImportConfigurationImpl;
-import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
+import org.apache.cassandra.sidecar.config.yaml.TestServiceConfiguration;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -60,7 +60,7 @@ class SSTableImporterTest
     {
         vertx = Vertx.vertx();
         serviceConfiguration =
-        ServiceConfigurationImpl.builder()
+        TestServiceConfiguration.builder()
                                 .ssTableImportConfiguration(new 
SSTableImportConfigurationImpl(10))
                                 .build();
 
@@ -205,7 +205,7 @@ class SSTableImporterTest
     void testCancelImportSucceeds(VertxTestContext context)
     {
         serviceConfiguration =
-        ServiceConfigurationImpl.builder()
+        TestServiceConfiguration.builder()
                                 .ssTableImportConfiguration(new 
SSTableImportConfigurationImpl(500))
                                 .build();
 
diff --git 
a/src/testFixtures/java/org/apache/cassandra/sidecar/config/yaml/TestServiceConfiguration.java
 
b/src/testFixtures/java/org/apache/cassandra/sidecar/config/yaml/TestServiceConfiguration.java
new file mode 100644
index 00000000..08d27736
--- /dev/null
+++ 
b/src/testFixtures/java/org/apache/cassandra/sidecar/config/yaml/TestServiceConfiguration.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.sidecar.config.yaml;
+
+
+import org.apache.cassandra.sidecar.config.ServiceConfiguration;
+
+/**
+ * A ServiceConfiguration implementation created for test.
+ * It binds to "127.0.0.1" and port 0 to find an available port at test runtime
+ */
+public class TestServiceConfiguration extends ServiceConfigurationImpl
+{
+    public static ServiceConfiguration newInstance()
+    {
+        return builder().build();
+    }
+
+    public static Builder builder()
+    {
+        return ServiceConfigurationImpl.builder()
+                                       .host("127.0.0.1")
+                                       .port(0); // let the test find an 
available port
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to