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 78278bf62 KNOX-2924 - Added MariaDB support in JDBCTokenStateService 
(#820)
78278bf62 is described below

commit 78278bf623b5cbc7d3c578d18f7c47e0e652c8b5
Author: Sandor Molnar <[email protected]>
AuthorDate: Fri Nov 17 13:18:11 2023 +0100

    KNOX-2924 - Added MariaDB support in JDBCTokenStateService (#820)
---
 gateway-server/pom.xml                             |  4 +++
 .../org/apache/knox/gateway/util/JDBCUtils.java    | 12 +++++++
 .../apache/knox/gateway/util/JDBCUtilsTest.java    | 39 ++++++++++++++++++++++
 pom.xml                                            | 13 ++++++++
 4 files changed, 68 insertions(+)

diff --git a/gateway-server/pom.xml b/gateway-server/pom.xml
index 88495cbcb..67e79dc93 100644
--- a/gateway-server/pom.xml
+++ b/gateway-server/pom.xml
@@ -422,6 +422,10 @@
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mariadb.jdbc</groupId>
+            <artifactId>mariadb-java-client</artifactId>
         </dependency>
            <dependency>
             <groupId>de.thetaphi</groupId>
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 10115692f..8253f4c5b 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
@@ -36,6 +36,7 @@ import org.apache.knox.gateway.config.GatewayConfig;
 import org.apache.knox.gateway.services.security.AliasService;
 import org.apache.knox.gateway.services.security.AliasServiceException;
 import org.hsqldb.jdbc.JDBCDataSource;
+import org.mariadb.jdbc.MariaDbDataSource;
 import org.postgresql.ds.PGSimpleDataSource;
 import org.postgresql.jdbc.SslMode;
 import org.postgresql.ssl.NonValidatingFactory;
@@ -46,6 +47,7 @@ import com.mysql.cj.jdbc.MysqlDataSource;
 public class JDBCUtils {
   public static final String POSTGRESQL_DB_TYPE = "postgresql";
   public static final String MYSQL_DB_TYPE = "mysql";
+  public static final String MARIA_DB_TYPE = "mariadb";
   public static final String DERBY_DB_TYPE = "derbydb";
   public static final String HSQL = "hsql";
   public static final String DATABASE_USER_ALIAS_NAME = 
"gateway_database_user";
@@ -61,6 +63,8 @@ public class JDBCUtils {
       return createHsqlDatasource(gatewayConfig, aliasService);
     } else if 
(MYSQL_DB_TYPE.equalsIgnoreCase(gatewayConfig.getDatabaseType())) {
       return createMySqlDataSource(gatewayConfig, aliasService);
+    } else if 
(MARIA_DB_TYPE.equalsIgnoreCase(gatewayConfig.getDatabaseType())) {
+      return createMariaDbDataSource(gatewayConfig);
     }
     throw new IllegalArgumentException("Invalid database type: " + 
gatewayConfig.getDatabaseType());
   }
@@ -155,6 +159,14 @@ public class JDBCUtils {
     }
   }
 
+  private static DataSource createMariaDbDataSource(GatewayConfig 
gatewayConfig) throws SQLException {
+    if (gatewayConfig.getDatabaseConnectionUrl() != null) {
+      return new MariaDbDataSource(gatewayConfig.getDatabaseConnectionUrl());
+    } else {
+      throw new IllegalArgumentException("MariaDB Java Datasource requires a 
connection string!");
+    }
+  }
+
   private static String getDatabaseUser(AliasService aliasService) throws 
AliasServiceException {
     return getDatabaseAlias(aliasService, DATABASE_USER_ALIAS_NAME);
   }
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 799ae77fe..f6bca1622 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
@@ -30,6 +30,7 @@ import org.apache.knox.gateway.services.security.AliasService;
 import org.apache.knox.gateway.services.security.AliasServiceException;
 import org.easymock.EasyMock;
 import org.junit.Test;
+import org.mariadb.jdbc.MariaDbDataSource;
 import org.postgresql.ds.PGSimpleDataSource;
 import org.postgresql.ssl.NonValidatingFactory;
 
@@ -198,4 +199,42 @@ public class JDBCUtilsTest {
     assertEquals(connectionUrl, dataSource.getUrl());
     EasyMock.verify(gatewayConfig);
   }
+
+  @Test
+  public void shouldReturnMariaDbDatasource() throws Exception {
+    final GatewayConfig gatewayConfig = 
EasyMock.createNiceMock(GatewayConfig.class);
+    
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.MARIA_DB_TYPE).anyTimes();
+    
EasyMock.expect(gatewayConfig.getDatabaseConnectionUrl()).andReturn("jdbc:mariadb://localhost:1234").anyTimes();
+    EasyMock.replay(gatewayConfig);
+    assertTrue(JDBCUtils.getDataSource(gatewayConfig, null) instanceof 
MariaDbDataSource);
+  }
+
+  @Test
+  public void shoulFailToReturnMariaDbDatasourceIfConnectionUrlIsMissing() 
throws Exception {
+    testMariaDbFailure("MariaDB Java Datasource requires a connection 
string!", null);
+  }
+
+  @Test
+  public void shoulFailToReturnMariaDbDatasourceIfConnectionUrlIsWrong() 
throws Exception {
+    final String wrongConnectionUrl = "jdbc:mariadbb://localhost:1234"; // 
typo in the protocol
+    testMariaDbFailure("Wrong mariaDB url: " + wrongConnectionUrl, 
wrongConnectionUrl);
+  }
+
+  private void testMariaDbFailure(String expectedError, String connectionUrl) {
+    boolean error = false;
+    try {
+      final GatewayConfig gatewayConfig = 
EasyMock.createNiceMock(GatewayConfig.class);
+      
EasyMock.expect(gatewayConfig.getDatabaseType()).andReturn(JDBCUtils.MARIA_DB_TYPE).anyTimes();
+      if (connectionUrl != null) {
+        
EasyMock.expect(gatewayConfig.getDatabaseConnectionUrl()).andReturn(connectionUrl).anyTimes();
+      }
+      EasyMock.replay(gatewayConfig);
+      JDBCUtils.getDataSource(gatewayConfig, null);
+    } catch (Exception e) {
+      error = true;
+      assertEquals(expectedError, e.getMessage());
+    }
+    assertTrue(error);
+  }
+
 }
diff --git a/pom.xml b/pom.xml
index 07927d0ec..4bc5a1fa7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -257,6 +257,7 @@
         <pac4j.version>4.5.6</pac4j.version>
         <postgresql.version>42.4.1</postgresql.version>
         <mysql.version>8.0.28</mysql.version>
+        <mariadb.connector.version>3.3.0</mariadb.connector.version>
         <protobuf.version>3.16.3</protobuf.version>
         <powermock.version>2.0.9</powermock.version>
         <purejavacomm.version>0.0.11.1</purejavacomm.version>
@@ -2207,6 +2208,18 @@
                 <artifactId>mysql-connector-java</artifactId>
                 <version>${mysql.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.mariadb.jdbc</groupId>
+                <artifactId>mariadb-java-client</artifactId>
+                <version>3.3.0</version>
+                <exclusions>
+                    <exclusion>
+                       <groupId>com.github.waffle</groupId>
+                       <artifactId>waffle-jna</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+
             <!-- Webshell support -->
             <dependency>
                 <groupId>org.jetbrains.pty4j</groupId>

Reply via email to