diff --git a/gateway-ha/pom.xml b/gateway-ha/pom.xml
index 25225d77e..294301317 100644
--- a/gateway-ha/pom.xml
+++ b/gateway-ha/pom.xml
@@ -166,6 +166,12 @@
test
+
+ org.junit.jupiter
+ junit-jupiter-params
+ test
+
+
com.h2database
h2
diff --git a/gateway-ha/src/main/java/io/trino/gateway/ha/clustermonitor/ClusterStatsJdbcMonitor.java b/gateway-ha/src/main/java/io/trino/gateway/ha/clustermonitor/ClusterStatsJdbcMonitor.java
index 93e2b3362..6bf13f6e9 100644
--- a/gateway-ha/src/main/java/io/trino/gateway/ha/clustermonitor/ClusterStatsJdbcMonitor.java
+++ b/gateway-ha/src/main/java/io/trino/gateway/ha/clustermonitor/ClusterStatsJdbcMonitor.java
@@ -62,7 +62,7 @@ public ClusterStats monitor(ProxyBackendConfiguration backend) {
jdbcUrl = String
.format("jdbc:trino://%s:%s/system",
parsedUrl.getHost(),
- parsedUrl.getPort() == -1 ? 80 : parsedUrl.getPort()
+ parsedUrl.getPort() == -1 ? parsedUrl.getDefaultPort() : parsedUrl.getPort()
);
} catch (MalformedURLException e) {
log.error("could not parse backend url {} ", url);
diff --git a/gateway-ha/src/test/java/io/trino/gateway/ha/clustermonitor/TestClusterStatsJdbcMonitor.java b/gateway-ha/src/test/java/io/trino/gateway/ha/clustermonitor/TestClusterStatsJdbcMonitor.java
new file mode 100644
index 000000000..76946952f
--- /dev/null
+++ b/gateway-ha/src/test/java/io/trino/gateway/ha/clustermonitor/TestClusterStatsJdbcMonitor.java
@@ -0,0 +1,89 @@
+package io.trino.gateway.ha.clustermonitor;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.when;
+
+import io.trino.gateway.ha.config.BackendStateConfiguration;
+import io.trino.gateway.ha.config.ProxyBackendConfiguration;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.stream.Stream;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
+@Slf4j
+@org.junit.jupiter.api.TestInstance(org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS)
+public class TestClusterStatsJdbcMonitor {
+ ClusterStatsJdbcMonitor clusterStatsJdbcMonitor;
+ @Mock
+ private Connection con;
+ @Mock
+ private PreparedStatement stmt;
+ @Mock
+ private ResultSet rs;
+ private java.util.Properties properties;
+
+ @BeforeEach
+ public void initMocks() {
+ log.info("initializing test");
+ MockitoAnnotations.openMocks(this);
+ }
+
+ @AfterAll
+ public void resetMocks() {
+ log.info("resetting mocks");
+ Mockito.reset(con);
+ Mockito.reset(stmt);
+ Mockito.reset(rs);
+ }
+
+ @BeforeAll
+ public void setUp() {
+ BackendStateConfiguration backendStateConfiguration = new BackendStateConfiguration();
+ backendStateConfiguration.setUsername("Trino");
+ properties = new java.util.Properties();
+ properties.setProperty("user", backendStateConfiguration.getUsername());
+ properties.setProperty("password", backendStateConfiguration.getPassword());
+ properties.setProperty("SSL", String.valueOf(backendStateConfiguration.getSsl()));
+ clusterStatsJdbcMonitor = new ClusterStatsJdbcMonitor(backendStateConfiguration);
+ }
+
+ private static Stream provideSchemeAndPort(){
+ return Stream.of(
+ Arguments.of("https", "90", "jdbc:trino://trino.example.com:90/system"),
+ Arguments.of("http", "90", "jdbc:trino://trino.example.com:90/system"),
+ Arguments.of("https", "", "jdbc:trino://trino.example.com:443/system"),
+ Arguments.of("http", "", "jdbc:trino://trino.example.com:80/system")
+ );
+ }
+ @ParameterizedTest
+ @MethodSource("provideSchemeAndPort")
+ public void testProtocol(String scheme, String port, String expectedJdbcUrl) throws java.sql.SQLException {
+ try(MockedStatic m = Mockito.mockStatic(java.sql.DriverManager.class)) {
+ m.when(() -> DriverManager.getConnection(anyString(), any())).thenReturn(con);
+ when(con.prepareStatement(anyString())).thenReturn(stmt);
+ when(stmt.executeQuery()).thenReturn(rs);
+ ProxyBackendConfiguration proxyBackend = new ProxyBackendConfiguration();
+ proxyBackend.setProxyTo(String.format("%s://trino.example.com:%s", scheme, port));
+ proxyBackend.setName("abc");
+
+ clusterStatsJdbcMonitor.monitor(proxyBackend);
+
+ m.verify(() -> DriverManager.getConnection(expectedJdbcUrl, properties));
+ }
+ }
+}
+
diff --git a/gateway-ha/src/test/java/io/trino/gateway/ha/router/TestHaRoutingManager.java b/gateway-ha/src/test/java/io/trino/gateway/ha/router/TestHaRoutingManager.java
index 0ef8ee451..2ff523499 100644
--- a/gateway-ha/src/test/java/io/trino/gateway/ha/router/TestHaRoutingManager.java
+++ b/gateway-ha/src/test/java/io/trino/gateway/ha/router/TestHaRoutingManager.java
@@ -47,7 +47,7 @@ private void addMockBackends() {
proxyBackend.setProxyTo(backend + ".trino.example.com");
proxyBackend.setExternalUrl("trino.example.com");
backendManager.addBackend(proxyBackend);
- //set backend as healthyti start with
+ //set backend as healthy start with
haRoutingManager.upateBackEndHealth(backend, true);
}
diff --git a/pom.xml b/pom.xml
index cff13a652..f4d600ea3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,7 +123,7 @@
org.junit.jupiter
junit-jupiter-api
- 5.10.0
+ ${dep.junit.version}
test