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

smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 69a74ce  KNOX-2600 - It's now possible to setup a PostgreSQL 
connection using a JDBC URL (#444)
69a74ce is described below

commit 69a74ce9c3ef509ab8fdb947bf110bb7f51c0aef
Author: Sandor Molnar <[email protected]>
AuthorDate: Mon May 3 21:33:39 2021 +0200

    KNOX-2600 - It's now possible to setup a PostgreSQL connection using a JDBC 
URL (#444)
---
 .../knox/gateway/config/impl/GatewayConfigImpl.java    |  6 ++++++
 .../java/org/apache/knox/gateway/util/JDBCUtils.java   | 16 ++++++++++------
 .../org/apache/knox/gateway/util/JDBCUtilsTest.java    | 18 ++++++++++++++++++
 .../org/apache/knox/gateway/config/GatewayConfig.java  |  2 ++
 .../org/apache/knox/gateway/GatewayTestConfig.java     |  5 +++++
 5 files changed, 41 insertions(+), 6 deletions(-)

diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
 
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
index 16fdc2c..486e7dd 100644
--- 
a/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
+++ 
b/gateway-server/src/main/java/org/apache/knox/gateway/config/impl/GatewayConfigImpl.java
@@ -274,6 +274,7 @@ public class GatewayConfigImpl extends Configuration 
implements GatewayConfig {
 
   //Gateway Database related properties
   private static final String GATEWAY_DATABASE_TYPE = 
GATEWAY_CONFIG_FILE_PREFIX + ".database.type";
+  private static final String GATEWAY_DATABASE_CONN_URL = 
GATEWAY_CONFIG_FILE_PREFIX + ".database.connection.url";
   private static final String GATEWAY_DATABASE_HOST =  
GATEWAY_CONFIG_FILE_PREFIX + ".database.host";
   private static final String GATEWAY_DATABASE_PORT =  
GATEWAY_CONFIG_FILE_PREFIX + ".database.port";
   private static final String GATEWAY_DATABASE_NAME =  
GATEWAY_CONFIG_FILE_PREFIX + ".database.name";
@@ -1248,6 +1249,11 @@ public class GatewayConfigImpl extends Configuration 
implements GatewayConfig {
   }
 
   @Override
+  public String getDatabaseConnectionUrl() {
+    return get(GATEWAY_DATABASE_CONN_URL);
+  }
+
+  @Override
   public String getDatabaseHost() {
     return get(GATEWAY_DATABASE_HOST);
   }
diff --git 
a/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java 
b/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
index 644e4de..b2e6068 100644
--- a/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
+++ b/gateway-server/src/main/java/org/apache/knox/gateway/util/JDBCUtils.java
@@ -45,12 +45,16 @@ public class JDBCUtils {
 
   private static DataSource createPostgresDataSource(GatewayConfig 
gatewayConfig, AliasService aliasService) throws AliasServiceException {
     final PGSimpleDataSource postgresDataSource = new PGSimpleDataSource();
-    postgresDataSource.setDatabaseName(gatewayConfig.getDatabaseName());
-    postgresDataSource.setServerNames(new String[] { 
gatewayConfig.getDatabaseHost() });
-    postgresDataSource.setPortNumbers(new int[] { 
gatewayConfig.getDatabasePort() });
-    postgresDataSource.setUser(getDatabaseUser(aliasService));
-    postgresDataSource.setPassword(getDatabasePassword(aliasService));
-    configurePostgreSQLSsl(gatewayConfig, aliasService, postgresDataSource);
+    if (gatewayConfig.getDatabaseConnectionUrl() != null) {
+      postgresDataSource.setUrl(gatewayConfig.getDatabaseConnectionUrl());
+    } else {
+      postgresDataSource.setDatabaseName(gatewayConfig.getDatabaseName());
+      postgresDataSource.setServerNames(new String[] { 
gatewayConfig.getDatabaseHost() });
+      postgresDataSource.setPortNumbers(new int[] { 
gatewayConfig.getDatabasePort() });
+      postgresDataSource.setUser(getDatabaseUser(aliasService));
+      postgresDataSource.setPassword(getDatabasePassword(aliasService));
+      configurePostgreSQLSsl(gatewayConfig, aliasService, postgresDataSource);
+    }
     return postgresDataSource;
   }
 
diff --git 
a/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java 
b/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
index a83a4ea..f80ff47 100644
--- 
a/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
+++ 
b/gateway-server/src/test/java/org/apache/knox/gateway/util/JDBCUtilsTest.java
@@ -106,6 +106,24 @@ public class JDBCUtilsTest {
   }
 
   @Test
+  public void testGetPostgreSqlDatasourceFromJdbcConnectionUrl() throws 
AliasServiceException {
+    final String connectionUrl = 
"jdbc:postgresql://postgresql_host:1234/testDb?user=smolnar&password=secret&ssl=true&sslmode=verify-ca&sslrootcert=/var/lib/knox/gateway/conf/postgresql/root.crt";
+    final GatewayConfig gatewayConfig = 
EasyMock.createNiceMock(GatewayConfig.class);
+    
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.POSTGRESQL_DB_TYPE).anyTimes();
+    
EasyMock.expect(gatewayConfig.getDatabaseConnectionUrl()).andReturn(connectionUrl).anyTimes();
+    EasyMock.replay(gatewayConfig);
+    final PGSimpleDataSource dataSource = (PGSimpleDataSource) 
JDBCUtils.getDataSource(gatewayConfig, null);
+    assertEquals("postgresql_host", dataSource.getServerNames()[0]);
+    assertEquals(1234, dataSource.getPortNumbers()[0]);
+    assertEquals("testDb", dataSource.getDatabaseName());
+    assertEquals("smolnar", dataSource.getUser());
+    assertEquals("secret", dataSource.getPassword());
+    assertTrue(dataSource.isSsl());
+    assertEquals(dataSource.getSslRootCert(), 
"/var/lib/knox/gateway/conf/postgresql/root.crt");
+    EasyMock.verify(gatewayConfig);
+  }
+
+  @Test
   public void shouldReturnDerbyDataSource() throws Exception {
     final GatewayConfig gatewayConfig = 
EasyMock.createNiceMock(GatewayConfig.class);
     
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.DERBY_DB_TYPE).anyTimes();
diff --git 
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java 
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
index 1e015cf..38d866e 100644
--- 
a/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
+++ 
b/gateway-spi/src/main/java/org/apache/knox/gateway/config/GatewayConfig.java
@@ -750,6 +750,8 @@ public interface GatewayConfig {
 
   String getDatabaseType();
 
+  String getDatabaseConnectionUrl();
+
   String getDatabaseHost();
 
   int getDatabasePort();
diff --git 
a/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
 
b/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
index c3e9773..ab8df65 100644
--- 
a/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
+++ 
b/gateway-test-release-utils/src/main/java/org/apache/knox/gateway/GatewayTestConfig.java
@@ -860,6 +860,11 @@ public class GatewayTestConfig extends Configuration 
implements GatewayConfig {
   }
 
   @Override
+  public String getDatabaseConnectionUrl() {
+    return null;
+  }
+
+  @Override
   public String getDatabaseHost() {
     return null;
   }

Reply via email to