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>