diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BasicCrudIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BasicCrudIntegrationTest.java
index c38a1af22..651f39b50 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BasicCrudIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BasicCrudIntegrationTest.java
@@ -1,12 +1,15 @@
package openjproxy.jdbc;
import lombok.extern.slf4j.Slf4j;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import openjproxy.jdbc.testutil.TestDBUtils.ConnectionResult;
import org.junit.Assert;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.CsvFileSource;
import java.sql.Connection;
@@ -18,9 +21,10 @@
@Slf4j
public class BasicCrudIntegrationTest {
+ private static boolean isH2TestEnabled;
private static boolean isPostgresTestDisabled;
private static boolean isMySQLTestDisabled;
- private static boolean isMariaDBTestDisabled;
+ private static boolean isMariaDBTestEnabled;
private static boolean isCockroachDBTestDisabled;
private static boolean isOracleTestEnabled;
private static boolean isSqlServerTestEnabled;
@@ -29,10 +33,11 @@ public class BasicCrudIntegrationTest {
@BeforeAll
public static void setup() {
- isPostgresTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
- isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
- isCockroachDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ isPostgresTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isCockroachDBTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
isOracleTestEnabled = Boolean.parseBoolean(System.getProperty("enableOracleTests", "false"));
isSqlServerTestEnabled = Boolean.parseBoolean(System.getProperty("enableSqlServerTests", "false"));
isDb2TestEnabled = Boolean.parseBoolean(System.getProperty("enableDb2Tests", "false"));
@@ -41,46 +46,44 @@ public static void setup() {
@ParameterizedTest
@CsvFileSource(resources = "/h2_postgres_mysql_mariadb_oracle_sqlserver_connections.csv")
public void crudTestSuccessful(String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException {
+ // Skip H2 tests if not enabled
+ if (url.toLowerCase().contains("h2:") && !isH2TestEnabled) {
+ Assumptions.assumeFalse(true, "Skipping H2 tests - not enabled");
+ }
+
// Skip PostgreSQL tests if disabled
if (url.toLowerCase().contains("postgresql") && isPostgresTestDisabled) {
Assumptions.assumeFalse(true, "Skipping Postgres tests");
- tablePrefix = "postgres_";
}
// Skip MySQL tests if disabled
if (url.toLowerCase().contains("mysql") && isMySQLTestDisabled) {
Assumptions.assumeFalse(true, "Skipping MySQL tests");
- tablePrefix = "mysql_";
}
- // Skip MariaDB tests if disabled
- if (url.toLowerCase().contains("mariadb") && isMariaDBTestDisabled) {
- Assumptions.assumeFalse(true, "Skipping MariaDB tests");
- tablePrefix = "mariadb_";
+ // Skip MariaDB tests if not enabled
+ if (url.toLowerCase().contains("mariadb") && !isMariaDBTestEnabled) {
+ Assumptions.assumeFalse(true, "Skipping MariaDB tests - not enabled");
}
// Skip Oracle tests if not enabled
if (url.toLowerCase().contains("oracle") && !isOracleTestEnabled) {
Assumptions.assumeFalse(true, "Skipping Oracle tests - not enabled");
- tablePrefix = "oracle_";
}
// Skip SQL Server tests if not enabled
if (url.toLowerCase().contains("sqlserver") && !isSqlServerTestEnabled) {
Assumptions.assumeFalse(true, "Skipping SQL Server tests - not enabled");
- tablePrefix = "sqlserver_";
}
// Skip DB2 tests if not enabled
if (url.toLowerCase().contains("db2") && !isDb2TestEnabled) {
Assumptions.assumeFalse(true, "Skipping DB2 tests - not enabled");
- tablePrefix = "db2_";
}
// Skip CockroachDB tests if disabled
if (url.toLowerCase().contains("26257") && isCockroachDBTestDisabled) {
Assumptions.assumeFalse(true, "Skipping CockroachDB tests");
- tablePrefix = "cockroachdb_";
}
ConnectionResult connResult = TestDBUtils.createConnection(url, user, pwd, isXA);
@@ -181,4 +184,105 @@ public void crudTestSuccessful(String driverClass, String url, String user, Stri
connResult.close();
}
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ @EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+ public void crudTestSuccessfulMariaDB(String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException {
+ // This method tests MariaDB using TestContainers
+ tablePrefix = "mariadb_";
+ String tableName = tablePrefix + "basic_crud_test";
+
+ ConnectionResult connResult = TestDBUtils.createConnection(url, user, pwd, isXA);
+ Connection conn = connResult.getConnection();
+
+ // For non-XA connections, set autocommit to false for explicit transaction control
+ if (!isXA) {
+ conn.setAutoCommit(false);
+ }
+
+ // Start transaction if needed
+ connResult.startXATransactionIfNeeded();
+
+ // Drop table if it exists from previous test run
+ try {
+ executeUpdate(conn, "drop table " + tableName);
+ connResult.commit();
+ } catch (Exception e) {
+ // Table doesn't exist yet, ignore
+ try {
+ connResult.rollback();
+ } catch (Exception ex) {
+ // Ignore rollback errors
+ }
+ }
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ executeUpdate(conn, "create table " + tableName + "(" +
+ "id INT NOT NULL," +
+ "title VARCHAR(50) NOT NULL" +
+ ")");
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ executeUpdate(conn, " insert into " + tableName + " (id, title) values (1, 'TITLE_1')");
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ java.sql.PreparedStatement psSelect = conn.prepareStatement("select * from " + tableName + " where id = ?");
+ psSelect.setInt(1, 1);
+ ResultSet resultSet = psSelect.executeQuery();
+ resultSet.next();
+ int id = resultSet.getInt(1);
+ String title = resultSet.getString(2);
+ Assert.assertEquals(1, id);
+ Assert.assertEquals("TITLE_1", title);
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ executeUpdate(conn, " update " + tableName + " set title = 'TITLE_1_UPDATED' where id = 1");
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ ResultSet resultSetAfterUpdate = psSelect.executeQuery();
+ resultSetAfterUpdate.next();
+ String titleAfterUpdate = resultSetAfterUpdate.getString(2);
+ Assert.assertEquals("TITLE_1_UPDATED", titleAfterUpdate);
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ executeUpdate(conn, " delete from " + tableName + " where id = 1");
+ connResult.commit();
+
+ // Start new transaction for next operation
+ connResult.startXATransactionIfNeeded();
+
+ ResultSet resultSetAfterDeletion = psSelect.executeQuery();
+ Assert.assertFalse(resultSetAfterDeletion.next());
+
+ resultSet.close();
+ psSelect.close();
+
+ // Clean up - drop the test table
+ try {
+ executeUpdate(conn, "drop table " + tableName);
+ connResult.commit();
+ } catch (Exception e) {
+ // Ignore cleanup errors
+ }
+
+ connResult.close();
+ }
+
}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BinaryStreamIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BinaryStreamIntegrationTest.java
index 8ea176b46..f768b6344 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BinaryStreamIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BinaryStreamIntegrationTest.java
@@ -3,6 +3,7 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import openjproxy.jdbc.testutil.TestDBUtils.ConnectionResult;
import org.junit.Assert;
+import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -19,18 +20,23 @@
public class BinaryStreamIntegrationTest {
+ private static boolean isH2TestEnabled;
private static boolean isPostgresTestDisabled;
@BeforeAll
public static void setup() {
- isPostgresTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ isPostgresTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@ParameterizedTest
@CsvFileSource(resources = "/h2_postgres_connections.csv")
public void createAndReadingBinaryStreamSuccessful(String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException, IOException {
- if (isPostgresTestDisabled && url.contains("postgresql")) {
- return;
+ if (!isH2TestEnabled && url.toLowerCase().contains("h2:")) {
+ Assumptions.assumeFalse(true, "Skipping H2 tests - not enabled");
+ }
+ if (isPostgresTestDisabled && url.toLowerCase().contains("postgresql")) {
+ Assumptions.assumeFalse(true, "Skipping Postgres tests");
}
ConnectionResult connResult = TestDBUtils.createConnection(url, user, pwd, isXA);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BlobIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BlobIntegrationTest.java
index ac46b5c0e..30585da82 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BlobIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/BlobIntegrationTest.java
@@ -1,9 +1,12 @@
package openjproxy.jdbc;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.CsvFileSource;
import java.io.ByteArrayInputStream;
@@ -21,16 +24,18 @@
public class BlobIntegrationTest {
+ private static boolean isH2TestEnabled;
private static boolean isMySQLTestDisabled;
- private static boolean isMariaDBTestDisabled;
+ private static boolean isMariaDBTestEnabled;
private static boolean isOracleTestEnabled;
private String tableName;
private Connection conn;
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
- isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
isOracleTestEnabled = Boolean.parseBoolean(System.getProperty("enableOracleTests", "false"));
}
@@ -41,12 +46,13 @@ public void setUp(String driverClass, String url, String user, String pwd) throw
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
this.tableName += "_mysql";
} else if (url.toLowerCase().contains("mariadb")) {
- assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+ assumeFalse(!isMariaDBTestEnabled, "MariaDB tests are not enabled");
this.tableName += "_mariadb";
} else if (url.toLowerCase().contains("oracle")) {
assumeFalse(!isOracleTestEnabled, "Oracle tests are disabled");
this.tableName += "_oracle";
} else {
+ assumeFalse(!isH2TestEnabled, "H2 tests are not enabled");
this.tableName += "_h2";
}
Class.forName(driverClass);
@@ -179,4 +185,128 @@ public void creatingAndReadingLargeBLOBsSuccessful(String driverClass, String ur
conn.close();
}
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ @EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+ public void createAndReadingBLOBsSuccessfulMariaDB(String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException, IOException {
+ // This method tests MariaDB using TestContainers
+ this.tableName = "blob_test_blob_mariadb";
+ Class.forName(driverClass);
+ this.conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing for url -> " + url);
+
+ try {
+ executeUpdate(conn, "drop table " + tableName);
+ } catch (Exception e) {
+ //If fails disregard as per the table is most possibly not created yet
+ }
+
+ executeUpdate(conn,
+ "create table " + tableName + "(" +
+ " val_blob BLOB," +
+ " val_blob2 BLOB," +
+ " val_blob3 BLOB" +
+ ")"
+ );
+
+ PreparedStatement psInsert = conn.prepareStatement(
+ " insert into " + tableName + " (val_blob, val_blob2, val_blob3) values (?, ?, ?)"
+ );
+
+ byte[] blobBytes = {1, 2, 3, 4, 5, 6};
+ Blob blob = conn.createBlob();
+ blob.setBytes(1, blobBytes);
+
+ psInsert.setBlob(1, blob);
+
+ InputStream inputStream = new ByteArrayInputStream(blobBytes);
+ psInsert.setBlob(2, inputStream);
+
+ psInsert.setBytes(3, blobBytes);
+
+ psInsert.executeUpdate();
+
+ psInsert.close();
+
+ PreparedStatement psSelect = conn.prepareStatement("select * from " + tableName);
+ ResultSet resultSet = psSelect.executeQuery();
+ resultSet.next();
+
+ Blob blobFromDB = resultSet.getBlob(1);
+ byte[] bytesFromDB = blobFromDB.getBytes(1, (int) blobFromDB.length());
+ Assert.assertArrayEquals(blobBytes, bytesFromDB);
+
+ Blob blobFromDB2 = resultSet.getBlob(2);
+ byte[] bytesFromDB2 = blobFromDB2.getBytes(1, (int) blobFromDB2.length());
+ Assert.assertArrayEquals(blobBytes, bytesFromDB2);
+
+ byte[] bytesFromDB3 = resultSet.getBytes(3);
+ Assert.assertArrayEquals(blobBytes, bytesFromDB3);
+
+ executeUpdate(conn, "delete from " + tableName);
+
+ resultSet.close();
+ psSelect.close();
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ @EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+ public void creatingAndReadingLargeBLOBsSuccessfulMariaDB(String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, IOException, ClassNotFoundException {
+ // This method tests MariaDB using TestContainers
+ this.tableName = "blob_test_blob_mariadb";
+ Class.forName(driverClass);
+ this.conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing for url -> " + url);
+
+ try {
+ executeUpdate(conn, "drop table " + tableName);
+ } catch (Exception e) {
+ //If fails disregard as per the table is most possibly not created yet
+ }
+
+ executeUpdate(conn,
+ "create table " + tableName + "(" +
+ " val_blob BLOB" +
+ ")"
+ );
+
+ PreparedStatement psInsert = conn.prepareStatement(
+ "insert into " + tableName + " (val_blob) values (?)"
+ );
+
+ // Use the same largeTextFile.txt resource as the original CSV-based test
+ InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("largeTextFile.txt");
+ psInsert.setBlob(1, inputStream);
+
+ psInsert.executeUpdate();
+
+ PreparedStatement psSelect = conn.prepareStatement("select val_blob from " + tableName);
+ ResultSet resultSet = psSelect.executeQuery();
+ resultSet.next();
+ Blob blobResult = resultSet.getBlob(1);
+
+ InputStream inputStreamTestFile = this.getClass().getClassLoader().getResourceAsStream("largeTextFile.txt");
+ InputStream inputStreamBlob = blobResult.getBinaryStream();
+
+ int byteFile = inputStreamTestFile.read();
+ int count = 0;
+ while (byteFile != -1) {
+ count++;
+ int blobByte = inputStreamBlob.read();
+
+ Assert.assertEquals(byteFile, blobByte);
+ byteFile = inputStreamTestFile.read();
+ }
+
+ executeUpdate(conn, "delete from " + tableName);
+
+ resultSet.close();
+ psSelect.close();
+ conn.close();
+ }
+
}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBinaryStreamIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBinaryStreamIntegrationTest.java
index 8425592dc..54f3a7c01 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBinaryStreamIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBinaryStreamIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -21,17 +23,18 @@
* CockroachDB-specific binary stream integration tests.
* Tests CockroachDB-specific binary data types (BYTEA) and stream handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBBinaryStreamIntegrationTest {
private static boolean isTestDisabled;
@BeforeAll
public static void setup() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void createAndReadingBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -92,7 +95,7 @@ public void createAndReadingBinaryStreamSuccessful(String driverClass, String ur
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -145,7 +148,7 @@ public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testBinaryStreamWithNullValues(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBlobIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBlobIntegrationTest.java
index 482acc2a6..f22d5c6ee 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBlobIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBBlobIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -22,6 +24,7 @@
* CockroachDB-specific BLOB integration tests.
* Tests CockroachDB BYTEA functionality (equivalent to BLOB).
*/
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBBlobIntegrationTest {
private static boolean isTestDisabled;
@@ -30,7 +33,7 @@ public class CockroachDBBlobIntegrationTest {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
public void setUp(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
@@ -52,7 +55,7 @@ public void setUp(String driverClass, String url, String user, String pwd) throw
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBBlobCreationAndRetrieval(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -94,7 +97,7 @@ public void testCockroachDBBlobCreationAndRetrieval(String driverClass, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBLargeBlobHandling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -137,7 +140,7 @@ public void testCockroachDBLargeBlobHandling(String driverClass, String url, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBBlobUpdate(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -190,7 +193,7 @@ public void testCockroachDBBlobUpdate(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBBlobWithNullValue(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBConnectionExtensiveTests.java
index f4fbd8fa7..ff49e9c7d 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBConnectionExtensiveTests.java
@@ -4,8 +4,10 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.*;
@@ -17,17 +19,18 @@
* These tests verify that OJP can properly handle CockroachDB-specific SQL syntax and features.
*/
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBConnectionExtensiveTests {
private static boolean isTestDisabled;
@BeforeAll
public static void setup() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBBasicConnection(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -66,7 +69,7 @@ public void testCockroachDBBasicConnection(String driverClass, String url, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBAutoIncrement(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -98,7 +101,7 @@ public void testCockroachDBAutoIncrement(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBTransactionHandling(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -160,7 +163,7 @@ public void testCockroachDBTransactionHandling(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBPreparedStatements(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -196,7 +199,7 @@ public void testCockroachDBPreparedStatements(String driverClass, String url, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBDataTypes(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -245,7 +248,7 @@ public void testCockroachDBDataTypes(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBJoins(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -300,7 +303,7 @@ public void testCockroachDBJoins(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBMetadata(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBDatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBDatabaseMetaDataExtensiveTests.java
index 3570d7961..ee54c2e94 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBDatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBDatabaseMetaDataExtensiveTests.java
@@ -2,13 +2,16 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBDatabaseMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -16,7 +19,7 @@ public class CockroachDBDatabaseMetaDataExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -32,7 +35,7 @@ public static void teardown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void allDatabaseMetaDataMethodsShouldWorkAndBeAsserted(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -276,7 +279,7 @@ public void allDatabaseMetaDataMethodsShouldWorkAndBeAsserted(String driverClass
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetTypeInfo(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -295,7 +298,7 @@ public void testGetTypeInfo(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetIndexInfo(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -306,7 +309,7 @@ public void testGetIndexInfo(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetTablePrivileges(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -317,7 +320,7 @@ public void testGetTablePrivileges(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetSchemas(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -336,7 +339,7 @@ public void testGetSchemas(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetCatalogs(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBMultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBMultipleTypesIntegrationTest.java
index 40e852f66..81b0f01ac 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBMultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBMultipleTypesIntegrationTest.java
@@ -3,8 +3,10 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -19,17 +21,18 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBMultipleTypesIntegrationTest {
private static boolean isTestDisabled;
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -131,7 +134,7 @@ public void typesCoverageTestSuccessful(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBSpecificTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBPreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBPreparedStatementExtensiveTests.java
index 47382fee3..2f6c3f934 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBPreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBPreparedStatementExtensiveTests.java
@@ -3,8 +3,10 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
@@ -26,6 +28,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBPreparedStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -35,7 +38,7 @@ public class CockroachDBPreparedStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -63,7 +66,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testBasicParameterSetting(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -88,7 +91,7 @@ public void testBasicParameterSetting(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testNullParameterHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -116,7 +119,7 @@ public void testNullParameterHandling(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testNumericParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -144,7 +147,7 @@ public void testNumericParameterTypes(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testDateTimeParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, dt) VALUES (?, ?, ?)");
@@ -169,7 +172,7 @@ public void testDateTimeParameterTypes(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testLargeObjectHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, data, info) VALUES (?, ?, ?, ?)");
@@ -199,7 +202,7 @@ public void testLargeObjectHandling(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testBatchExecution(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -227,7 +230,7 @@ public void testBatchExecution(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testClearParameters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -256,7 +259,7 @@ public void testClearParameters(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -277,7 +280,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -292,7 +295,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testMetadata(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("SELECT id, name, age FROM cockroachdb_prepared_stmt_test WHERE id = ?");
@@ -303,7 +306,7 @@ public void testMetadata(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testParameterMetadata(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO cockroachdb_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -316,7 +319,7 @@ public void testParameterMetadata(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("SELECT * FROM cockroachdb_prepared_stmt_test WHERE id = ?");
@@ -327,7 +330,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteAfterCloseThrows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("SELECT * FROM cockroachdb_prepared_stmt_test WHERE id = ?");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBReadMultipleBlocksOfDataIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBReadMultipleBlocksOfDataIntegrationTest.java
index 1869ddcfb..a9d470cf0 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBReadMultipleBlocksOfDataIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBReadMultipleBlocksOfDataIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -17,17 +19,18 @@
* CockroachDB-specific multiple blocks of data integration tests.
* Tests CockroachDB pagination and large result set handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBReadMultipleBlocksOfDataIntegrationTest {
private static boolean isTestDisabled;
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBMultiplePagesOfRows(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -75,7 +78,7 @@ public void testCockroachDBMultiplePagesOfRows(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBLargeDataSetPagination(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -134,7 +137,7 @@ public void testCockroachDBLargeDataSetPagination(String driverClass, String url
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBLargeResultSetWithVariousTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -195,7 +198,7 @@ public void testCockroachDBLargeResultSetWithVariousTypes(String driverClass, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBFetchSizePerformance(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetMetaDataExtensiveTests.java
index a78cbe4e8..32166ce80 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetMetaDataExtensiveTests.java
@@ -3,14 +3,17 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBResultSetMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -19,7 +22,7 @@ public class CockroachDBResultSetMetaDataExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@SneakyThrows
@@ -56,7 +59,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testAllResultSetMetaDataMethods(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -173,7 +176,7 @@ public void testAllResultSetMetaDataMethods(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testResultSetMetaDataWithNullValues(String driverClass, String url, String user, String password) throws SQLException {
assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
@@ -204,7 +207,7 @@ public void testResultSetMetaDataWithNullValues(String driverClass, String url,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testResultSetMetaDataWithComplexTypes(String driverClass, String url, String user, String password) throws SQLException {
assumeFalse(isTestDisabled, "CockroachDB tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetTest.java
index 6c742d490..81808aad4 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBResultSetTest.java
@@ -3,8 +3,10 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -24,6 +26,7 @@
* CockroachDB-specific ResultSet tests.
* Tests CockroachDB-specific ResultSet behavior and data type handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBResultSetTest {
private Connection connection;
@@ -34,7 +37,7 @@ public class CockroachDBResultSetTest {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@SneakyThrows
@@ -86,7 +89,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBNavigationMethods(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
assertTrue(resultSet.next()); // Row 1
@@ -101,7 +104,7 @@ public void testCockroachDBNavigationMethods(String driverClass, String url, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBAbsoluteAndRelativePositioning(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -116,7 +119,7 @@ public void testCockroachDBAbsoluteAndRelativePositioning(String driverClass, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBGetRow(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -128,7 +131,7 @@ public void testCockroachDBGetRow(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBDataRetrieval(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -152,7 +155,7 @@ public void testCockroachDBDataRetrieval(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBNullHandling(String driverClass, String url, String user, String pwd) throws SQLException {
assumeFalse(isTestDisabled, "Skipping CockroachDB tests");
@@ -179,7 +182,7 @@ public void testCockroachDBNullHandling(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBFindColumn(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -194,7 +197,7 @@ public void testCockroachDBFindColumn(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBResultSetType(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -202,7 +205,7 @@ public void testCockroachDBResultSetType(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBResultSetConcurrency(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -211,7 +214,7 @@ public void testCockroachDBResultSetConcurrency(String driverClass, String url,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBWarnings(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -222,7 +225,7 @@ public void testCockroachDBWarnings(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBGetStatement(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -232,7 +235,7 @@ public void testCockroachDBGetStatement(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBBeforeFirstAfterLast(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -246,7 +249,7 @@ public void testCockroachDBBeforeFirstAfterLast(String driverClass, String url,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCockroachDBIsClosed(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBSavepointTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBSavepointTests.java
index 3befc0bc8..15e466384 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBSavepointTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBSavepointTests.java
@@ -3,8 +3,10 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -16,6 +18,7 @@
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBSavepointTests {
private static boolean isTestDisabled;
@@ -23,7 +26,7 @@ public class CockroachDBSavepointTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
@SneakyThrows
@@ -54,7 +57,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testUnnamedSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -73,7 +76,7 @@ public void testUnnamedSavepoint(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testNamedSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -94,7 +97,7 @@ public void testNamedSavepoint(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testMultipleSavepoints(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -124,7 +127,7 @@ public void testMultipleSavepoints(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testReleaseSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -146,7 +149,7 @@ public void testReleaseSavepoint(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testSavepointWithRollback(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -165,7 +168,7 @@ public void testSavepointWithRollback(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testSavepointWithCommit(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -184,7 +187,7 @@ public void testSavepointWithCommit(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testNestedSavepoints(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -212,7 +215,7 @@ public void testNestedSavepoints(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testSavepointAfterError(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBStatementExtensiveTests.java
index 322fa553c..c47b055c4 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/CockroachDBStatementExtensiveTests.java
@@ -3,8 +3,10 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.CockroachDBConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -22,6 +24,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.CockroachDBTestContainer#isEnabled")
public class CockroachDBStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -31,7 +34,7 @@ public class CockroachDBStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disableCockroachDBTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -49,7 +52,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ResultSet rs = statement.executeQuery("SELECT * FROM cockroachdb_statement_test");
@@ -59,7 +62,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int rows = statement.executeUpdate("UPDATE cockroachdb_statement_test SET name = 'Updated Alice' WHERE id = 1");
@@ -72,7 +75,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertFalse(statement.isClosed());
@@ -81,7 +84,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testMaxFieldSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getMaxFieldSize();
@@ -91,7 +94,7 @@ public void testMaxFieldSize(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteAfterCloseThrows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.close();
@@ -101,7 +104,7 @@ public void testExecuteAfterCloseThrows(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testMaxRows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setMaxRows(1);
@@ -113,7 +116,7 @@ public void testMaxRows(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testEscapeProcessing(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -122,7 +125,7 @@ public void testEscapeProcessing(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testQueryTimeout(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setQueryTimeout(5);
@@ -130,7 +133,7 @@ public void testQueryTimeout(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCancel(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -138,7 +141,7 @@ public void testCancel(String driverClass, String url, String user, String passw
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.clearWarnings();
@@ -146,7 +149,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testSetCursorName(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// No-op in most drivers; should not throw
@@ -154,7 +157,7 @@ public void testSetCursorName(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean isResultSet = statement.execute("SELECT * FROM cockroachdb_statement_test");
@@ -170,7 +173,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetMoreResults(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM cockroachdb_statement_test");
@@ -179,7 +182,7 @@ public void testGetMoreResults(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testFetchDirection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchDirection();
@@ -189,7 +192,7 @@ public void testFetchDirection(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testFetchSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchSize();
@@ -199,7 +202,7 @@ public void testFetchSize(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testResultSetConcurrencyAndType(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int concurrency = statement.getResultSetConcurrency();
@@ -209,7 +212,7 @@ public void testResultSetConcurrencyAndType(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testBatchExecution(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO cockroachdb_statement_test (id, name) VALUES (3, 'Charlie')");
@@ -224,7 +227,7 @@ public void testBatchExecution(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testClearBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO cockroachdb_statement_test (id, name) VALUES (5, 'Eve')");
@@ -234,14 +237,14 @@ public void testClearBatch(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetConnection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertSame(connection, statement.getConnection());
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetMoreResultsWithCurrent(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM cockroachdb_statement_test");
@@ -249,7 +252,7 @@ public void testGetMoreResultsWithCurrent(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// CockroachDB supports SERIAL, create table with auto-increment
@@ -273,7 +276,7 @@ public void testGetGeneratedKeys(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteLargeBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO cockroachdb_statement_test (id, name) VALUES (10, 'Large1')");
@@ -283,7 +286,7 @@ public void testExecuteLargeBatch(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testExecuteLargeUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
long affected = statement.executeLargeUpdate("UPDATE cockroachdb_statement_test SET name = 'LargeUpdate' WHERE id = 1");
@@ -291,7 +294,7 @@ public void testExecuteLargeUpdate(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testGetLargeUpdateCount(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.executeUpdate("UPDATE cockroachdb_statement_test SET name = 'Test' WHERE id = 1");
@@ -302,7 +305,7 @@ public void testGetLargeUpdateCount(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testResultSetHoldability(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int holdability = statement.getResultSetHoldability();
@@ -311,7 +314,7 @@ public void testResultSetHoldability(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testIsPoolable(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Default is usually false, but should not throw
@@ -321,7 +324,7 @@ public void testIsPoolable(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/cockroachdb_connection.csv")
+ @ArgumentsSource(CockroachDBConnectionProvider.class)
public void testCloseOnCompletion(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertFalse(statement.isCloseOnCompletion());
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ConcurrencyTimeoutTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ConcurrencyTimeoutTest.java
index cb24063b5..cde6e4366 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ConcurrencyTimeoutTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ConcurrencyTimeoutTest.java
@@ -2,6 +2,7 @@
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -23,9 +24,16 @@ public class ConcurrencyTimeoutTest {
private static final int THREADS = 50; // Smaller number for quick testing
private static final int OPERATIONS_PER_THREAD = 5;
+ private static boolean isH2TestEnabled;
private static AtomicInteger successfulOperations = new AtomicInteger(0);
private static AtomicInteger failedOperations = new AtomicInteger(0);
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
@SneakyThrows
@ParameterizedTest
@CsvFileSource(resources = "/h2_connection.csv")
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BinaryStreamIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BinaryStreamIntegrationTest.java
index 2f61b4924..aa613adcc 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BinaryStreamIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BinaryStreamIntegrationTest.java
@@ -2,8 +2,9 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -15,6 +16,8 @@
import java.sql.SQLException;
import java.sql.Statement;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+
import static openjproxy.helpers.SqlHelper.executeUpdate;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -22,6 +25,7 @@
* DB2-specific binary stream integration tests.
* Tests DB2-specific binary data types (VARBINARY, BLOB) and stream handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2BinaryStreamIntegrationTest {
private static boolean isTestDisabled;
@@ -32,7 +36,7 @@ public static void setup() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void createAndReadingBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
@@ -98,7 +102,7 @@ public void createAndReadingBinaryStreamSuccessful(String driverClass, String ur
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
@@ -148,7 +152,7 @@ public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SpecificBinaryHandling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BlobIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BlobIntegrationTest.java
index 39a1be879..21467020b 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BlobIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2BlobIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -23,6 +25,7 @@
* DB2-specific BLOB integration tests.
* Tests DB2 BLOB functionality and performance.
*/
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2BlobIntegrationTest {
private static boolean isTestDisabled;
@@ -58,7 +61,7 @@ public void setUp(String driverClass, String url, String user, String pwd) throw
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2BlobCreationAndRetrieval(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -102,7 +105,7 @@ public void testDb2BlobCreationAndRetrieval(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2BlobPerformance(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ConnectionExtensiveTests.java
index 73a7131c4..679e701fd 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ConnectionExtensiveTests.java
@@ -3,8 +3,10 @@
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import java.sql.Connection;
@@ -23,19 +25,20 @@
* These tests verify that OJP can properly handle DB2-specific SQL syntax and data types.
*/
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2ConnectionExtensiveTests {
- private static boolean isDb2TestEnabled;
+ private static boolean isTestDisabled;
@BeforeAll
public static void setup() {
- isDb2TestEnabled = Boolean.parseBoolean(System.getProperty("enableDb2Tests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enableDb2Tests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2BasicConnection(String driverClass, String url, String user, String pwd) throws SQLException {
- Assumptions.assumeFalse(!isDb2TestEnabled, "Skipping DB2 tests");
+ Assumptions.assumeFalse(isTestDisabled, "DB2 tests are disabled");
log.info("Testing DB2 connection with URL: {}", url);
@@ -79,9 +82,9 @@ public void testDb2BasicConnection(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2DataTypes(String driverClass, String url, String user, String pwd) throws SQLException {
- Assumptions.assumeFalse(!isDb2TestEnabled, "Skipping DB2 tests");
+ Assumptions.assumeFalse(isTestDisabled, "DB2 tests are disabled");
log.info("Testing DB2 data types with URL: {}", url);
@@ -134,9 +137,9 @@ public void testDb2DataTypes(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2BooleanHandling(String driverClass, String url, String user, String pwd) throws SQLException {
- Assumptions.assumeFalse(!isDb2TestEnabled, "Skipping DB2 tests");
+ Assumptions.assumeFalse(isTestDisabled, "DB2 tests are disabled");
log.info("Testing DB2 boolean handling with URL: {}", url);
@@ -184,9 +187,9 @@ public void testDb2BooleanHandling(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2NullVsEmptyString(String driverClass, String url, String user, String pwd) throws SQLException {
- Assumptions.assumeFalse(!isDb2TestEnabled, "Skipping DB2 tests");
+ Assumptions.assumeFalse(isTestDisabled, "DB2 tests are disabled");
log.info("Testing DB2 NULL vs empty string handling with URL: {}", url);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2DatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2DatabaseMetaDataExtensiveTests.java
index 2b6f813a8..a93870759 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2DatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2DatabaseMetaDataExtensiveTests.java
@@ -3,8 +3,9 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -14,6 +15,8 @@
import java.sql.Statement;
import java.sql.Types;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -21,6 +24,7 @@
* DB2-specific DatabaseMetaData tests.
* Tests DB2-specific metadata functionality and behavior.
*/
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2DatabaseMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -77,7 +81,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2DatabaseInfo(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -106,7 +110,7 @@ public void testDb2DatabaseInfo(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2TableMetaData(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -125,7 +129,7 @@ public void testDb2TableMetaData(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ColumnMetaData(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -191,7 +195,7 @@ public void testDb2ColumnMetaData(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2PrimaryKeyMetaData(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -210,7 +214,7 @@ public void testDb2PrimaryKeyMetaData(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2IndexMetaData(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -244,7 +248,7 @@ public void testDb2IndexMetaData(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2DatabaseCapabilities(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -272,7 +276,7 @@ public void testDb2DatabaseCapabilities(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SqlKeywords(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2MultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2MultipleTypesIntegrationTest.java
index 4b64bd4a6..c69dfe8fa 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2MultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2MultipleTypesIntegrationTest.java
@@ -1,10 +1,12 @@
package openjproxy.jdbc;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
@@ -22,6 +24,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2MultipleTypesIntegrationTest {
private static boolean isTestDisabled;
@@ -32,7 +35,7 @@ public static void checkTestConfiguration() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException, UnsupportedEncodingException {
assumeFalse(isTestDisabled, "DB2 tests are disabled");
@@ -130,7 +133,7 @@ public void typesCoverageTestSuccessful(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SpecificTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "DB2 tests are disabled");
@@ -184,7 +187,7 @@ public void testDb2SpecificTypes(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2NumericTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "DB2 tests are disabled");
@@ -251,7 +254,7 @@ public void testDb2NumericTypes(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2DateTimeTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "DB2 tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2PreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2PreparedStatementExtensiveTests.java
index 7f448c0e3..bd41d0664 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2PreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2PreparedStatementExtensiveTests.java
@@ -2,8 +2,11 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -21,6 +24,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2PreparedStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -81,7 +85,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2PreparedStatementBasicOperations(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -134,7 +138,7 @@ public void testDb2PreparedStatementBasicOperations(String driverClass, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2PreparedStatementDataTypes(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -169,7 +173,7 @@ public void testDb2PreparedStatementDataTypes(String driverClass, String url, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2PreparedStatementNullHandling(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -205,7 +209,7 @@ public void testDb2PreparedStatementNullHandling(String driverClass, String url,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2PreparedStatementBatch(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ReadMultipleBlocksOfDataIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ReadMultipleBlocksOfDataIntegrationTest.java
index cf950b421..582320e9c 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ReadMultipleBlocksOfDataIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ReadMultipleBlocksOfDataIntegrationTest.java
@@ -2,14 +2,18 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+import openjproxy.jdbc.testutil.Db2ConnectionWithRecordCountsProvider;
+
import static openjproxy.helpers.SqlHelper.executeUpdate;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@@ -17,6 +21,7 @@
* DB2-specific multiple blocks of data integration tests.
* Tests DB2 pagination and large result set handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2ReadMultipleBlocksOfDataIntegrationTest {
private static boolean isTestDisabled;
@@ -27,7 +32,7 @@ public static void checkTestConfiguration() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connections_with_record_counts.csv")
+ @ArgumentsSource(Db2ConnectionWithRecordCountsProvider.class)
public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
@@ -79,7 +84,7 @@ public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driv
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2LargeDataSetPagination(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
@@ -144,7 +149,7 @@ public void testDb2LargeDataSetPagination(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetScrolling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
@@ -207,7 +212,7 @@ public void testDb2ResultSetScrolling(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2MultipleDataTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping DB2 tests");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetMetaDataExtensiveTests.java
index a63ad4a5a..33c0ccaf8 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetMetaDataExtensiveTests.java
@@ -3,15 +3,19 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.nio.charset.StandardCharsets;
import java.sql.*;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2ResultSetMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -87,7 +91,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testAllResultSetMetaDataMethods(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -233,7 +237,7 @@ public void testAllResultSetMetaDataMethods(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SpecificDataTypes(String driverClass, String url, String user, String password) throws SQLException {
assumeFalse(isTestDisabled, "DB2 tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetTest.java
index 518d3fedb..d1755e218 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2ResultSetTest.java
@@ -3,8 +3,9 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -14,6 +15,8 @@
import java.sql.Statement;
import java.sql.Types;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -25,6 +28,7 @@
* DB2-specific ResultSet tests.
* Tests DB2-specific ResultSet behavior and data type handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2ResultSetTest {
private Connection connection;
@@ -97,7 +101,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetNavigation(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -156,7 +160,7 @@ public void testDb2ResultSetNavigation(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetDataTypes(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -185,7 +189,7 @@ public void testDb2ResultSetDataTypes(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetMetaData(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -213,7 +217,7 @@ public void testDb2ResultSetMetaData(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetConcurrency(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -229,7 +233,7 @@ public void testDb2ResultSetConcurrency(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2ResultSetWarnings(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2SavepointTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2SavepointTests.java
index 13f809dec..20fd48c1e 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2SavepointTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2SavepointTests.java
@@ -3,8 +3,9 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -13,9 +14,12 @@
import java.sql.Savepoint;
import java.sql.Statement;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
+
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2SavepointTests {
private static boolean isTestDisabled;
@@ -67,7 +71,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SavepointBasicOperations(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -111,7 +115,7 @@ public void testDb2SavepointBasicOperations(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2MultipleSavepoints(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -159,7 +163,7 @@ public void testDb2MultipleSavepoints(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SavepointRelease(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -190,7 +194,7 @@ public void testDb2SavepointRelease(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2UnnamedSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -220,7 +224,7 @@ public void testDb2UnnamedSavepoint(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SavepointWithCommit(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2StatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2StatementExtensiveTests.java
index 64b976f75..194b165ee 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2StatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/Db2StatementExtensiveTests.java
@@ -1,11 +1,13 @@
package openjproxy.jdbc;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.Db2ConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -23,6 +25,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.Db2TestContainer#isEnabled")
public class Db2StatementExtensiveTests {
private static boolean isTestDisabled;
@@ -56,7 +59,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ResultSet rs = statement.executeQuery("SELECT * FROM DB2INST1.db2_statement_test");
@@ -66,7 +69,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int rows = statement.executeUpdate("UPDATE DB2INST1.db2_statement_test SET name = 'Updated Alice' WHERE id = 1");
@@ -79,7 +82,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertFalse(statement.isClosed());
@@ -88,7 +91,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testMaxFieldSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getMaxFieldSize();
@@ -99,7 +102,7 @@ public void testMaxFieldSize(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecuteAfterCloseThrows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.close();
@@ -109,7 +112,7 @@ public void testExecuteAfterCloseThrows(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testMaxRows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setMaxRows(1);
@@ -121,7 +124,7 @@ public void testMaxRows(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testEscapeProcessing(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -130,7 +133,7 @@ public void testEscapeProcessing(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testQueryTimeout(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setQueryTimeout(5);
@@ -138,7 +141,7 @@ public void testQueryTimeout(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testCancel(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -146,7 +149,7 @@ public void testCancel(String driverClass, String url, String user, String passw
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.clearWarnings();
@@ -154,7 +157,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testSetCursorName(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// DB2 supports named cursors
@@ -162,7 +165,7 @@ public void testSetCursorName(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean isResultSet = statement.execute("SELECT * FROM DB2INST1.db2_statement_test");
@@ -178,7 +181,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testGetMoreResults(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM DB2INST1.db2_statement_test");
@@ -187,7 +190,7 @@ public void testGetMoreResults(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testFetchDirection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchDirection();
@@ -197,7 +200,7 @@ public void testFetchDirection(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testFetchSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchSize();
@@ -207,7 +210,7 @@ public void testFetchSize(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testResultSetConcurrencyAndType(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int concurrency = statement.getResultSetConcurrency();
@@ -217,7 +220,7 @@ public void testResultSetConcurrencyAndType(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testBatchExecution(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO DB2INST1.db2_statement_test (id, name) VALUES (3, 'Charlie')");
@@ -232,7 +235,7 @@ public void testBatchExecution(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testClearBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO DB2INST1.db2_statement_test (id, name) VALUES (5, 'Eve')");
@@ -242,14 +245,14 @@ public void testClearBatch(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testGetConnection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertSame(connection, statement.getConnection());
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testGetMoreResultsWithCurrent(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM DB2INST1.db2_statement_test");
@@ -257,7 +260,7 @@ public void testGetMoreResultsWithCurrent(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_auto_keys", TestDBUtils.SqlSyntax.DB2);
@@ -272,7 +275,7 @@ public void testGeneratedKeys(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecuteUpdateVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -292,7 +295,7 @@ public void testExecuteUpdateVariants(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testExecuteVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_exec", TestDBUtils.SqlSyntax.DB2);
@@ -311,7 +314,7 @@ public void testExecuteVariants(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testGetResultSetHoldability(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int holdability = statement.getResultSetHoldability();
@@ -319,7 +322,7 @@ public void testGetResultSetHoldability(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testPoolable(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setPoolable(true);
@@ -332,7 +335,7 @@ public void testPoolable(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testCloseOnCompletion(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.closeOnCompletion();
@@ -340,7 +343,7 @@ public void testCloseOnCompletion(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testLargeMethodsDefault(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.getFetchDirection();
@@ -359,7 +362,7 @@ public void testLargeMethodsDefault(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testEnquoteLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteLiteral("foo'bar");
@@ -367,7 +370,7 @@ public void testEnquoteLiteral(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testEnquoteIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// DB2 quotes identifiers to preserve case sensitivity
@@ -378,7 +381,7 @@ public void testEnquoteIdentifier(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testIsSimpleIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// DB2 has specific rules for simple identifiers
@@ -392,7 +395,7 @@ public void testIsSimpleIdentifier(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testEnquoteNCharLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteNCharLiteral("foo'bar");
@@ -400,7 +403,7 @@ public void testEnquoteNCharLiteral(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/db2_connection.csv")
+ @ArgumentsSource(Db2ConnectionProvider.class)
public void testDb2SpecificFeatures(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2ConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2ConnectionExtensiveTests.java
index 4a4ed3a07..51d7fad17 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2ConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2ConnectionExtensiveTests.java
@@ -4,6 +4,8 @@
import lombok.SneakyThrows;
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -35,8 +37,15 @@
public class H2ConnectionExtensiveTests {
+ private static boolean isH2TestEnabled;
private Connection connection;
+ @BeforeAll
+ public static void setup() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
@SneakyThrows
public void setUp(String driverClass, String url, String user, String password) throws SQLException {
connection = DriverManager.getConnection(url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2DatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2DatabaseMetaDataExtensiveTests.java
index 091c83f39..0d88a2225 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2DatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2DatabaseMetaDataExtensiveTests.java
@@ -10,8 +10,15 @@
public class H2DatabaseMetaDataExtensiveTests {
+ private static boolean isH2TestEnabled;
private static Connection connection;
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
public void setUp(String driverClass, String url, String user, String password) throws Exception {
connection = DriverManager.getConnection(url, user, password);
TestDBUtils.createBasicTestTable(connection, "h2_db_metadata_test", TestDBUtils.SqlSyntax.H2, true);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2MultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2MultipleTypesIntegrationTest.java
index 5be00d1c9..8c41a90e6 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2MultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2MultipleTypesIntegrationTest.java
@@ -2,6 +2,8 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.Assert;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -21,6 +23,14 @@
public class H2MultipleTypesIntegrationTest {
+ private static boolean isH2TestEnabled;
+
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
@ParameterizedTest
@CsvFileSource(resources = "/h2_connection.csv")
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2PreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2PreparedStatementExtensiveTests.java
index 83ebd7c62..f36090646 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2PreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2PreparedStatementExtensiveTests.java
@@ -1,6 +1,8 @@
package openjproxy.jdbc;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -30,9 +32,16 @@
public class H2PreparedStatementExtensiveTests {
+ private static boolean isH2TestEnabled;
private Connection connection;
private PreparedStatement ps;
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
public void setUp(String driverClass, String url, String user, String password) throws Exception {
connection = DriverManager.getConnection(url, user, password);
Statement stmt = connection.createStatement();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2StatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2StatementExtensiveTests.java
index 57d5eab2a..749a206d9 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2StatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/H2StatementExtensiveTests.java
@@ -2,6 +2,8 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -22,9 +24,16 @@
public class H2StatementExtensiveTests {
+ private static boolean isH2TestEnabled;
private Connection connection;
private Statement statement;
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
public void setUp(String driverClass, String url, String user, String password) throws Exception {
connection = DriverManager.getConnection(url, user, password);
statement = connection.createStatement();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/HydratedLobValidationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/HydratedLobValidationTest.java
index 5bc0f624c..66bb418cc 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/HydratedLobValidationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/HydratedLobValidationTest.java
@@ -1,6 +1,7 @@
package openjproxy.jdbc;
import org.junit.Assert;
+import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -24,9 +25,16 @@
*/
public class HydratedLobValidationTest {
+ private static boolean isH2TestEnabled;
private String tableName;
private Connection conn;
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
public void setUp(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
this.tableName = "hydrated_lob_test";
conn = DriverManager.getConnection(url, user, pwd);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBConnectionExtensiveTests.java
new file mode 100644
index 000000000..e429916e8
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBConnectionExtensiveTests.java
@@ -0,0 +1,338 @@
+package openjproxy.jdbc;
+
+import lombok.SneakyThrows;
+import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import org.junit.Assert;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.sql.SQLWarning;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.util.Properties;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBConnectionExtensiveTests {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+ private Connection connection;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ @SneakyThrows
+ public void setUp(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+ connection = DriverManager.getConnection(url, user, password);
+ }
+
+ @AfterEach
+ public void tearDown() throws SQLException {
+ TestDBUtils.closeQuietly(connection);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCreateStatement(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ Statement statement = connection.createStatement();
+ Assert.assertNotNull(statement);
+ statement.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testPrepareStatement(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ PreparedStatement preparedStatement = connection.prepareStatement("SELECT 1");
+ Assert.assertNotNull(preparedStatement);
+ preparedStatement.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testPrepareCall(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // MySQL supports callable statements, though syntax may differ
+ try {
+ CallableStatement callableStatement = connection.prepareCall("CALL test_procedure()");
+ Assert.assertNotNull(callableStatement);
+ callableStatement.close();
+ } catch (SQLException e) {
+ // This is expected if the procedure doesn't exist - test that the method works
+ Assert.assertTrue(e.getMessage().contains("PROCEDURE") || e.getMessage().contains("procedure"));
+ }
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testNativeSQL(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ String nativeSQL = connection.nativeSQL("SELECT {fn NOW()}");
+ Assert.assertNotNull(nativeSQL);
+ // MySQL should convert JDBC escape sequence
+ Assert.assertTrue(nativeSQL.contains("NOW()") || nativeSQL.contains("SELECT"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testAutoCommit(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // Test getting and setting auto-commit
+ boolean originalAutoCommit = connection.getAutoCommit();
+
+ connection.setAutoCommit(false);
+ Assert.assertEquals(false, connection.getAutoCommit());
+
+ connection.setAutoCommit(true);
+ Assert.assertEquals(true, connection.getAutoCommit());
+
+ // Restore original state
+ connection.setAutoCommit(originalAutoCommit);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCommitAndRollback(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // Test commit and rollback operations
+ connection.setAutoCommit(false);
+
+ // These should not throw exceptions
+ connection.commit();
+ connection.rollback();
+
+ connection.setAutoCommit(true);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testIsClosed(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ Assert.assertEquals(false, connection.isClosed());
+
+ connection.close();
+ Assert.assertEquals(true, connection.isClosed());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetMetaData(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ DatabaseMetaData metaData = connection.getMetaData();
+ Assert.assertNotNull(metaData);
+
+ String databaseProductName = metaData.getDatabaseProductName();
+ Assert.assertNotNull(databaseProductName);
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertTrue(databaseProductName.toLowerCase().contains("mysql"));
+ else
+ Assert.assertTrue(databaseProductName.toLowerCase().contains("mariadb"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testReadOnly(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // Test read-only mode
+ boolean originalReadOnly = connection.isReadOnly();
+
+ try {
+ connection.setReadOnly(true);
+ // MySQL may or may not support read-only mode depending on configuration
+ // Just test that the call doesn't throw an unexpected exception
+ } catch (SQLException e) {
+ // Some MySQL configurations may not support read-only mode
+ // This is acceptable
+ }
+
+ // Restore original state
+ connection.setReadOnly(originalReadOnly);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCatalog(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ String catalog = connection.getCatalog();
+ // Catalog might be null or the database name
+
+ // Test setting catalog (should work in MySQL)
+ if (catalog != null) {
+ connection.setCatalog(catalog);
+ Assert.assertEquals(catalog, connection.getCatalog());
+ }
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testTransactionIsolation(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ int isolationLevel = connection.getTransactionIsolation();
+ Assert.assertTrue(isolationLevel >= Connection.TRANSACTION_NONE && isolationLevel <= Connection.TRANSACTION_SERIALIZABLE);
+
+ // Test setting transaction isolation level
+ connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+ Assert.assertEquals(Connection.TRANSACTION_READ_COMMITTED, connection.getTransactionIsolation());
+
+ // Restore original level
+ connection.setTransactionIsolation(isolationLevel);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testWarnings(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // Test warning operations
+ SQLWarning warnings = connection.getWarnings();
+ // Warnings might be null initially
+
+ connection.clearWarnings();
+ // Should not throw exception
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCreateStatementWithParameters(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+ Assert.assertNotNull(statement);
+ statement.close();
+
+ statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ Assert.assertNotNull(statement);
+ statement.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testPrepareStatementWithParameters(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ PreparedStatement ps = connection.prepareStatement("SELECT 1", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
+ Assert.assertNotNull(ps);
+ ps.close();
+
+ ps = connection.prepareStatement("SELECT 1", Statement.RETURN_GENERATED_KEYS);
+ Assert.assertNotNull(ps);
+ ps.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testHoldability(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ int holdability = connection.getHoldability();
+ Assert.assertTrue(holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT || holdability == ResultSet.CLOSE_CURSORS_AT_COMMIT);
+
+ // Test setting holdability
+ connection.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ Assert.assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, connection.getHoldability());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testSavepoints(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ connection.setAutoCommit(false);
+
+ // Test unnamed savepoint
+ Savepoint savepoint1 = connection.setSavepoint();
+ Assert.assertNotNull(savepoint1);
+
+ // Test named savepoint
+ Savepoint savepoint2 = connection.setSavepoint("test_savepoint");
+ Assert.assertNotNull(savepoint2);
+ Assert.assertEquals("test_savepoint", savepoint2.getSavepointName());
+
+ // Test rollback to savepoint
+ connection.rollback(savepoint2);
+ connection.rollback(savepoint1);
+
+ // Test release savepoint
+ connection.releaseSavepoint(savepoint1);
+
+ connection.setAutoCommit(true);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testClientInfo(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ Properties clientInfo = connection.getClientInfo();
+ Assert.assertNotNull(clientInfo);
+
+ // Test setting client info
+ try {
+ connection.setClientInfo("ApplicationName", "MySQLTest");
+ // Should not throw exception, though MySQL may not support all properties
+ } catch (SQLClientInfoException e) {
+ // This is acceptable for MySQL
+ }
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testValid(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ boolean isValid = connection.isValid(5);
+ Assert.assertTrue(isValid);
+
+ // Test with closed connection
+ connection.close();
+ isValid = connection.isValid(5);
+ Assert.assertEquals(false, isValid);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testUnsupportedOperations(String driverClass, String url, String user, String password, boolean isXA) throws SQLException {
+ setUp(driverClass, url, user, password, isXA);
+
+ // Test operations that might not be supported
+ Assert.assertThrows(SQLException.class, () -> {
+ connection.createArrayOf("VARCHAR", new String[]{"test"});
+ });
+
+ Assert.assertThrows(SQLFeatureNotSupportedException.class, () -> {
+ connection.createStruct("test_type", new Object[]{});
+ });
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBDatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBDatabaseMetaDataExtensiveTests.java
new file mode 100644
index 000000000..c2131b5ac
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBDatabaseMetaDataExtensiveTests.java
@@ -0,0 +1,340 @@
+package openjproxy.jdbc;
+
+import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import org.junit.Assert;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBDatabaseMetaDataExtensiveTests {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+ private static Connection connection;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ public void setUp(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+ connection = DriverManager.getConnection(url, user, password);
+ TestDBUtils.createBasicTestTable(connection, "mysql_db_metadata_test", TestDBUtils.SqlSyntax.MYSQL, true);
+ }
+
+ @AfterAll
+ public static void teardown() throws Exception {
+ TestDBUtils.closeQuietly(connection);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testBasicDatabaseMetaDataProperties(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Basic database properties
+ Assert.assertNotNull(meta.getDatabaseProductName());
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertTrue(meta.getDatabaseProductName().toLowerCase().contains("mysql"));
+ else
+ Assert.assertTrue(meta.getDatabaseProductName().toLowerCase().contains("mariadb"));
+
+ Assert.assertNotNull(meta.getDatabaseProductVersion());
+ Assert.assertNotNull(meta.getDriverName());
+ Assert.assertNotNull(meta.getDriverVersion());
+ Assert.assertTrue(meta.getDriverMajorVersion() > 0);
+
+ // URL and user info
+ Assert.assertNotNull(meta.getURL());
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertTrue(meta.getURL().contains("mysql"));
+ else
+ Assert.assertTrue(meta.getURL().contains("mariadb"));
+
+ Assert.assertNotNull(meta.getUserName());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testSupportFeatures(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // MySQL typically supports these features
+ Assert.assertTrue(meta.supportsTransactions());
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertFalse(meta.supportsDataDefinitionAndDataManipulationTransactions());
+ else
+ Assert.assertTrue(meta.supportsDataDefinitionAndDataManipulationTransactions());
+ Assert.assertFalse(meta.supportsDataManipulationTransactionsOnly());
+ Assert.assertTrue(meta.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY));
+ Assert.assertTrue(meta.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY));
+
+ // MySQL supports various SQL features
+ Assert.assertTrue(meta.supportsAlterTableWithAddColumn());
+ Assert.assertTrue(meta.supportsAlterTableWithDropColumn());
+ Assert.assertTrue(meta.supportsUnion());
+ Assert.assertTrue(meta.supportsUnionAll());
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertFalse(meta.supportsOrderByUnrelated());
+ else
+ Assert.assertTrue(meta.supportsOrderByUnrelated());
+ Assert.assertTrue(meta.supportsGroupBy());
+ Assert.assertTrue(meta.supportsGroupByUnrelated());
+ Assert.assertTrue(meta.supportsLikeEscapeClause());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testIdentifierProperties(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // MySQL identifier properties
+ Assert.assertNotNull(meta.getIdentifierQuoteString());
+ Assert.assertEquals("`", meta.getIdentifierQuoteString());
+ Assert.assertNotNull(meta.getSQLKeywords());
+ Assert.assertNotNull(meta.getExtraNameCharacters());
+
+ // Case sensitivity - MySQL varies by platform
+ // Just test that these methods don't throw exceptions
+ meta.supportsMixedCaseIdentifiers();
+ meta.storesUpperCaseIdentifiers();
+ meta.storesLowerCaseIdentifiers();
+ meta.storesMixedCaseIdentifiers();
+ meta.supportsMixedCaseQuotedIdentifiers();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testTransactionSupport(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Transaction isolation levels
+ Assert.assertTrue(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
+ Assert.assertTrue(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
+ Assert.assertTrue(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
+ Assert.assertTrue(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
+
+ // Default transaction isolation
+ int defaultIsolation = meta.getDefaultTransactionIsolation();
+ Assert.assertTrue(defaultIsolation >= Connection.TRANSACTION_NONE &&
+ defaultIsolation <= Connection.TRANSACTION_SERIALIZABLE);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testFunctionSupport(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Function lists should not be null
+ Assert.assertNotNull(meta.getNumericFunctions());
+ Assert.assertNotNull(meta.getStringFunctions());
+ Assert.assertNotNull(meta.getSystemFunctions());
+ Assert.assertNotNull(meta.getTimeDateFunctions());
+
+ // MySQL should support common functions
+ String numericFunctions = meta.getNumericFunctions().toUpperCase();
+ String stringFunctions = meta.getStringFunctions().toUpperCase();
+ String timeDateFunctions = meta.getTimeDateFunctions().toUpperCase();
+
+ // Verify some common MySQL functions are listed
+ Assert.assertTrue(numericFunctions.contains("ABS") || numericFunctions.contains("ROUND"));
+ Assert.assertTrue(stringFunctions.contains("CONCAT") || stringFunctions.contains("LENGTH"));
+ Assert.assertTrue(timeDateFunctions.contains("NOW") || timeDateFunctions.contains("CURDATE"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testResultSetSupport(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // ResultSet type support
+ Assert.assertTrue(meta.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY));
+ // MySQL may or may not support scrollable result sets depending on configuration
+ meta.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE);
+ meta.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE);
+
+ // ResultSet concurrency support
+ Assert.assertTrue(meta.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY));
+ meta.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
+
+ // ResultSet holdability
+ Assert.assertTrue(meta.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT) ||
+ meta.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetTables(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Test getTables method
+ ResultSet tables = meta.getTables(null, null, "%", new String[]{"TABLE"});
+ Assert.assertNotNull(tables);
+
+ boolean foundTestTable = false;
+ while (tables.next()) {
+ String tableName = tables.getString("TABLE_NAME");
+ if ("mysql_db_metadata_test".equals(tableName)) {
+ foundTestTable = true;
+ Assert.assertEquals("TABLE", tables.getString("TABLE_TYPE"));
+ break;
+ }
+ }
+ Assert.assertTrue("Should find the test table we created", foundTestTable);
+ tables.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetColumns(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Test getColumns method
+ ResultSet columns = meta.getColumns(null, null, "mysql_db_metadata_test", "%");
+ Assert.assertNotNull(columns);
+
+ boolean foundIdColumn = false;
+ boolean foundNameColumn = false;
+ while (columns.next()) {
+ String columnName = columns.getString("COLUMN_NAME");
+ if ("id".equals(columnName)) {
+ foundIdColumn = true;
+ Assert.assertEquals("INT", columns.getString("TYPE_NAME").toUpperCase());
+ } else if ("name".equals(columnName)) {
+ foundNameColumn = true;
+ Assert.assertEquals("VARCHAR", columns.getString("TYPE_NAME").toUpperCase());
+ }
+ }
+ Assert.assertTrue("Should find id column", foundIdColumn);
+ Assert.assertTrue("Should find name column", foundNameColumn);
+ columns.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetPrimaryKeys(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Test getPrimaryKeys method
+ ResultSet primaryKeys = meta.getPrimaryKeys(null, null, "mysql_db_metadata_test");
+ Assert.assertNotNull(primaryKeys);
+
+ boolean foundPrimaryKey = false;
+ while (primaryKeys.next()) {
+ String columnName = primaryKeys.getString("COLUMN_NAME");
+ if ("id".equals(columnName)) {
+ foundPrimaryKey = true;
+ Assert.assertEquals("mysql_db_metadata_test", primaryKeys.getString("TABLE_NAME"));
+ Assert.assertEquals((short) 1, primaryKeys.getShort("KEY_SEQ"));
+ break;
+ }
+ }
+ Assert.assertTrue("Should find primary key on id column", foundPrimaryKey);
+ primaryKeys.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetTypeInfo(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Test getTypeInfo method
+ ResultSet typeInfo = meta.getTypeInfo();
+ Assert.assertNotNull(typeInfo);
+
+ boolean foundIntType = false;
+ boolean foundVarcharType = false;
+ while (typeInfo.next()) {
+ String typeName = typeInfo.getString("TYPE_NAME").toUpperCase();
+ if (typeName.contains("INT")) {
+ foundIntType = true;
+ } else if (typeName.contains("VARCHAR")) {
+ foundVarcharType = true;
+ }
+ }
+ Assert.assertTrue("Should find integer type", foundIntType);
+ Assert.assertTrue("Should find varchar type", foundVarcharType);
+ typeInfo.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testMySQLSpecificMetaData(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // MySQL specific features
+ Assert.assertTrue(meta.supportsSubqueriesInComparisons());
+ Assert.assertTrue(meta.supportsSubqueriesInExists());
+ Assert.assertTrue(meta.supportsSubqueriesInIns());
+ Assert.assertTrue(meta.supportsCorrelatedSubqueries());
+
+ // Batch updates
+ Assert.assertTrue(meta.supportsBatchUpdates());
+
+ // Savepoints
+ Assert.assertTrue(meta.supportsSavepoints());
+
+ // Get/Set autocommit
+ Assert.assertTrue(meta.supportsGetGeneratedKeys());
+
+ // Named parameters in callable statements
+ meta.supportsNamedParameters(); // May return false, which is fine
+
+ // Multiple open results
+ meta.supportsMultipleOpenResults(); // Depends on MySQL version/config
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testLimitsAndSizes(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ DatabaseMetaData meta = connection.getMetaData();
+
+ // Test various limits - these should return reasonable values or 0 if unlimited
+ Assert.assertTrue(meta.getMaxBinaryLiteralLength() >= 0);
+ Assert.assertTrue(meta.getMaxCharLiteralLength() >= 0);
+ Assert.assertTrue(meta.getMaxColumnNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxColumnsInGroupBy() >= 0);
+ Assert.assertTrue(meta.getMaxColumnsInIndex() >= 0);
+ Assert.assertTrue(meta.getMaxColumnsInOrderBy() >= 0);
+ Assert.assertTrue(meta.getMaxColumnsInSelect() >= 0);
+ Assert.assertTrue(meta.getMaxColumnsInTable() >= 0);
+ Assert.assertTrue(meta.getMaxConnections() >= 0);
+ Assert.assertTrue(meta.getMaxCursorNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxIndexLength() >= 0);
+ Assert.assertTrue(meta.getMaxSchemaNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxProcedureNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxCatalogNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxRowSize() >= 0);
+ Assert.assertTrue(meta.getMaxStatementLength() >= 0);
+ Assert.assertTrue(meta.getMaxStatements() >= 0);
+ Assert.assertTrue(meta.getMaxTableNameLength() >= 0);
+ Assert.assertTrue(meta.getMaxTablesInSelect() >= 0);
+ Assert.assertTrue(meta.getMaxUserNameLength() >= 0);
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBMultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBMultipleTypesIntegrationTest.java
new file mode 100644
index 000000000..bc8b2a438
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBMultipleTypesIntegrationTest.java
@@ -0,0 +1,192 @@
+package openjproxy.jdbc;
+
+import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import org.junit.Assert;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.Date;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBMultipleTypesIntegrationTest {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing for url -> " + url);
+
+ TestDBUtils.createMultiTypeTestTable(conn, "mysql_multi_types_test", TestDBUtils.SqlSyntax.MYSQL);
+
+ java.sql.PreparedStatement psInsert = conn.prepareStatement(
+ "insert into mysql_multi_types_test (val_int, val_varchar, val_double_precision, val_bigint, val_tinyint, " +
+ "val_smallint, val_boolean, val_decimal, val_float, val_byte, val_binary, val_date, val_time, " +
+ "val_timestamp) " +
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+ );
+
+ psInsert.setInt(1, 1);
+ psInsert.setString(2, "TITLE_1");
+ psInsert.setDouble(3, 2.2222d);
+ psInsert.setLong(4, 33333333333333l);
+ psInsert.setInt(5, 127);
+ psInsert.setInt(6, 32767);
+ psInsert.setBoolean(7, true);
+ psInsert.setBigDecimal(8, new BigDecimal(10));
+ psInsert.setFloat(9, 20.20f);
+ psInsert.setByte(10, (byte) 1);
+ psInsert.setBytes(11, "AAAA".getBytes());
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ Date valDate = new Date(sdf.parse("2024-12-01").getTime());
+ psInsert.setDate(12, valDate);
+
+ SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");
+ Time valTime = new Time(sdfTime.parse("10:10:10").getTime());
+ psInsert.setTime(13, valTime);
+
+ SimpleDateFormat sdfTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Timestamp valTimestamp = new Timestamp(sdfTimestamp.parse("2024-12-01 10:10:10").getTime());
+ psInsert.setTimestamp(14, valTimestamp);
+
+ psInsert.executeUpdate();
+
+ java.sql.PreparedStatement psSelect = conn.prepareStatement("select * from mysql_multi_types_test where val_int = ?");
+ psSelect.setInt(1, 1);
+ ResultSet resultSet = psSelect.executeQuery();
+ resultSet.next();
+
+ // Validate all data types
+ int valInt = resultSet.getInt(1);
+ String valVarchar = resultSet.getString(2);
+ double valDoublePrecision = resultSet.getDouble(3);
+ long valBigint = resultSet.getLong(4);
+ int valTinyint = resultSet.getInt(5);
+ int valSmallint = resultSet.getInt(6);
+ boolean valBoolean = resultSet.getBoolean(7);
+ BigDecimal valDecimal = resultSet.getBigDecimal(8);
+ float valFloat = resultSet.getFloat(9);
+ byte valByte = resultSet.getByte(10);
+ byte[] valBinary = resultSet.getBytes(11);
+ Date valDateRet = resultSet.getDate(12);
+ Time valTimeRet = resultSet.getTime(13);
+ Timestamp valTimestampRet = resultSet.getTimestamp(14);
+
+ // Assertions
+ Assert.assertEquals(1, valInt);
+ Assert.assertEquals("TITLE_1", valVarchar);
+ Assert.assertEquals(2.2222d, valDoublePrecision, 0.00001);
+ Assert.assertEquals(33333333333333l, valBigint);
+ Assert.assertEquals(127, valTinyint);
+ Assert.assertEquals(32767, valSmallint);
+ Assert.assertEquals(true, valBoolean);
+ Assert.assertEquals(new BigDecimal(10), valDecimal);
+ Assert.assertEquals(20.20f, valFloat, 0.001);
+ Assert.assertEquals((byte) 49, valByte);//Mysql return the byte as a character somehow and the byte value of character 1 is 49 (tested with direct connection)
+ Assert.assertEquals("AAAA", new String(valBinary));
+ Assert.assertEquals(valDate, valDateRet);
+ Assert.assertEquals(valTime, valTimeRet);
+ Assert.assertEquals(valTimestamp, valTimestampRet);
+
+ resultSet.close();
+ psSelect.close();
+ psInsert.close();
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void mysqlSpecificTypesTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing MySQL-specific types for url -> " + url);
+
+ TestDBUtils.createMySQLSpecificTestTable(conn, "mysql_specific_types_test");
+
+ java.sql.PreparedStatement psInsert = conn.prepareStatement(
+ "insert into mysql_specific_types_test (enum_col, json_col, text_col, mediumtext_col, " +
+ "longtext_col, blob_col, mediumblob_col, longblob_col, set_col, year_col, bit_col) " +
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
+ );
+
+ psInsert.setString(1, "medium");
+ psInsert.setString(2, "{\"key\": \"value\", \"number\": 42}");
+ psInsert.setString(3, "This is a TEXT column");
+ psInsert.setString(4, "This is a MEDIUMTEXT column with more content");
+ psInsert.setString(5, "This is a LONGTEXT column with even more content");
+ psInsert.setBytes(6, "BLOB data".getBytes());
+ psInsert.setBytes(7, "MEDIUMBLOB data".getBytes());
+ psInsert.setBytes(8, "LONGBLOB data".getBytes());
+ psInsert.setString(9, "option1,option3");
+ psInsert.setInt(10, 2024);
+ psInsert.setByte(11, (byte) 0b101010);
+
+ psInsert.executeUpdate();
+
+ java.sql.PreparedStatement psSelect = conn.prepareStatement("select * from mysql_specific_types_test where id = LAST_INSERT_ID()");
+ ResultSet resultSet = psSelect.executeQuery();
+ resultSet.next();
+
+ // Validate MySQL-specific data types
+ int id = resultSet.getInt(1);
+ String enumCol = resultSet.getString(2);
+ String jsonCol = resultSet.getString(3);
+ String textCol = resultSet.getString(4);
+ String mediumtextCol = resultSet.getString(5);
+ String longtextCol = resultSet.getString(6);
+ byte[] blobCol = resultSet.getBytes(7);
+ byte[] mediumblobCol = resultSet.getBytes(8);
+ byte[] longblobCol = resultSet.getBytes(9);
+ String setCol = resultSet.getString(10);
+ int yearCol = resultSet.getInt(11);
+ byte bitCol = resultSet.getByte(12);
+
+ // Assertions
+ Assert.assertTrue(id > 0);
+ Assert.assertEquals("medium", enumCol);
+ Assert.assertEquals("{\"key\": \"value\", \"number\": 42}", jsonCol);
+ Assert.assertEquals("This is a TEXT column", textCol);
+ Assert.assertEquals("This is a MEDIUMTEXT column with more content", mediumtextCol);
+ Assert.assertEquals("This is a LONGTEXT column with even more content", longtextCol);
+ Assert.assertEquals("BLOB data", new String(blobCol));
+ Assert.assertEquals("MEDIUMBLOB data", new String(mediumblobCol));
+ Assert.assertEquals("LONGBLOB data", new String(longblobCol));
+ Assert.assertEquals("option1,option3", setCol);
+ Assert.assertEquals(2024, yearCol);
+ Assert.assertEquals((byte) 0b101010, bitCol);
+
+ resultSet.close();
+ psSelect.close();
+ psInsert.close();
+ conn.close();
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBPreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBPreparedStatementExtensiveTests.java
new file mode 100644
index 000000000..26037eb43
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBPreparedStatementExtensiveTests.java
@@ -0,0 +1,421 @@
+package openjproxy.jdbc;
+
+import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import org.junit.Assert;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.io.ByteArrayInputStream;
+import java.io.StringReader;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.Date;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.sql.Types;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBPreparedStatementExtensiveTests {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+ private Connection connection;
+ private PreparedStatement ps;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ public void setUp(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+
+ connection = DriverManager.getConnection(url, user, password);
+ Statement stmt = connection.createStatement();
+ try {
+ stmt.execute("DROP TABLE mysql_prepared_stmt_test");
+ } catch (SQLException ignore) {}
+ stmt.execute("CREATE TABLE mysql_prepared_stmt_test (" +
+ "id INT PRIMARY KEY, " +
+ "name VARCHAR(255), " +
+ "age INT, " +
+ "data BLOB, " +
+ "info TEXT, " +
+ "dt DATE, " +
+ "tm TIME, " +
+ "ts TIMESTAMP)");
+ stmt.close();
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ TestDBUtils.closeQuietly(ps, connection);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testBasicParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+
+ // Test basic parameter setters
+ ps.setInt(1, 1);
+ ps.setString(2, "Alice");
+ ps.setInt(3, 25);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Verify the insert
+ ps = connection.prepareStatement("SELECT id, name, age FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 1);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(1, rs.getInt("id"));
+ Assert.assertEquals("Alice", rs.getString("name"));
+ Assert.assertEquals(25, rs.getInt("age"));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testNumericParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+
+ // Test numeric parameter setters
+ ps.setLong(1, 2L);
+ ps.setString(2, "Bob");
+ ps.setShort(3, (short) 30);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ ps.setByte(1, (byte) 3);
+ ps.setString(2, "Charlie");
+ ps.setFloat(3, 35.5f);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ ps.setDouble(1, 4.0);
+ ps.setString(2, "David");
+ ps.setBigDecimal(3, BigDecimal.valueOf(40));
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ ps.setBoolean(1, true); // Will be converted to 1
+ ps.setString(2, "Eve");
+ ps.setInt(3, 45);
+ Assert.assertEquals(1, ps.executeUpdate());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testDateTimeParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, dt, tm, ts) VALUES (?, ?, ?, ?, ?)");
+
+ Date testDate = Date.valueOf("2024-12-01");
+ Time testTime = Time.valueOf("10:30:45");
+ Timestamp testTimestamp = Timestamp.valueOf("2024-12-01 10:30:45");
+
+ ps.setInt(1, 10);
+ ps.setString(2, "DateTest");
+ ps.setDate(3, testDate);
+ ps.setTime(4, testTime);
+ ps.setTimestamp(5, testTimestamp);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Verify the data
+ ps = connection.prepareStatement("SELECT dt, tm, ts FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 10);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(testDate, rs.getDate("dt"));
+ Assert.assertEquals(testTime, rs.getTime("tm"));
+ Assert.assertEquals(testTimestamp, rs.getTimestamp("ts"));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testBinaryParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, data) VALUES (?, ?, ?)");
+
+ byte[] testData = "Hello World".getBytes();
+ ps.setInt(1, 20);
+ ps.setString(2, "BinaryTest");
+ ps.setBytes(3, testData);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Test with InputStream
+ ps.setInt(1, 21);
+ ps.setString(2, "StreamTest");
+ ps.setBinaryStream(3, new ByteArrayInputStream(testData));
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Verify the data
+ ps = connection.prepareStatement("SELECT data FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 20);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ byte[] retrievedData = rs.getBytes("data");
+ Assert.assertEquals("Hello World", new String(retrievedData));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testTextParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, info) VALUES (?, ?, ?)");
+
+ String testText = "This is a test text for TEXT column";
+ ps.setInt(1, 30);
+ ps.setString(2, "TextTest");
+ ps.setString(3, testText);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Test with character stream
+ ps.setInt(1, 31);
+ ps.setString(2, "StreamTextTest");
+ ps.setCharacterStream(3, new StringReader(testText));
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Verify the data
+ ps = connection.prepareStatement("SELECT info FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 30);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(testText, rs.getString("info"));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testNullParameterSetters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age, data, info) VALUES (?, ?, ?, ?, ?)");
+
+ ps.setInt(1, 40);
+ ps.setNull(2, Types.VARCHAR);
+ ps.setNull(3, Types.INTEGER);
+ ps.setNull(4, Types.BLOB);
+ ps.setNull(5, Types.LONGVARCHAR);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Verify nulls
+ ps = connection.prepareStatement("SELECT name, age, data, info FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 40);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ Assert.assertNull(rs.getString("name"));
+ Assert.assertEquals(0, rs.getInt("age"));
+ Assert.assertTrue(rs.wasNull());
+ Assert.assertNull(rs.getBytes("data"));
+ Assert.assertNull(rs.getString("info"));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecuteQuery(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Insert test data
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+ ps.setInt(1, 50);
+ ps.setString(2, "QueryTest");
+ ps.setInt(3, 25);
+ ps.executeUpdate();
+
+ // Test executeQuery
+ ps = connection.prepareStatement("SELECT * FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 50);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertNotNull(rs);
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(50, rs.getInt("id"));
+ Assert.assertEquals("QueryTest", rs.getString("name"));
+ Assert.assertEquals(25, rs.getInt("age"));
+ Assert.assertFalse(rs.next());
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecuteUpdate(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Test INSERT
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+ ps.setInt(1, 60);
+ ps.setString(2, "UpdateTest");
+ ps.setInt(3, 30);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Test UPDATE
+ ps = connection.prepareStatement("UPDATE mysql_prepared_stmt_test SET age = ? WHERE id = ?");
+ ps.setInt(1, 35);
+ ps.setInt(2, 60);
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ // Test DELETE
+ ps = connection.prepareStatement("DELETE FROM mysql_prepared_stmt_test WHERE id = ?");
+ ps.setInt(1, 60);
+ Assert.assertEquals(1, ps.executeUpdate());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecute(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Test execute with query
+ ps = connection.prepareStatement("SELECT COUNT(*) FROM mysql_prepared_stmt_test");
+ boolean hasResultSet = ps.execute();
+ Assert.assertTrue(hasResultSet);
+ ResultSet rs = ps.getResultSet();
+ Assert.assertNotNull(rs);
+ rs.close();
+
+ // Test execute with update
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name) VALUES (?, ?)");
+ ps.setInt(1, 70);
+ ps.setString(2, "ExecuteTest");
+ hasResultSet = ps.execute();
+ Assert.assertFalse(hasResultSet);
+ Assert.assertEquals(1, ps.getUpdateCount());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testBatch(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+
+ ps.setInt(1, 80);
+ ps.setString(2, "Batch1");
+ ps.setInt(3, 25);
+ ps.addBatch();
+
+ ps.setInt(1, 81);
+ ps.setString(2, "Batch2");
+ ps.setInt(3, 30);
+ ps.addBatch();
+
+ ps.setInt(1, 82);
+ ps.setString(2, "Batch3");
+ ps.setInt(3, 35);
+ ps.addBatch();
+
+ int[] results = ps.executeBatch();
+ Assert.assertEquals(3, results.length);
+ Assert.assertEquals(1, results[0]);
+ Assert.assertEquals(1, results[1]);
+ Assert.assertEquals(1, results[2]);
+
+ // Verify the batch insert
+ ps = connection.prepareStatement("SELECT COUNT(*) FROM mysql_prepared_stmt_test WHERE id BETWEEN ? AND ?");
+ ps.setInt(1, 80);
+ ps.setInt(2, 82);
+ ResultSet rs = ps.executeQuery();
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(3, rs.getInt(1));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testClearParameters(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+ ps.setInt(1, 90);
+ ps.setString(2, "ClearTest");
+ ps.setInt(3, 25);
+
+ ps.clearParameters();
+
+ // Should throw SQLException because parameters are not set
+ Assert.assertThrows(SQLException.class, () -> ps.executeUpdate());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testMetaData(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("SELECT id, name, age FROM mysql_prepared_stmt_test WHERE id = ?");
+ ResultSetMetaData metaData = ps.getMetaData();
+ Assert.assertNotNull(metaData);
+ Assert.assertEquals(3, metaData.getColumnCount());
+ Assert.assertEquals("id", metaData.getColumnName(1).toLowerCase());
+ Assert.assertEquals("name", metaData.getColumnName(2).toLowerCase());
+ Assert.assertEquals("age", metaData.getColumnName(3).toLowerCase());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testParameterMetaData(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ ps = connection.prepareStatement("INSERT INTO mysql_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
+ try {
+ var paramMetaData = ps.getParameterMetaData();
+ Assert.assertNotNull(paramMetaData);
+ //TODO implement the ParameterMetaData using remote proxy
+ //Assert.assertEquals(3, paramMetaData.getParameterCount());
+ } catch (SQLException e) {
+ // Some MySQL drivers/versions may not fully support parameter metadata
+ // This is acceptable
+ }
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGeneratedKeys(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Create table with auto-increment
+ Statement stmt = connection.createStatement();
+ try {
+ stmt.execute("DROP TABLE mysql_auto_increment_ps_test");
+ } catch (SQLException ignore) {}
+ stmt.execute("CREATE TABLE mysql_auto_increment_ps_test (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))");
+ stmt.close();
+
+ ps = connection.prepareStatement("INSERT INTO mysql_auto_increment_ps_test (name) VALUES (?)",
+ Statement.RETURN_GENERATED_KEYS);
+ ps.setString(1, "GeneratedKeyTest");
+ Assert.assertEquals(1, ps.executeUpdate());
+
+ ResultSet keys = ps.getGeneratedKeys();
+ Assert.assertNotNull(keys);
+ Assert.assertTrue(keys.next());
+ Assert.assertTrue(keys.getInt(1) > 0);
+ keys.close();
+
+ // Cleanup
+ stmt = connection.createStatement();
+ stmt.execute("DROP TABLE mysql_auto_increment_ps_test");
+ stmt.close();
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBSpecificFeaturesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBSpecificFeaturesIntegrationTest.java
new file mode 100644
index 000000000..ce7ebf49b
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBSpecificFeaturesIntegrationTest.java
@@ -0,0 +1,270 @@
+package openjproxy.jdbc;
+
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import org.junit.Assert;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+/**
+ * Tests for MySQL-specific functionality that is not covered by database-agnostic tests.
+ * Includes features like ON DUPLICATE KEY UPDATE, SELECT ... FOR UPDATE, SHOW commands, etc.
+ */
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBSpecificFeaturesIntegrationTest {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void onDuplicateKeyUpdateTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing ON DUPLICATE KEY UPDATE for url -> " + url);
+
+ try (Statement stmt = conn.createStatement()) {
+ // Drop table if exists
+ try {
+ stmt.execute("DROP TABLE mysql_upsert_test");
+ } catch (SQLException e) {
+ // Ignore - table might not exist
+ }
+
+ // Create table with unique constraint
+ stmt.execute("CREATE TABLE mysql_upsert_test (" +
+ "id INT PRIMARY KEY, " +
+ "name VARCHAR(100), " +
+ "count_val INT DEFAULT 1" +
+ ")");
+
+ // Insert initial data
+ stmt.execute("INSERT INTO mysql_upsert_test (id, name, count_val) VALUES (1, 'Test Item', 1)");
+
+ // Test ON DUPLICATE KEY UPDATE
+ stmt.execute("INSERT INTO mysql_upsert_test (id, name, count_val) VALUES (1, 'Updated Item', 2) " +
+ "ON DUPLICATE KEY UPDATE name = VALUES(name), count_val = count_val + VALUES(count_val)");
+
+ // Verify the upsert worked correctly
+ ResultSet rs = stmt.executeQuery("SELECT id, name, count_val FROM mysql_upsert_test WHERE id = 1");
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(1, rs.getInt("id"));
+ Assert.assertEquals("Updated Item", rs.getString("name"));
+ Assert.assertEquals(3, rs.getInt("count_val")); // 1 + 2
+
+ rs.close();
+ }
+
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void selectForUpdateTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing SELECT ... FOR UPDATE for url -> " + url);
+
+ try (Statement stmt = conn.createStatement()) {
+ // Drop table if exists
+ try {
+ stmt.execute("DROP TABLE mysql_lock_test");
+ } catch (SQLException e) {
+ // Ignore - table might not exist
+ }
+
+ // Create table
+ stmt.execute("CREATE TABLE mysql_lock_test (" +
+ "id INT PRIMARY KEY, " +
+ "balance DECIMAL(10,2)" +
+ ")");
+
+ // Insert test data
+ stmt.execute("INSERT INTO mysql_lock_test (id, balance) VALUES (1, 100.00)");
+
+ // Disable autocommit to test locking
+ conn.setAutoCommit(false);
+
+ // Test SELECT ... FOR UPDATE
+ ResultSet rs = stmt.executeQuery("SELECT id, balance FROM mysql_lock_test WHERE id = 1 FOR UPDATE");
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(1, rs.getInt("id"));
+ Assert.assertEquals(100.00, rs.getDouble("balance"), 0.01);
+
+ // Update the locked row
+ stmt.executeUpdate("UPDATE mysql_lock_test SET balance = balance - 50.00 WHERE id = 1");
+
+ // Commit the transaction
+ conn.commit();
+
+ // Verify the update
+ rs = stmt.executeQuery("SELECT balance FROM mysql_lock_test WHERE id = 1");
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(50.00, rs.getDouble("balance"), 0.01);
+
+ rs.close();
+ }
+
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void showTablesTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing SHOW TABLES for url -> " + url);
+
+ try (Statement stmt = conn.createStatement()) {
+ // Create a test table
+ try {
+ stmt.execute("DROP TABLE mysql_show_test");
+ } catch (SQLException e) {
+ // Ignore - table might not exist
+ }
+
+ stmt.execute("CREATE TABLE mysql_show_test (id INT PRIMARY KEY)");
+
+ // Test SHOW TABLES
+ ResultSet rs = stmt.executeQuery("SHOW TABLES");
+ boolean foundTable = false;
+ while (rs.next()) {
+ String tableName = rs.getString(1);
+ if ("mysql_show_test".equals(tableName)) {
+ foundTable = true;
+ break;
+ }
+ }
+ Assert.assertTrue("Table mysql_show_test should be found in SHOW TABLES", foundTable);
+
+ rs.close();
+ }
+
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void autoIncrementAndLastInsertIdTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing AUTO_INCREMENT and LAST_INSERT_ID() for url -> " + url);
+
+ try (Statement stmt = conn.createStatement()) {
+ // Drop table if exists
+ try {
+ stmt.execute("DROP TABLE mysql_auto_increment_test");
+ } catch (SQLException e) {
+ // Ignore - table might not exist
+ }
+
+ // Create table with auto-increment
+ stmt.execute("CREATE TABLE mysql_auto_increment_test (" +
+ "id INT AUTO_INCREMENT PRIMARY KEY, " +
+ "name VARCHAR(100)" +
+ ")");
+
+ // Insert data and test LAST_INSERT_ID()
+ stmt.execute("INSERT INTO mysql_auto_increment_test (name) VALUES ('First Item')");
+ ResultSet rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
+ Assert.assertTrue(rs.next());
+ long firstId = rs.getLong(1);
+ Assert.assertTrue(firstId > 0);
+
+ // Insert another item
+ stmt.execute("INSERT INTO mysql_auto_increment_test (name) VALUES ('Second Item')");
+ rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");
+ Assert.assertTrue(rs.next());
+ long secondId = rs.getLong(1);
+ Assert.assertEquals(firstId + 1, secondId);
+
+ // Verify the data
+ rs = stmt.executeQuery("SELECT id, name FROM mysql_auto_increment_test ORDER BY id");
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(firstId, rs.getLong("id"));
+ Assert.assertEquals("First Item", rs.getString("name"));
+
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals(secondId, rs.getLong("id"));
+ Assert.assertEquals("Second Item", rs.getString("name"));
+
+ rs.close();
+ }
+
+ conn.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void mysqlInformationSchemaTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
+ // MariaDB tests controlled by @EnabledIf annotation
+
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing MySQL INFORMATION_SCHEMA queries for url -> " + url);
+
+ try (Statement stmt = conn.createStatement()) {
+ // Test INFORMATION_SCHEMA.TABLES
+ ResultSet rs = stmt.executeQuery(
+ "SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES " +
+ "WHERE TABLE_SCHEMA = DATABASE() LIMIT 10"
+ );
+
+ // Should have at least some results
+ boolean hasResults = false;
+ while (rs.next()) {
+ hasResults = true;
+ String tableName = rs.getString("TABLE_NAME");
+ String tableType = rs.getString("TABLE_TYPE");
+ Assert.assertNotNull(tableName);
+ Assert.assertNotNull(tableType);
+ }
+ // Note: We can't assert hasResults because the database might be empty in tests
+
+ rs.close();
+
+ // Test INFORMATION_SCHEMA.COLUMNS
+ rs = stmt.executeQuery(
+ "SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS " +
+ "WHERE TABLE_SCHEMA = DATABASE() LIMIT 10"
+ );
+
+ // Validate the query runs without error
+ while (rs.next()) {
+ String columnName = rs.getString("COLUMN_NAME");
+ String dataType = rs.getString("DATA_TYPE");
+ // Just verify these can be read without error
+ Assert.assertNotNull(columnName);
+ Assert.assertNotNull(dataType);
+ }
+
+ rs.close();
+ }
+
+ conn.close();
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBStatementExtensiveTests.java
new file mode 100644
index 000000000..4f0b7ce40
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MariaDBStatementExtensiveTests.java
@@ -0,0 +1,334 @@
+package openjproxy.jdbc;
+
+import openjproxy.jdbc.testutil.MariaDBConnectionProvider;
+import openjproxy.jdbc.testutil.TestDBUtils;
+import org.junit.Assert;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import static org.junit.jupiter.api.Assumptions.assumeFalse;
+
+@EnabledIf("openjproxy.jdbc.testutil.MariaDBTestContainer#isEnabled")
+public class MariaDBStatementExtensiveTests {
+
+ private static boolean isMariaDBTestEnabled;
+ private static boolean isMariaDBTestDisabled;
+ private Connection connection;
+ private Statement statement;
+
+ @BeforeAll
+ public static void checkTestConfiguration() {
+ isMariaDBTestEnabled = Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
+ }
+
+ public void setUp(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ // MariaDB tests controlled by @EnabledIf annotation
+ assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
+
+ connection = DriverManager.getConnection(url, user, password);
+ statement = connection.createStatement();
+ TestDBUtils.createBasicTestTable(connection, "mysql_statement_test", TestDBUtils.SqlSyntax.MYSQL, true);
+ }
+
+ @AfterEach
+ public void tearDown() throws Exception {
+ TestDBUtils.closeQuietly(statement, connection);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecuteQuery(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ ResultSet rs = statement.executeQuery("SELECT * FROM mysql_statement_test");
+ Assert.assertNotNull(rs);
+ Assert.assertTrue(rs.next());
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecuteUpdate(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int rows = statement.executeUpdate("UPDATE mysql_statement_test SET name = 'Updated Alice' WHERE id = 1");
+ Assert.assertEquals(1, rows);
+
+ ResultSet rs = statement.executeQuery("SELECT name FROM mysql_statement_test WHERE id = 1");
+ Assert.assertTrue(rs.next());
+ Assert.assertEquals("Updated Alice", rs.getString("name"));
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testClose(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ Assert.assertFalse(statement.isClosed());
+ statement.close();
+ Assert.assertTrue(statement.isClosed());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testMaxFieldSize(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int orig = statement.getMaxFieldSize();
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertTrue(orig > 0);
+ else
+ Assert.assertTrue(orig == 0);
+ statement.setMaxFieldSize(5);
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertEquals(5, statement.getMaxFieldSize());
+ else
+ Assert.assertEquals(0, statement.getMaxFieldSize());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testMaxRows(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ Assert.assertEquals(0, statement.getMaxRows());
+ statement.setMaxRows(10);
+ Assert.assertEquals(10, statement.getMaxRows());
+ statement.setMaxRows(0);
+ Assert.assertEquals(0, statement.getMaxRows());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testQueryTimeout(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ Assert.assertEquals(0, statement.getQueryTimeout());
+ statement.setQueryTimeout(30);
+ Assert.assertEquals(30, statement.getQueryTimeout());
+ statement.setQueryTimeout(0);
+ Assert.assertEquals(0, statement.getQueryTimeout());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testWarnings(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ // Initial warnings might be null
+ statement.getWarnings();
+ statement.clearWarnings();
+ Assert.assertNull(statement.getWarnings());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecute(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ boolean hasResultSet = statement.execute("SELECT * FROM mysql_statement_test");
+ Assert.assertTrue(hasResultSet);
+
+ ResultSet rs = statement.getResultSet();
+ Assert.assertNotNull(rs);
+ Assert.assertTrue(rs.next());
+ rs.close();
+
+ hasResultSet = statement.execute("UPDATE mysql_statement_test SET name = 'Test' WHERE id = 1");
+ Assert.assertFalse(hasResultSet);
+ Assert.assertEquals(1, statement.getUpdateCount());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetResultSet(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ statement.execute("SELECT * FROM mysql_statement_test");
+ ResultSet rs = statement.getResultSet();
+ Assert.assertNotNull(rs);
+ rs.close();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetUpdateCount(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ statement.execute("UPDATE mysql_statement_test SET name = 'Test Update' WHERE id = 1");
+ Assert.assertEquals(1, statement.getUpdateCount());
+
+ statement.execute("SELECT * FROM mysql_statement_test");
+ Assert.assertEquals(-1, statement.getUpdateCount());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetMoreResults(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ statement.execute("SELECT * FROM mysql_statement_test");
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertFalse(statement.getMoreResults());
+ else
+ Assert.assertThrows(SQLException.class, () -> statement.getMoreResults());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testFetchDirection(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ Assert.assertEquals(ResultSet.FETCH_FORWARD, statement.getFetchDirection());
+ statement.setFetchDirection(ResultSet.FETCH_FORWARD);
+ Assert.assertEquals(ResultSet.FETCH_FORWARD, statement.getFetchDirection());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testFetchSize(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int originalFetchSize = statement.getFetchSize();
+ statement.setFetchSize(100);
+ Assert.assertEquals(100, statement.getFetchSize());
+ statement.setFetchSize(originalFetchSize);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testResultSetConcurrency(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int concurrency = statement.getResultSetConcurrency();
+ Assert.assertTrue(concurrency == ResultSet.CONCUR_READ_ONLY || concurrency == ResultSet.CONCUR_UPDATABLE);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testResultSetType(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int type = statement.getResultSetType();
+ Assert.assertTrue(type == ResultSet.TYPE_FORWARD_ONLY ||
+ type == ResultSet.TYPE_SCROLL_INSENSITIVE ||
+ type == ResultSet.TYPE_SCROLL_SENSITIVE);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testAddBatch(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ statement.addBatch("INSERT INTO mysql_statement_test (id, name) VALUES (10, 'Batch1')");
+ statement.addBatch("INSERT INTO mysql_statement_test (id, name) VALUES (11, 'Batch2')");
+ statement.clearBatch();
+
+ statement.addBatch("INSERT INTO mysql_statement_test (id, name) VALUES (12, 'Batch3')");
+ int[] results = statement.executeBatch();
+ Assert.assertEquals(1, results.length);
+ Assert.assertEquals(1, results[0]);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetConnection(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ Assert.assertSame(connection, statement.getConnection());
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testGetGeneratedKeys(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Create table with auto-increment
+ try {
+ statement.execute("DROP TABLE mysql_auto_test");
+ } catch (SQLException e) {
+ // Ignore if table doesn't exist
+ }
+ statement.execute("CREATE TABLE mysql_auto_test (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))");
+
+ statement.execute("INSERT INTO mysql_auto_test (name) VALUES ('Test')", Statement.RETURN_GENERATED_KEYS);
+ ResultSet keys = statement.getGeneratedKeys();
+ Assert.assertNotNull(keys);
+ Assert.assertTrue(keys.next());
+ Assert.assertTrue(keys.getInt(1) > 0);
+ keys.close();
+
+ statement.execute("DROP TABLE mysql_auto_test");
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testExecuteUpdateWithGeneratedKeys(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+
+ // Create table with auto-increment
+ try{
+ statement.execute("DROP TABLE mysql_auto_test2");
+ } catch (SQLException e) {
+ // Ignore if table doesn't exist
+ }
+ statement.execute("CREATE TABLE mysql_auto_test2 (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100))");
+
+ int rows = statement.executeUpdate("INSERT INTO mysql_auto_test2 (name) VALUES ('Test')", Statement.RETURN_GENERATED_KEYS);
+ Assert.assertEquals(1, rows);
+
+ ResultSet keys = statement.getGeneratedKeys();
+ Assert.assertNotNull(keys);
+ Assert.assertTrue(keys.next());
+ Assert.assertTrue(keys.getInt(1) > 0);
+ keys.close();
+
+ statement.execute("DROP TABLE mysql_auto_test2");
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testResultSetHoldability(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ int holdability = statement.getResultSetHoldability();
+ Assert.assertTrue(holdability == ResultSet.HOLD_CURSORS_OVER_COMMIT ||
+ holdability == ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCancel(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ // Test that cancel doesn't throw an exception
+ statement.cancel();
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testEscapeProcessing(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ statement.setEscapeProcessing(true);
+ statement.setEscapeProcessing(false);
+ // Just verify these calls don't throw exceptions
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testCursorName(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ // MySQL may not support named cursors in all configurations
+ if (url.toLowerCase().contains("mysql"))
+ statement.setCursorName("test_cursor");
+ else
+ Assert.assertThrows(SQLException.class, () -> statement.setCursorName("test_cursor"));
+ }
+
+ @ParameterizedTest
+ @ArgumentsSource(MariaDBConnectionProvider.class)
+ public void testPoolable(String driverClass, String url, String user, String password, boolean isXA) throws Exception {
+ this.setUp(driverClass, url, user, password, isXA);
+ boolean poolable = statement.isPoolable();
+ statement.setPoolable(!poolable);
+ if (url.toLowerCase().contains("mysql"))
+ Assert.assertEquals(!poolable, statement.isPoolable());
+ else
+ Assert.assertEquals(false, statement.isPoolable());
+
+
+ statement.setPoolable(poolable);
+ }
+}
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLDatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLDatabaseMetaDataExtensiveTests.java
index 32183d468..4a4ca1680 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLDatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLDatabaseMetaDataExtensiveTests.java
@@ -1,11 +1,13 @@
package openjproxy.jdbc;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -14,6 +16,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLDatabaseMetaDataExtensiveTests {
private static boolean isMySQLTestDisabled;
@@ -22,7 +25,7 @@ public class MySQLDatabaseMetaDataExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@@ -39,7 +42,7 @@ public static void teardown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testBasicDatabaseMetaDataProperties(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -67,7 +70,7 @@ public void testBasicDatabaseMetaDataProperties(String driverClass, String url,
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testSupportFeatures(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -97,7 +100,7 @@ public void testSupportFeatures(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testIdentifierProperties(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -118,7 +121,7 @@ public void testIdentifierProperties(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testTransactionSupport(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -136,7 +139,7 @@ public void testTransactionSupport(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testFunctionSupport(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -159,7 +162,7 @@ public void testFunctionSupport(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testResultSetSupport(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -180,7 +183,7 @@ public void testResultSetSupport(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetTables(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -203,7 +206,7 @@ public void testGetTables(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetColumns(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -230,7 +233,7 @@ public void testGetColumns(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetPrimaryKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -254,7 +257,7 @@ public void testGetPrimaryKeys(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetTypeInfo(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -279,7 +282,7 @@ public void testGetTypeInfo(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testMySQLSpecificMetaData(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -307,7 +310,7 @@ public void testMySQLSpecificMetaData(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testLimitsAndSizes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMariaDBConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMariaDBConnectionExtensiveTests.java
index 76cc05d0a..33e3d602a 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMariaDBConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMariaDBConnectionExtensiveTests.java
@@ -2,11 +2,13 @@
import lombok.SneakyThrows;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.CallableStatement;
import java.sql.Connection;
@@ -24,6 +26,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLMariaDBConnectionExtensiveTests {
private static boolean isMySQLTestDisabled;
@@ -32,7 +35,7 @@ public class MySQLMariaDBConnectionExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@@ -49,7 +52,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCreateStatement(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -59,7 +62,7 @@ public void testCreateStatement(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testPrepareStatement(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -69,7 +72,7 @@ public void testPrepareStatement(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testPrepareCall(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -85,7 +88,7 @@ public void testPrepareCall(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testNativeSQL(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -96,7 +99,7 @@ public void testNativeSQL(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testAutoCommit(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -114,7 +117,7 @@ public void testAutoCommit(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCommitAndRollback(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -129,7 +132,7 @@ public void testCommitAndRollback(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testIsClosed(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -140,7 +143,7 @@ public void testIsClosed(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetMetaData(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -156,7 +159,7 @@ public void testGetMetaData(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testReadOnly(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -177,7 +180,7 @@ public void testReadOnly(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCatalog(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -192,7 +195,7 @@ public void testCatalog(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testTransactionIsolation(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -208,7 +211,7 @@ public void testTransactionIsolation(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -221,7 +224,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCreateStatementWithParameters(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -235,7 +238,7 @@ public void testCreateStatementWithParameters(String driverClass, String url, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testPrepareStatementWithParameters(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -249,7 +252,7 @@ public void testPrepareStatementWithParameters(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testHoldability(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -262,7 +265,7 @@ public void testHoldability(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testSavepoints(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -288,7 +291,7 @@ public void testSavepoints(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testClientInfo(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -305,7 +308,7 @@ public void testClientInfo(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testValid(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -319,7 +322,7 @@ public void testValid(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testUnsupportedOperations(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMultipleTypesIntegrationTest.java
index 64aa0d986..dfd683a12 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLMultipleTypesIntegrationTest.java
@@ -1,10 +1,12 @@
package openjproxy.jdbc;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -19,6 +21,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLMultipleTypesIntegrationTest {
private static boolean isMySQLTestDisabled;
@@ -26,12 +29,12 @@ public class MySQLMultipleTypesIntegrationTest {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
@@ -119,7 +122,7 @@ public void typesCoverageTestSuccessful(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void mysqlSpecificTypesTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLPreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLPreparedStatementExtensiveTests.java
index b39d773e5..59cc2501e 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLPreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLPreparedStatementExtensiveTests.java
@@ -1,12 +1,14 @@
package openjproxy.jdbc;
import openjproxy.jdbc.testutil.TestDBUtils;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
@@ -25,6 +27,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLPreparedStatementExtensiveTests {
private static boolean isMySQLTestDisabled;
@@ -34,7 +37,7 @@ public class MySQLPreparedStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@@ -65,7 +68,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testBasicParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -89,7 +92,7 @@ public void testBasicParameterSetters(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testNumericParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -118,7 +121,7 @@ public void testNumericParameterSetters(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testDateTimeParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -147,7 +150,7 @@ public void testDateTimeParameterSetters(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testBinaryParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -176,7 +179,7 @@ public void testBinaryParameterSetters(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testTextParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -204,7 +207,7 @@ public void testTextParameterSetters(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testNullParameterSetters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -231,7 +234,7 @@ public void testNullParameterSetters(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -256,7 +259,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -280,7 +283,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -302,7 +305,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -340,7 +343,7 @@ public void testBatch(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testClearParameters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -356,7 +359,7 @@ public void testClearParameters(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testMetaData(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -370,7 +373,7 @@ public void testMetaData(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testParameterMetaData(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -387,7 +390,7 @@ public void testParameterMetaData(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLSpecificFeaturesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLSpecificFeaturesIntegrationTest.java
index 3078720d0..92d2b059f 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLSpecificFeaturesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLSpecificFeaturesIntegrationTest.java
@@ -1,9 +1,11 @@
package openjproxy.jdbc;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -17,6 +19,7 @@
* Tests for MySQL-specific functionality that is not covered by database-agnostic tests.
* Includes features like ON DUPLICATE KEY UPDATE, SELECT ... FOR UPDATE, SHOW commands, etc.
*/
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLSpecificFeaturesIntegrationTest {
private static boolean isMySQLTestDisabled;
@@ -24,12 +27,12 @@ public class MySQLSpecificFeaturesIntegrationTest {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void onDuplicateKeyUpdateTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
assumeFalse(isMariaDBTestDisabled, "MariaDB tests are disabled");
@@ -74,7 +77,7 @@ public void onDuplicateKeyUpdateTestSuccessful(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void selectForUpdateTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
@@ -126,7 +129,7 @@ public void selectForUpdateTestSuccessful(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void showTablesTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
@@ -163,7 +166,7 @@ public void showTablesTestSuccessful(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void autoIncrementAndLastInsertIdTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
@@ -216,7 +219,7 @@ public void autoIncrementAndLastInsertIdTestSuccessful(String driverClass, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void mysqlInformationSchemaTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isMySQLTestDisabled, "MySQL tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLStatementExtensiveTests.java
index cfd354131..7cc30baed 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/MySQLStatementExtensiveTests.java
@@ -1,11 +1,13 @@
package openjproxy.jdbc;
+import openjproxy.jdbc.testutil.MySQLConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -15,6 +17,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.MySQLTestContainer#isEnabled")
public class MySQLStatementExtensiveTests {
private static boolean isMySQLTestDisabled;
@@ -24,7 +27,7 @@ public class MySQLStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isMySQLTestDisabled = Boolean.parseBoolean(System.getProperty("disableMySQLTests", "false"));
+ isMySQLTestDisabled = !Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
isMariaDBTestDisabled = Boolean.parseBoolean(System.getProperty("disableMariaDBTests", "false"));
}
@@ -43,7 +46,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ResultSet rs = statement.executeQuery("SELECT * FROM mysql_statement_test");
@@ -53,7 +56,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int rows = statement.executeUpdate("UPDATE mysql_statement_test SET name = 'Updated Alice' WHERE id = 1");
@@ -66,7 +69,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
Assert.assertFalse(statement.isClosed());
@@ -75,7 +78,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testMaxFieldSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getMaxFieldSize();
@@ -91,7 +94,7 @@ public void testMaxFieldSize(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testMaxRows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
Assert.assertEquals(0, statement.getMaxRows());
@@ -102,7 +105,7 @@ public void testMaxRows(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testQueryTimeout(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
Assert.assertEquals(0, statement.getQueryTimeout());
@@ -113,7 +116,7 @@ public void testQueryTimeout(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Initial warnings might be null
@@ -123,7 +126,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean hasResultSet = statement.execute("SELECT * FROM mysql_statement_test");
@@ -140,7 +143,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetResultSet(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM mysql_statement_test");
@@ -150,7 +153,7 @@ public void testGetResultSet(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetUpdateCount(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("UPDATE mysql_statement_test SET name = 'Test Update' WHERE id = 1");
@@ -161,7 +164,7 @@ public void testGetUpdateCount(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetMoreResults(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM mysql_statement_test");
@@ -172,7 +175,7 @@ public void testGetMoreResults(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testFetchDirection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
Assert.assertEquals(ResultSet.FETCH_FORWARD, statement.getFetchDirection());
@@ -181,7 +184,7 @@ public void testFetchDirection(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testFetchSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int originalFetchSize = statement.getFetchSize();
@@ -191,7 +194,7 @@ public void testFetchSize(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testResultSetConcurrency(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int concurrency = statement.getResultSetConcurrency();
@@ -199,7 +202,7 @@ public void testResultSetConcurrency(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testResultSetType(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int type = statement.getResultSetType();
@@ -209,7 +212,7 @@ public void testResultSetType(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testAddBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO mysql_statement_test (id, name) VALUES (10, 'Batch1')");
@@ -223,14 +226,14 @@ public void testAddBatch(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetConnection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
Assert.assertSame(connection, statement.getConnection());
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testGetGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -253,7 +256,7 @@ public void testGetGeneratedKeys(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testExecuteUpdateWithGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -278,7 +281,7 @@ public void testExecuteUpdateWithGeneratedKeys(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testResultSetHoldability(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int holdability = statement.getResultSetHoldability();
@@ -287,7 +290,7 @@ public void testResultSetHoldability(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCancel(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Test that cancel doesn't throw an exception
@@ -295,7 +298,7 @@ public void testCancel(String driverClass, String url, String user, String passw
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testEscapeProcessing(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setEscapeProcessing(true);
@@ -304,7 +307,7 @@ public void testEscapeProcessing(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testCursorName(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// MySQL may not support named cursors in all configurations
@@ -315,7 +318,7 @@ public void testCursorName(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/mysql_mariadb_connection.csv")
+ @ArgumentsSource(MySQLConnectionProvider.class)
public void testPoolable(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean poolable = statement.isPoolable();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBinaryStreamIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBinaryStreamIntegrationTest.java
index 015968e57..e28fc60b3 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBinaryStreamIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBinaryStreamIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -21,6 +23,7 @@
* Oracle-specific binary stream integration tests.
* Tests Oracle-specific binary data types (RAW, BLOB) and stream handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleBinaryStreamIntegrationTest {
private static boolean isTestDisabled;
@@ -31,7 +34,7 @@ public static void setup() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void createAndReadingBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -92,7 +95,7 @@ public void createAndReadingBinaryStreamSuccessful(String driverClass, String ur
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -142,7 +145,7 @@ public void createAndReadingLargeBinaryStreamSuccessful(String driverClass, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleSpecificBinaryHandling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -200,4 +203,4 @@ public void testOracleSpecificBinaryHandling(String driverClass, String url, Str
psSelect.close();
conn.close();
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBlobIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBlobIntegrationTest.java
index f7692773c..274e019fa 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBlobIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleBlobIntegrationTest.java
@@ -2,8 +2,10 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -22,6 +24,7 @@
* Oracle-specific BLOB integration tests.
* Tests Oracle BLOB functionality and performance.
*/
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleBlobIntegrationTest {
private static boolean isTestDisabled;
@@ -52,7 +55,7 @@ public void setUp(String driverClass, String url, String user, String pwd) throw
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleBlobCreationAndRetrieval(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -94,7 +97,7 @@ public void testOracleBlobCreationAndRetrieval(String driverClass, String url, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleLargeBlobHandling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -142,7 +145,7 @@ public void testOracleLargeBlobHandling(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleBlobBinaryStream(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -190,7 +193,7 @@ public void testOracleBlobBinaryStream(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleBlobUpdate(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -237,7 +240,7 @@ public void testOracleBlobUpdate(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleEmptyAndNullBlob(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, IOException {
setUp(driverClass, url, user, pwd);
@@ -279,4 +282,4 @@ public void testOracleEmptyAndNullBlob(String driverClass, String url, String us
rs.close();
conn.close();
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleConnectionExtensiveTests.java
index a699b7762..4fe31fe6d 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleConnectionExtensiveTests.java
@@ -2,9 +2,11 @@
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import java.sql.Connection;
@@ -21,6 +23,7 @@
* These tests verify that OJP can properly handle Oracle-specific SQL syntax and data types.
*/
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleConnectionExtensiveTests {
private static boolean isOracleTestEnabled;
@@ -31,7 +34,7 @@ public static void setup() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleBasicConnection(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(!isOracleTestEnabled, "Skipping Oracle tests");
@@ -67,7 +70,7 @@ public void testOracleBasicConnection(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleDataTypes(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(!isOracleTestEnabled, "Skipping Oracle tests");
@@ -104,7 +107,7 @@ public void testOracleDataTypes(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleAutoIncrementSequence(String driverClass, String url, String user, String pwd) throws SQLException {
Assumptions.assumeFalse(!isOracleTestEnabled, "Skipping Oracle tests");
@@ -135,4 +138,4 @@ public void testOracleAutoIncrementSequence(String driverClass, String url, Stri
}
}
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleDatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleDatabaseMetaDataExtensiveTests.java
index ecfaff7c9..8002b105e 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleDatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleDatabaseMetaDataExtensiveTests.java
@@ -2,13 +2,16 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.*;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.sql.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleDatabaseMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -32,7 +35,7 @@ public static void teardown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void allDatabaseMetaDataMethodsShouldWorkAndBeAsserted(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
@@ -304,4 +307,4 @@ public void allDatabaseMetaDataMethodsShouldWorkAndBeAsserted(String driverClass
TestDBUtils.validateAllRows(rs);
}
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleMultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleMultipleTypesIntegrationTest.java
index 0f8938c3e..1d1ed49d7 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleMultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleMultipleTypesIntegrationTest.java
@@ -3,8 +3,10 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -19,6 +21,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleMultipleTypesIntegrationTest {
private static boolean isTestDisabled;
@@ -29,7 +32,7 @@ public static void checkTestConfiguration() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
assumeFalse(isTestDisabled, "Oracle tests are disabled");
@@ -136,7 +139,7 @@ public void typesCoverageTestSuccessful(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleSpecificTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Oracle tests are disabled");
@@ -191,7 +194,7 @@ public void testOracleSpecificTypes(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleNumberTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Oracle tests are disabled");
@@ -256,4 +259,4 @@ private static byte[] hexStringToByteArray(String hex) {
}
return data;
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OraclePreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OraclePreparedStatementExtensiveTests.java
index 23798c05f..398c9d606 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OraclePreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OraclePreparedStatementExtensiveTests.java
@@ -2,9 +2,11 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
@@ -29,6 +31,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OraclePreparedStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -66,7 +69,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testBasicParameterSetting(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -91,7 +94,7 @@ public void testBasicParameterSetting(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testNullParameterHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -119,7 +122,7 @@ public void testNullParameterHandling(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testNumericParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -147,7 +150,7 @@ public void testNumericParameterTypes(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testDateTimeParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, dt) VALUES (?, ?, ?)");
@@ -172,7 +175,7 @@ public void testDateTimeParameterTypes(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testLargeObjectHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, data, info) VALUES (?, ?, ?, ?)");
@@ -202,7 +205,7 @@ public void testLargeObjectHandling(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testStreamHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, data, info) VALUES (?, ?, ?, ?)");
@@ -222,7 +225,7 @@ public void testStreamHandling(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testParameterMetaData(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -236,7 +239,7 @@ public void testParameterMetaData(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testBatchOperations(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -264,7 +267,7 @@ public void testBatchOperations(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testResultSetHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -294,7 +297,7 @@ public void testResultSetHandling(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleSpecificTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -338,7 +341,7 @@ public void testOracleSpecificTypes(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testErrorHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO oracle_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -355,4 +358,4 @@ public void testErrorHandling(String driverClass, String url, String user, Strin
// Don't set parameters 2 and 3
assertThrows(SQLException.class, () -> ps.executeUpdate());
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleReadMultipleBlocksOfDataIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleReadMultipleBlocksOfDataIntegrationTest.java
index d3d515350..f685bf1fe 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleReadMultipleBlocksOfDataIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleReadMultipleBlocksOfDataIntegrationTest.java
@@ -2,8 +2,11 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
+import openjproxy.jdbc.testutil.OracleConnectionWithRecordCountsProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -17,6 +20,7 @@
* Oracle-specific multiple blocks of data integration tests.
* Tests Oracle pagination and large result set handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleReadMultipleBlocksOfDataIntegrationTest {
private static boolean isTestDisabled;
@@ -27,7 +31,7 @@ public static void checkTestConfiguration() {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections_with_record_counts.csv")
+ @ArgumentsSource(OracleConnectionWithRecordCountsProvider.class)
public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -74,7 +78,7 @@ public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driv
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleLargeDataSetPagination(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -139,7 +143,7 @@ public void testOracleLargeDataSetPagination(String driverClass, String url, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleResultSetScrolling(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -202,7 +206,7 @@ public void testOracleResultSetScrolling(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleMultipleDataTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Skipping Oracle tests");
@@ -263,4 +267,4 @@ public void testOracleMultipleDataTypes(String driverClass, String url, String u
psSelect.close();
conn.close();
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetMetaDataExtensiveTests.java
index c4669ef74..ede876dbe 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetMetaDataExtensiveTests.java
@@ -2,15 +2,18 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.sql.*;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleResultSetMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -56,7 +59,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testAllResultSetMetaDataMethods(String driverClass, String url, String user, String password) throws SQLException {
setUp(driverClass, url, user, password);
@@ -199,4 +202,4 @@ public void testAllResultSetMetaDataMethods(String driverClass, String url, Stri
assertTrue(ageClassName.equals("java.math.BigDecimal") || ageClassName.equals("java.lang.Integer"));
assertEquals("java.math.BigDecimal", metaData.getColumnClassName(4));
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetTest.java
index cc8d59c25..85c56491b 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleResultSetTest.java
@@ -2,9 +2,11 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -24,6 +26,7 @@
* Oracle-specific ResultSet tests.
* Tests Oracle-specific ResultSet behavior and data type handling.
*/
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleResultSetTest {
private Connection connection;
@@ -86,7 +89,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleNavigationMethods(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
assertTrue(resultSet.next()); // Row 1
@@ -101,7 +104,7 @@ public void testOracleNavigationMethods(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleDataRetrievalMethods(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
resultSet.next();
@@ -115,7 +118,7 @@ public void testOracleDataRetrievalMethods(String driverClass, String url, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleGetMethodsByColumnIndex(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
resultSet.next();
@@ -128,7 +131,7 @@ public void testOracleGetMethodsByColumnIndex(String driverClass, String url, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleNullHandling(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
statement.execute("INSERT INTO oracle_resultset_test_table (id, name, age, salary, active, created_at) " +
@@ -142,7 +145,7 @@ public void testOracleNullHandling(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleCursorPositionMethods(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
assertTrue(resultSet.first());
@@ -156,7 +159,7 @@ public void testOracleCursorPositionMethods(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleWarnings(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
SQLWarning warning = resultSet.getWarnings();
@@ -165,7 +168,7 @@ public void testOracleWarnings(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleAdvancedNavigation(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
resultSet.absolute(2); // Move to the second row
@@ -179,7 +182,7 @@ public void testOracleAdvancedNavigation(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleSpecificDataTypes(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -220,7 +223,7 @@ public void testOracleSpecificDataTypes(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleResultSetMetadata(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -245,7 +248,7 @@ public void testOracleResultSetMetadata(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleRowCounting(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -264,4 +267,4 @@ public void testOracleRowCounting(String driverClass, String url, String user, S
resultSet.last();
assertTrue(resultSet.getRow() >= 3);
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleSavepointTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleSavepointTests.java
index 3dab4f6c1..3481d9793 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleSavepointTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleSavepointTests.java
@@ -2,9 +2,11 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -16,6 +18,7 @@
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleSavepointTests {
private static boolean isTestDisabled;
@@ -53,7 +56,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testUnnamedSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -72,7 +75,7 @@ public void testUnnamedSavepoint(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testNamedSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -93,7 +96,7 @@ public void testNamedSavepoint(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testMultipleSavepoints(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -123,7 +126,7 @@ public void testMultipleSavepoints(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testReleaseSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -146,7 +149,7 @@ public void testReleaseSavepoint(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testSavepointAfterCommit(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -169,7 +172,7 @@ public void testSavepointAfterCommit(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testSavepointMetadata(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
@@ -191,4 +194,4 @@ public void testSavepointMetadata(String driverClass, String url, String user, S
connection.releaseSavepoint(unnamedSp);
connection.releaseSavepoint(namedSp);
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleStatementExtensiveTests.java
index f848302ec..f4d05385a 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleStatementExtensiveTests.java
@@ -3,9 +3,11 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -23,6 +25,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -50,7 +53,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ResultSet rs = statement.executeQuery("SELECT * FROM oracle_statement_test");
@@ -60,7 +63,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int rows = statement.executeUpdate("UPDATE oracle_statement_test SET name = 'Updated Alice' WHERE id = 1");
@@ -73,7 +76,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertFalse(statement.isClosed());
@@ -82,7 +85,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testMaxFieldSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getMaxFieldSize();
@@ -93,7 +96,7 @@ public void testMaxFieldSize(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecuteAfterCloseThrows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.close();
@@ -103,7 +106,7 @@ public void testExecuteAfterCloseThrows(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testMaxRows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setMaxRows(1);
@@ -115,7 +118,7 @@ public void testMaxRows(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testEscapeProcessing(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -124,7 +127,7 @@ public void testEscapeProcessing(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testQueryTimeout(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setQueryTimeout(5);
@@ -132,7 +135,7 @@ public void testQueryTimeout(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testCancel(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -140,7 +143,7 @@ public void testCancel(String driverClass, String url, String user, String passw
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.clearWarnings();
@@ -148,7 +151,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testSetCursorName(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Some Oracle versions supports named cursors; the one used for tests does not.
@@ -156,7 +159,7 @@ public void testSetCursorName(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean isResultSet = statement.execute("SELECT * FROM oracle_statement_test");
@@ -172,7 +175,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testGetMoreResults(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM oracle_statement_test");
@@ -181,7 +184,7 @@ public void testGetMoreResults(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testFetchDirection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchDirection();
@@ -191,7 +194,7 @@ public void testFetchDirection(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testFetchSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchSize();
@@ -201,7 +204,7 @@ public void testFetchSize(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testResultSetConcurrencyAndType(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int concurrency = statement.getResultSetConcurrency();
@@ -211,7 +214,7 @@ public void testResultSetConcurrencyAndType(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testBatchExecution(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO oracle_statement_test (id, name) VALUES (3, 'Charlie')");
@@ -226,7 +229,7 @@ public void testBatchExecution(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testClearBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO oracle_statement_test (id, name) VALUES (5, 'Eve')");
@@ -236,14 +239,14 @@ public void testClearBatch(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testGetConnection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertSame(connection, statement.getConnection());
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testGetMoreResultsWithCurrent(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM oracle_statement_test");
@@ -251,7 +254,7 @@ public void testGetMoreResultsWithCurrent(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_auto_keys", TestDBUtils.SqlSyntax.ORACLE);
@@ -266,7 +269,7 @@ public void testGeneratedKeys(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecuteUpdateVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -286,7 +289,7 @@ public void testExecuteUpdateVariants(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testExecuteVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_exec", TestDBUtils.SqlSyntax.ORACLE);
@@ -305,7 +308,7 @@ public void testExecuteVariants(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testGetResultSetHoldability(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int holdability = statement.getResultSetHoldability();
@@ -313,7 +316,7 @@ public void testGetResultSetHoldability(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testPoolable(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setPoolable(true);
@@ -326,7 +329,7 @@ public void testPoolable(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testCloseOnCompletion(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.closeOnCompletion();
@@ -334,7 +337,7 @@ public void testCloseOnCompletion(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testLargeMethodsDefault(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.getFetchDirection();
@@ -353,7 +356,7 @@ public void testLargeMethodsDefault(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testEnquoteLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteLiteral("foo'bar");
@@ -361,7 +364,7 @@ public void testEnquoteLiteral(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testEnquoteIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Oracle quotes identifiers to preserve case sensitivity
@@ -372,7 +375,7 @@ public void testEnquoteIdentifier(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testIsSimpleIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Oracle has specific rules for simple identifiers
@@ -386,7 +389,7 @@ public void testIsSimpleIdentifier(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testEnquoteNCharLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteNCharLiteral("foo'bar");
@@ -394,7 +397,7 @@ public void testEnquoteNCharLiteral(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_connections.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testOracleSpecificFeatures(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -414,4 +417,4 @@ public void testOracleSpecificFeatures(String driverClass, String url, String us
// Clean up
statement.execute("DROP VIEW oracle_test_view");
}
-}
\ No newline at end of file
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleXAIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleXAIntegrationTest.java
index a6984e0ba..69d4a454f 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleXAIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/OracleXAIntegrationTest.java
@@ -1,11 +1,13 @@
package openjproxy.jdbc;
import lombok.extern.slf4j.Slf4j;
+import openjproxy.jdbc.testutil.OracleConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import org.openjproxy.jdbc.xa.OjpXADataSource;
import javax.sql.XAConnection;
@@ -28,6 +30,7 @@
* 3. The client-side code updated to use integrated StatementService
*/
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.OracleTestContainer#isEnabled")
public class OracleXAIntegrationTest {
private static boolean isTestDisabled;
@@ -70,7 +73,7 @@ public void tearDown() {
* Test basic XA connection creation and closure.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_xa_connection.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testXAConnectionBasics(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -92,7 +95,7 @@ public void testXAConnectionBasics(String driverClass, String url, String user,
* This tests: xaStart -> executeUpdate -> xaEnd -> xaPrepare -> xaCommit
*/
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_xa_connection.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testXATransactionWithCRUD(String driverClass, String url, String user, String password)
throws Exception {
setUp(driverClass, url, user, password);
@@ -172,7 +175,7 @@ public void testXATransactionWithCRUD(String driverClass, String url, String use
* Test XA transaction rollback.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_xa_connection.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testXATransactionRollback(String driverClass, String url, String user, String password)
throws Exception {
setUp(driverClass, url, user, password);
@@ -235,7 +238,7 @@ public void testXATransactionRollback(String driverClass, String url, String use
* Test transaction timeout functionality.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_xa_connection.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testXATransactionTimeout(String driverClass, String url, String user, String password)
throws Exception {
setUp(driverClass, url, user, password);
@@ -251,7 +254,7 @@ public void testXATransactionTimeout(String driverClass, String url, String user
* Test one-phase commit optimization.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/oracle_xa_connection.csv")
+ @ArgumentsSource(OracleConnectionProvider.class)
public void testXAOnePhaseCommit(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresCallableStatementTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresCallableStatementTests.java
index 0431ec0dd..14dbef73e 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresCallableStatementTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresCallableStatementTests.java
@@ -3,7 +3,9 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.math.BigDecimal;
import java.sql.CallableStatement;
@@ -28,6 +30,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresCallableStatementTests {
private static boolean isTestDisabled;
@@ -37,7 +40,7 @@ public class PostgresCallableStatementTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -89,7 +92,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteProcedure(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
callableStatement = connection.prepareCall("CALL update_salary(?, ?, ?)");
@@ -119,7 +122,7 @@ public void testExecuteProcedure(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testDateTimeParameters(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
callableStatement = connection.prepareCall("CALL update_employee_dates(?, ?, ?, ?, ?, ?, ?)");
@@ -159,7 +162,7 @@ public void testDateTimeParameters(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testSetAndGetStringAndBoolean(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -189,7 +192,7 @@ public void testSetAndGetStringAndBoolean(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testSetObjectAndGetObject(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
callableStatement = connection.prepareCall("CALL update_salary(?, ?, ?)");
@@ -208,7 +211,7 @@ public void testSetObjectAndGetObject(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testInvalidParameterIndex(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// This test will intentionally fail due to an invalid parameter index
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresConnectionExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresConnectionExtensiveTests.java
index 02f65f943..e6f299576 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresConnectionExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresConnectionExtensiveTests.java
@@ -2,11 +2,13 @@
import io.grpc.StatusRuntimeException;
import lombok.SneakyThrows;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Array;
import java.sql.Blob;
@@ -36,6 +38,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresConnectionExtensiveTests {
private static boolean isTestDisabled;
@@ -43,7 +46,7 @@ public class PostgresConnectionExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@SneakyThrows
@@ -58,7 +61,7 @@ public void tearDown() throws SQLException {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testConnectionProperties(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
assertEquals(false, connection.isClosed());
@@ -68,7 +71,7 @@ public void testConnectionProperties(String driverClass, String url, String user
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testAutoCommitAndTransactionIsolation(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
assertEquals(true, connection.getAutoCommit());
@@ -83,7 +86,7 @@ public void testAutoCommitAndTransactionIsolation(String driverClass, String url
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testCommitAndRollback(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
@@ -107,7 +110,7 @@ public void testCommitAndRollback(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testSavepoints(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
@@ -135,7 +138,7 @@ public void testSavepoints(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testConnectionMetadata(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
DatabaseMetaData metaData = connection.getMetaData();
@@ -145,7 +148,7 @@ public void testConnectionMetadata(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testClientInfo(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
// PostgreSQL supports client info
@@ -158,7 +161,7 @@ public void testClientInfo(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws SQLException {
this.setUp(driverClass, url, user, password);
assertEquals(false, connection.isClosed());
@@ -169,7 +172,7 @@ public void testClose(String driverClass, String url, String user, String passwo
// ---------- Additional tests for every Connection interface method ----------
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testAllConnectionMethods(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresDatabaseMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresDatabaseMetaDataExtensiveTests.java
index 8fd2e9f26..45651ae1d 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresDatabaseMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresDatabaseMetaDataExtensiveTests.java
@@ -3,12 +3,15 @@
import openjproxy.jdbc.testutil.TestDBUtils;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.sql.*;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresDatabaseMetaDataExtensiveTests {
private static boolean isTestDisabled;
@@ -16,7 +19,7 @@ public class PostgresDatabaseMetaDataExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -32,7 +35,7 @@ public static void teardown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void allDatabaseMetaDataMethodsShouldWorkAndBeAsserted(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
DatabaseMetaData meta = connection.getMetaData();
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMiniStressTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMiniStressTest.java
index 6521f5219..6a0eb83cf 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMiniStressTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMiniStressTest.java
@@ -5,7 +5,9 @@
import org.codehaus.plexus.util.ExceptionUtils;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -26,6 +28,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresMiniStressTest {
private static final int THREADS = 10; // Number of worker threads
private static final int RAMPUP_MS = 10 * 1000; // 10 seconds Ramp-up window in milliseconds
@@ -37,7 +40,7 @@ public class PostgresMiniStressTest {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@SneakyThrows
@@ -49,7 +52,7 @@ public void setUp() throws SQLException {
@SneakyThrows
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void runTests(String driverClass, String url, String user, String password) throws SQLException {
assumeFalse(isTestDisabled, "Postgres tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMultipleTypesIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMultipleTypesIntegrationTest.java
index ea6a099df..4cf86d760 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMultipleTypesIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresMultipleTypesIntegrationTest.java
@@ -4,7 +4,9 @@
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -19,17 +21,18 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresMultipleTypesIntegrationTest {
private static boolean isTestDisabled;
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void typesCoverageTestSuccessful(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException, ParseException {
assumeFalse(isTestDisabled, "Postgres tests are disabled");
@@ -134,7 +137,7 @@ public void typesCoverageTestSuccessful(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testPostgresSpecificTypes(String driverClass, String url, String user, String pwd) throws SQLException, ClassNotFoundException {
assumeFalse(isTestDisabled, "Postgres tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresPreparedStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresPreparedStatementExtensiveTests.java
index 5826a21bc..1ada6d28a 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresPreparedStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresPreparedStatementExtensiveTests.java
@@ -4,7 +4,9 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.io.ByteArrayInputStream;
import java.io.StringReader;
@@ -29,6 +31,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresPreparedStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -38,7 +41,7 @@ public class PostgresPreparedStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -66,7 +69,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testBasicParameterSetting(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -91,7 +94,7 @@ public void testBasicParameterSetting(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testNullParameterHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -119,7 +122,7 @@ public void testNullParameterHandling(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testNumericParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -147,7 +150,7 @@ public void testNumericParameterTypes(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testDateTimeParameterTypes(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, dt) VALUES (?, ?, ?)");
@@ -172,7 +175,7 @@ public void testDateTimeParameterTypes(String driverClass, String url, String us
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testLargeObjectHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, data, info) VALUES (?, ?, ?, ?)");
@@ -202,7 +205,7 @@ public void testLargeObjectHandling(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testStreamHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, data, info) VALUES (?, ?, ?, ?)");
@@ -222,7 +225,7 @@ public void testStreamHandling(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testParameterMetaData(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -235,7 +238,7 @@ public void testParameterMetaData(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testBatchOperations(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
@@ -263,7 +266,7 @@ public void testBatchOperations(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testResultSetHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -293,7 +296,7 @@ public void testResultSetHandling(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testErrorHandling(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ps = connection.prepareStatement("INSERT INTO postgres_prepared_stmt_test (id, name, age) VALUES (?, ?, ?)");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSavepointTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSavepointTests.java
index 54c9300ff..7fc88f261 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSavepointTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSavepointTests.java
@@ -4,7 +4,9 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -16,6 +18,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresSavepointTests {
private static boolean isTestDisabled;
@@ -23,7 +26,7 @@ public class PostgresSavepointTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@SneakyThrows
@@ -46,7 +49,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testSavepoint(String driverClass, String url, String user, String pwd) throws SQLException {
setUp(driverClass, url, user, pwd);
connection.createStatement().execute("INSERT INTO savepoint_test_table (id, name) VALUES (1, 'Alice')");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSlowQuerySegregationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSlowQuerySegregationTest.java
index c0560af0e..bec367053 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSlowQuerySegregationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresSlowQuerySegregationTest.java
@@ -7,7 +7,9 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.math.BigDecimal;
import java.sql.Connection;
@@ -26,6 +28,7 @@
import static org.junit.jupiter.api.Assumptions.assumeFalse;
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresSlowQuerySegregationTest {
private static final int THREADS = 3; // Number of worker threads
private static final int RAMPUP_MS = 30 * 1000; // 30 seconds Ramp-up window in milliseconds
@@ -38,7 +41,7 @@ public class PostgresSlowQuerySegregationTest {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@SneakyThrows
@@ -50,7 +53,7 @@ public void setUp() throws SQLException {
@SneakyThrows
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void runTests(String driverClass, String url, String user, String password) throws SQLException {
assumeFalse(isTestDisabled, "Postgres tests are disabled");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresStatementExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresStatementExtensiveTests.java
index fb6e5ecc6..979df93ee 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresStatementExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresStatementExtensiveTests.java
@@ -4,7 +4,9 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -22,6 +24,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeFalse;
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresStatementExtensiveTests {
private static boolean isTestDisabled;
@@ -31,7 +34,7 @@ public class PostgresStatementExtensiveTests {
@BeforeAll
public static void checkTestConfiguration() {
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws Exception {
@@ -49,7 +52,7 @@ public void tearDown() throws Exception {
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteQuery(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
ResultSet rs = statement.executeQuery("SELECT * FROM postgres_statement_test");
@@ -59,7 +62,7 @@ public void testExecuteQuery(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteUpdate(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int rows = statement.executeUpdate("UPDATE postgres_statement_test SET name = 'Updated Alice' WHERE id = 1");
@@ -72,7 +75,7 @@ public void testExecuteUpdate(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testClose(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertFalse(statement.isClosed());
@@ -81,7 +84,7 @@ public void testClose(String driverClass, String url, String user, String passwo
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testMaxFieldSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getMaxFieldSize();
@@ -92,7 +95,7 @@ public void testMaxFieldSize(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteAfterCloseThrows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.close();
@@ -102,7 +105,7 @@ public void testExecuteAfterCloseThrows(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testMaxRows(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setMaxRows(1);
@@ -114,7 +117,7 @@ public void testMaxRows(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testEscapeProcessing(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -123,7 +126,7 @@ public void testEscapeProcessing(String driverClass, String url, String user, St
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testQueryTimeout(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setQueryTimeout(5);
@@ -131,7 +134,7 @@ public void testQueryTimeout(String driverClass, String url, String user, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testCancel(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// Should not throw
@@ -139,7 +142,7 @@ public void testCancel(String driverClass, String url, String user, String passw
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testWarnings(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.clearWarnings();
@@ -147,7 +150,7 @@ public void testWarnings(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testSetCursorName(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// No-op in most drivers; should not throw
@@ -155,7 +158,7 @@ public void testSetCursorName(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecute(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
boolean isResultSet = statement.execute("SELECT * FROM postgres_statement_test");
@@ -171,7 +174,7 @@ public void testExecute(String driverClass, String url, String user, String pass
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testGetMoreResults(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM postgres_statement_test");
@@ -180,7 +183,7 @@ public void testGetMoreResults(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testFetchDirection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchDirection();
@@ -190,7 +193,7 @@ public void testFetchDirection(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testFetchSize(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int orig = statement.getFetchSize();
@@ -200,7 +203,7 @@ public void testFetchSize(String driverClass, String url, String user, String pa
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testResultSetConcurrencyAndType(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int concurrency = statement.getResultSetConcurrency();
@@ -210,7 +213,7 @@ public void testResultSetConcurrencyAndType(String driverClass, String url, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testBatchExecution(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO postgres_statement_test (id, name) VALUES (3, 'Charlie')");
@@ -225,7 +228,7 @@ public void testBatchExecution(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testClearBatch(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.addBatch("INSERT INTO postgres_statement_test (id, name) VALUES (5, 'Eve')");
@@ -235,14 +238,14 @@ public void testClearBatch(String driverClass, String url, String user, String p
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testGetConnection(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
assertSame(connection, statement.getConnection());
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testGetMoreResultsWithCurrent(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.execute("SELECT * FROM postgres_statement_test");
@@ -250,7 +253,7 @@ public void testGetMoreResultsWithCurrent(String driverClass, String url, String
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testGeneratedKeys(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_auto_keys", TestDBUtils.SqlSyntax.POSTGRES);
@@ -264,7 +267,7 @@ public void testGeneratedKeys(String driverClass, String url, String user, Strin
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteUpdateVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
@@ -292,7 +295,7 @@ public void testExecuteUpdateVariants(String driverClass, String url, String use
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testExecuteVariants(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
TestDBUtils.createAutoIncrementTestTable(connection, "test_exec", TestDBUtils.SqlSyntax.POSTGRES);
@@ -312,7 +315,7 @@ public void testExecuteVariants(String driverClass, String url, String user, Str
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testGetResultSetHoldability(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
int holdability = statement.getResultSetHoldability();
@@ -320,7 +323,7 @@ public void testGetResultSetHoldability(String driverClass, String url, String u
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testPoolable(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.setPoolable(true);
@@ -333,7 +336,7 @@ public void testPoolable(String driverClass, String url, String user, String pas
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testCloseOnCompletion(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.closeOnCompletion();
@@ -341,7 +344,7 @@ public void testCloseOnCompletion(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testLargeMethodsDefault(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
statement.getFetchDirection();
@@ -363,7 +366,7 @@ public void testLargeMethodsDefault(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testEnquoteLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteLiteral("foo'bar");
@@ -371,7 +374,7 @@ public void testEnquoteLiteral(String driverClass, String url, String user, Stri
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testEnquoteIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// PostgreSQL may not quote identifiers the same way as H2
@@ -382,7 +385,7 @@ public void testEnquoteIdentifier(String driverClass, String url, String user, S
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testIsSimpleIdentifier(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
// PostgreSQL may have different rules for simple identifiers
@@ -397,7 +400,7 @@ public void testIsSimpleIdentifier(String driverClass, String url, String user,
}
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testEnquoteNCharLiteral(String driverClass, String url, String user, String password) throws Exception {
this.setUp(driverClass, url, user, password);
String quoted = statement.enquoteNCharLiteral("foo'bar");
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresXAIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresXAIntegrationTest.java
index bf2a5e5f2..cf23da295 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresXAIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/PostgresXAIntegrationTest.java
@@ -5,7 +5,9 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvFileSource;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import openjproxy.jdbc.testutil.PostgresConnectionProvider;
import org.openjproxy.jdbc.xa.OjpXADataSource;
import javax.sql.XAConnection;
@@ -28,6 +30,7 @@
* 3. The client-side code updated to use integrated StatementService
*/
@Slf4j
+@EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
public class PostgresXAIntegrationTest {
private static boolean isTestDisabled;
@@ -37,7 +40,7 @@ public class PostgresXAIntegrationTest {
@BeforeAll
public static void checkTestConfiguration() {
// Enable by default for testing
- isTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
public void setUp(String driverClass, String url, String user, String password) throws SQLException {
@@ -70,7 +73,7 @@ public void tearDown() {
* Test basic XA connection creation and closure.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_xa_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testXAConnectionBasics(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -91,7 +94,7 @@ public void testXAConnectionBasics(String driverClass, String url, String user,
* This tests: xaStart -> executeUpdate -> xaEnd -> xaPrepare -> xaCommit
*/
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_xa_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testXATransactionWithCRUD(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -170,7 +173,7 @@ public void testXATransactionWithCRUD(String driverClass, String url, String use
* Test XA transaction rollback.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_xa_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testXATransactionRollback(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -232,7 +235,7 @@ public void testXATransactionRollback(String driverClass, String url, String use
* Test transaction timeout functionality.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_xa_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testXATransactionTimeout(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
@@ -255,7 +258,7 @@ public void testXATransactionTimeout(String driverClass, String url, String user
* Test one-phase commit optimization.
*/
@ParameterizedTest
- @CsvFileSource(resources = "/postgres_xa_connection.csv")
+ @ArgumentsSource(PostgresConnectionProvider.class)
public void testXAOnePhaseCommit(String driverClass, String url, String user, String password) throws Exception {
setUp(driverClass, url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ReadMultipleBlocksOfDataIntegrationTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ReadMultipleBlocksOfDataIntegrationTest.java
index 9e0917b88..b35f5d465 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ReadMultipleBlocksOfDataIntegrationTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ReadMultipleBlocksOfDataIntegrationTest.java
@@ -1,9 +1,13 @@
package openjproxy.jdbc;
import org.junit.Assert;
+import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.jupiter.params.provider.CsvFileSource;
+import openjproxy.jdbc.testutil.PostgresConnectionWithRecordCountsProvider;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -14,18 +18,27 @@
public class ReadMultipleBlocksOfDataIntegrationTest {
- private static boolean isPostgresTestDisabled;
+ private static boolean isH2TestEnabled;
+ private static boolean isPostgresTestEnabled;
@BeforeAll
public static void checkTestConfiguration() {
- isPostgresTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ isPostgresTestEnabled = Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
+ // H2 tests - run by default
@ParameterizedTest
@CsvFileSource(resources = "/h2_postgres_connections_with_record_counts.csv")
public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException {
- if (isPostgresTestDisabled && url.contains("postgresql")) {
- return;
+ // Skip H2 tests if not enabled
+ if (!isH2TestEnabled && url.toLowerCase().contains("h2:")) {
+ Assumptions.assumeFalse(true, "Skipping H2 tests - not enabled");
+ }
+ // Skip Postgres connections in this test - they're tested separately using TestContainers
+ // See multiplePagesOfRowsResultSetSuccessfulPostgres() method below
+ if (url.toLowerCase().contains("postgresql")) {
+ Assumptions.assumeFalse(true, "Skipping Postgres tests");
}
Connection conn = DriverManager.getConnection(url, user, pwd);
@@ -37,13 +50,59 @@ public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driv
//Does not matter
}
- // Create table for H2/PostgreSQL
+ // Create table for H2
String createTableSql = "create table read_blocks_test_multi(" +
"id INT NOT NULL, " +
"title VARCHAR(50) NOT NULL)";
executeUpdate(conn, createTableSql);
- for (int i = 0; i < totalRecords; i++) { //TODO make this test parameterized with multiple parameters
+ for (int i = 0; i < totalRecords; i++) {
+ executeUpdate(conn,
+ "insert into read_blocks_test_multi (id, title) values (" + i + ", 'TITLE_" + i + "')"
+ );
+ }
+
+ java.sql.PreparedStatement psSelect = conn.prepareStatement("select * from read_blocks_test_multi order by id");
+ ResultSet resultSet = psSelect.executeQuery();
+
+ for (int i = 0; i < totalRecords; i++) {
+ resultSet.next();
+ int id = resultSet.getInt(1);
+ String title = resultSet.getString(2);
+ Assert.assertEquals(i, id);
+ Assert.assertEquals("TITLE_" + i, title);
+ }
+
+ executeUpdate(conn, "delete from read_blocks_test_multi");
+
+ ResultSet resultSetAfterDeletion = psSelect.executeQuery();
+ Assert.assertFalse(resultSetAfterDeletion.next());
+
+ conn.close();
+ }
+
+ // PostgreSQL tests using TestContainers - only run when enabled
+ @ParameterizedTest
+ @ArgumentsSource(PostgresConnectionWithRecordCountsProvider.class)
+ @EnabledIf("openjproxy.jdbc.testutil.PostgresTestContainer#isEnabled")
+ public void multiplePagesOfRowsResultSetSuccessfulPostgres(int totalRecords, String driverClass, String url, String user, String pwd, boolean isXA) throws SQLException, ClassNotFoundException {
+ Connection conn = DriverManager.getConnection(url, user, pwd);
+
+ System.out.println("Testing retrieving " + totalRecords + " records from PostgreSQL TestContainer url -> " + url);
+
+ try {
+ executeUpdate(conn, "drop table read_blocks_test_multi");
+ } catch (Exception e) {
+ //Does not matter
+ }
+
+ // Create table for PostgreSQL
+ String createTableSql = "create table read_blocks_test_multi(" +
+ "id INT NOT NULL, " +
+ "title VARCHAR(50) NOT NULL)";
+ executeUpdate(conn, createTableSql);
+
+ for (int i = 0; i < totalRecords; i++) {
executeUpdate(conn,
"insert into read_blocks_test_multi (id, title) values (" + i + ", 'TITLE_" + i + "')"
);
@@ -68,3 +127,4 @@ public void multiplePagesOfRowsResultSetSuccessful(int totalRecords, String driv
conn.close();
}
}
+
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetMetaDataExtensiveTests.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetMetaDataExtensiveTests.java
index b329223c9..05365d1b4 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetMetaDataExtensiveTests.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetMetaDataExtensiveTests.java
@@ -2,6 +2,8 @@
import lombok.SneakyThrows;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Assumptions;
+import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
@@ -11,9 +13,16 @@
public class ResultSetMetaDataExtensiveTests {
+ private static boolean isH2TestEnabled;
private Connection connection;
private ResultSetMetaData metaData;
+ @BeforeAll
+ public static void checkH2TestsEnabled() {
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ Assumptions.assumeTrue(isH2TestEnabled, "H2 tests are not enabled");
+ }
+
@SneakyThrows
public void setUp(String driverClass, String url, String user, String password) throws SQLException {
connection = DriverManager.getConnection(url, user, password);
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetTest.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetTest.java
index ccde8de75..d373a9ad6 100644
--- a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetTest.java
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/ResultSetTest.java
@@ -26,17 +26,23 @@ public class ResultSetTest {
private Statement statement;
private ResultSet resultSet;
+ private static boolean isH2TestEnabled;
private static boolean isPostgresTestDisabled;
@BeforeAll
public static void checkTestConfiguration() {
- isPostgresTestDisabled = Boolean.parseBoolean(System.getProperty("disablePostgresTests", "false"));
+ isH2TestEnabled = Boolean.parseBoolean(System.getProperty("enableH2Tests", "true"));
+ isPostgresTestDisabled = !Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
}
@SneakyThrows
public void setUp(String driverClass, String url, String user, String pwd) throws SQLException {
+ // Skip H2 tests if not enabled
+ if (url.toLowerCase().contains("h2:") && !isH2TestEnabled) {
+ Assumptions.assumeFalse(true, "Skipping H2 tests");
+ }
// Skip PostgreSQL tests if disabled
- if (url.contains("postgresql") && isPostgresTestDisabled) {
+ if (url.toLowerCase().contains("postgresql") && isPostgresTestDisabled) {
Assumptions.assumeFalse(true, "Skipping Postgres tests");
}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionProvider.java
new file mode 100644
index 000000000..02221fa89
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionProvider.java
@@ -0,0 +1,56 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for CockroachDB integration tests.
+ * Provides connection details from TestContainers when CockroachDB tests are enabled.
+ * This allows tests to use TestContainers instead of external CockroachDB instances.
+ */
+public class CockroachDBConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!CockroachDBTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ CockroachDBTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = CockroachDBTestContainer.getJdbcUrl();
+ String username = CockroachDBTestContainer.getUsername();
+ String password = CockroachDBTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:postgresql://localhost:RANDOM_PORT/defaultdb?sslmode=disable
+ // OJP wraps this by removing 'jdbc:' and prepending 'jdbc:ojp[host:port]_'
+ // Result format: jdbc:ojp[localhost:1059]_postgresql://localhost:RANDOM_PORT/defaultdb?sslmode=disable
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return a single set of arguments with the TestContainer connection details
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionWithRecordCountsProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionWithRecordCountsProvider.java
new file mode 100644
index 000000000..cfddf1ae1
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBConnectionWithRecordCountsProvider.java
@@ -0,0 +1,55 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for CockroachDB integration tests that include record counts.
+ * Provides connection details from TestContainers along with various record counts for testing.
+ */
+public class CockroachDBConnectionWithRecordCountsProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ // Test record counts to iterate through
+ private static final int[] RECORD_COUNTS = {1, 99, 100, 101, 1000, 10000};
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!CockroachDBTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ CockroachDBTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = CockroachDBTestContainer.getJdbcUrl();
+ String username = CockroachDBTestContainer.getUsername();
+ String password = CockroachDBTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return arguments for each record count
+ return Arrays.stream(RECORD_COUNTS)
+ .mapToObj(count -> Arguments.of(count, driverClass, ojpUrl, username, password));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBTestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBTestContainer.java
new file mode 100644
index 000000000..073f0dc0b
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/CockroachDBTestContainer.java
@@ -0,0 +1,105 @@
+package openjproxy.jdbc.testutil;
+
+import lombok.extern.slf4j.Slf4j;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.utility.DockerImageName;
+
+/**
+ * Singleton CockroachDB test container for all CockroachDB integration tests.
+ * This ensures that all tests share the same CockroachDB instance to improve test performance
+ * and reduce resource usage.
+ */
+@Slf4j
+public class CockroachDBTestContainer {
+
+ // CockroachDB Docker image version
+ private static final String COCKROACHDB_IMAGE = "cockroachdb/cockroach:v24.3.4";
+ private static final int COCKROACHDB_PORT = 26257;
+
+ private static GenericContainer> container;
+ private static boolean isStarted = false;
+ private static boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared CockroachDB test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared GenericContainer instance
+ */
+ public static synchronized GenericContainer> getInstance() {
+ if (container == null) {
+ container = new GenericContainer<>(DockerImageName.parse(COCKROACHDB_IMAGE))
+ .withCommand("start-single-node", "--insecure")
+ .withExposedPorts(COCKROACHDB_PORT);
+ }
+
+ if (!isStarted) {
+ container.start();
+ isStarted = true;
+ log.info("CockroachDB TestContainer started successfully on port: {}", container.getMappedPort(COCKROACHDB_PORT));
+
+ // Add shutdown hook to stop container when JVM exits
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ * CockroachDB uses the PostgreSQL wire protocol.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ GenericContainer> instance = getInstance();
+ String host = instance.getHost();
+ Integer port = instance.getMappedPort(COCKROACHDB_PORT);
+ return "jdbc:postgresql://" + host + ":" + port + "/defaultdb?sslmode=disable";
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ * CockroachDB in insecure mode uses "root" by default.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return "root";
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ * CockroachDB in insecure mode doesn't require a password.
+ *
+ * @return password string (empty for insecure mode)
+ */
+ public static String getPassword() {
+ return "";
+ }
+
+ /**
+ * Gets the database name for the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return "defaultdb";
+ }
+
+ /**
+ * Checks if CockroachDB tests are enabled via system property.
+ *
+ * @return true if CockroachDB tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enableCockroachDBTests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionProvider.java
new file mode 100644
index 000000000..0015275a0
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionProvider.java
@@ -0,0 +1,55 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Provides DB2 connection parameters for parameterized tests.
+ * This provider returns connection details from the DB2 TestContainer when DB2 tests are enabled.
+ * When DB2 tests are disabled, it returns an empty stream to skip test execution.
+ */
+public class Db2ConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ // Return empty stream if DB2 tests are disabled - prevents test execution
+ if (!Db2TestContainer.isEnabled()) {
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ Db2TestContainer.getInstance();
+
+ // Get connection parameters from the DB2 TestContainer
+ String driverClass = "org.openjproxy.jdbc.Driver";
+ String containerJdbcUrl = Db2TestContainer.getJdbcUrl();
+ String username = Db2TestContainer.getUsername();
+ String password = Db2TestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:db2://localhost:RANDOM_PORT/test
+ // We need to extract the connection string and wrap it with OJP format
+ // OJP format: jdbc:ojp[localhost:1059]_db2://...
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionWithRecordCountsProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionWithRecordCountsProvider.java
new file mode 100644
index 000000000..ae40afb61
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2ConnectionWithRecordCountsProvider.java
@@ -0,0 +1,60 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ * Provides DB2 connection parameters with record counts for parameterized tests.
+ * This provider returns connection details from the DB2 TestContainer when DB2 tests are enabled,
+ * along with various record counts for testing pagination and large result sets.
+ * When DB2 tests are disabled, it returns an empty stream to skip test execution.
+ */
+public class Db2ConnectionWithRecordCountsProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ // Record counts to test various scenarios
+ private static final int[] RECORD_COUNTS = {1, 99, 100, 101, 1000, 10000};
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ // Return empty stream if DB2 tests are disabled - prevents test execution
+ if (!Db2TestContainer.isEnabled()) {
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ Db2TestContainer.getInstance();
+
+ // Get connection parameters from the DB2 TestContainer
+ String driverClass = "org.openjproxy.jdbc.Driver";
+ String containerJdbcUrl = Db2TestContainer.getJdbcUrl();
+ String username = Db2TestContainer.getUsername();
+ String password = Db2TestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:db2://localhost:RANDOM_PORT/test
+ // We need to extract the connection string and wrap it with OJP format
+ // OJP format: jdbc:ojp[localhost:1059]_db2://...
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return arguments for each record count
+ return Arrays.stream(RECORD_COUNTS)
+ .mapToObj(count -> Arguments.of(count, driverClass, ojpUrl, username, password));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2TestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2TestContainer.java
new file mode 100644
index 000000000..14e677bd3
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/Db2TestContainer.java
@@ -0,0 +1,103 @@
+package openjproxy.jdbc.testutil;
+
+import org.testcontainers.containers.Db2Container;
+
+import java.time.Duration;
+
+/**
+ * Singleton DB2 test container for all DB2 integration tests.
+ * This ensures that all tests share the same DB2 instance to improve test performance
+ * and reduce resource usage.
+ *
+ * Thread-safe singleton implementation using synchronized methods to ensure
+ * only one container instance is created across multiple test threads.
+ */
+public class Db2TestContainer {
+
+ // DB2 Docker image version
+ private static final String DB2_IMAGE = "icr.io/db2_community/db2:11.5.9.0";
+
+ private static Db2Container container;
+ private static boolean isStarted = false;
+ private static volatile boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared DB2 test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared Db2Container instance
+ */
+ public static synchronized Db2Container getInstance() {
+ if (container == null) {
+ container = new Db2Container(DB2_IMAGE)
+ .acceptLicense()
+ .withStartupTimeout(Duration.ofMinutes(120));;
+ }
+
+ if (!isStarted) {
+ container.start();
+ isStarted = true;
+ }
+
+ // Add shutdown hook to stop container when JVM exits (thread-safe check)
+ if (!shutdownHookRegistered) {
+ synchronized (Db2TestContainer.class) {
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ return getInstance().getJdbcUrl();
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return getInstance().getUsername();
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ *
+ * @return password string
+ */
+ public static String getPassword() {
+ return getInstance().getPassword();
+ }
+
+ /**
+ * Gets the database name for connecting to the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return getInstance().getDatabaseName();
+ }
+
+ /**
+ * Checks if DB2 tests are enabled via system property.
+ *
+ * @return true if DB2 tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enableDb2Tests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBConnectionProvider.java
new file mode 100644
index 000000000..7706a8502
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBConnectionProvider.java
@@ -0,0 +1,58 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for MariaDB integration tests.
+ * Provides connection details from TestContainers when MariaDB tests are enabled.
+ * This allows tests to use TestContainers instead of external MariaDB instances.
+ */
+public class MariaDBConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!MariaDBTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ MariaDBTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = MariaDBTestContainer.getJdbcUrl();
+ String username = MariaDBTestContainer.getUsername();
+ String password = MariaDBTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:mariadb://localhost:RANDOM_PORT/defaultdb
+ // OJP wraps this by removing 'jdbc:' and prepending 'jdbc:ojp[host:port]_'
+ // Result format: jdbc:ojp[localhost:1059]_mariadb://localhost:RANDOM_PORT/defaultdb
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return a single set of arguments with the TestContainer connection details
+ // The fifth parameter (false) represents the isXA flag, indicating this is not an XA connection
+ // This matches the CSV format which had a boolean flag for XA configuration
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password, false)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBTestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBTestContainer.java
new file mode 100644
index 000000000..8fa70690d
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MariaDBTestContainer.java
@@ -0,0 +1,103 @@
+package openjproxy.jdbc.testutil;
+
+import lombok.extern.slf4j.Slf4j;
+import org.testcontainers.containers.MariaDBContainer;
+
+/**
+ * Singleton MariaDB test container for all MariaDB integration tests.
+ * This ensures that all tests share the same MariaDB instance to improve test performance
+ * and reduce resource usage.
+ */
+@Slf4j
+public class MariaDBTestContainer {
+
+ // MariaDB Docker image version
+ private static final String MARIADB_IMAGE = "mariadb:10.11";
+ private static final String TEST_DATABASE = "defaultdb";
+ private static final String TEST_USERNAME = "testuser";
+ private static final String TEST_PASSWORD = "testpassword";
+
+ private static MariaDBContainer> container;
+ private static boolean isStarted = false;
+ private static boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared MariaDB test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared MariaDBContainer instance
+ */
+ public static synchronized MariaDBContainer> getInstance() {
+ if (container == null) {
+ container = new MariaDBContainer<>(MARIADB_IMAGE)
+ .withDatabaseName(TEST_DATABASE)
+ .withUsername(TEST_USERNAME)
+ .withPassword(TEST_PASSWORD);
+ }
+
+ if (!isStarted) {
+ log.info("Starting MariaDB TestContainer...");
+ container.start();
+ isStarted = true;
+ log.info("MariaDB TestContainer started successfully at: {}", container.getJdbcUrl());
+
+ // Add shutdown hook to stop container when JVM exits
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ log.info("Stopping MariaDB TestContainer...");
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ return getInstance().getJdbcUrl();
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return getInstance().getUsername();
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ *
+ * @return password string
+ */
+ public static String getPassword() {
+ return getInstance().getPassword();
+ }
+
+ /**
+ * Gets the database name for the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return getInstance().getDatabaseName();
+ }
+
+ /**
+ * Checks if MariaDB tests are enabled via system property.
+ *
+ * @return true if MariaDB tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enableMariaDBTests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLConnectionProvider.java
new file mode 100644
index 000000000..a25752c24
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLConnectionProvider.java
@@ -0,0 +1,56 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for MySQL integration tests.
+ * Provides connection details from TestContainers when MySQL tests are enabled.
+ * This allows tests to use TestContainers instead of external MySQL instances.
+ */
+public class MySQLConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!MySQLTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ MySQLTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = MySQLTestContainer.getJdbcUrl();
+ String username = MySQLTestContainer.getUsername();
+ String password = MySQLTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:mysql://localhost:RANDOM_PORT/defaultdb
+ // OJP wraps this by removing 'jdbc:' and prepending 'jdbc:ojp[host:port]_'
+ // Result format: jdbc:ojp[localhost:1059]_mysql://localhost:RANDOM_PORT/defaultdb
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return a single set of arguments with the TestContainer connection details
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLTestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLTestContainer.java
new file mode 100644
index 000000000..d51b80f3d
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/MySQLTestContainer.java
@@ -0,0 +1,95 @@
+package openjproxy.jdbc.testutil;
+
+import org.testcontainers.containers.MySQLContainer;
+
+/**
+ * Singleton MySQL test container for all MySQL integration tests.
+ * This ensures that all tests share the same MySQL instance to improve test performance
+ * and reduce resource usage.
+ */
+public class MySQLTestContainer {
+
+ // MySQL Docker image version
+ private static final String MYSQL_IMAGE = "mysql:8.0";
+
+ private static MySQLContainer> container;
+ private static boolean isStarted = false;
+ private static boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared MySQL test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared MySQLContainer instance
+ */
+ public static synchronized MySQLContainer> getInstance() {
+ if (container == null) {
+ container = new MySQLContainer<>(MYSQL_IMAGE)
+ .withDatabaseName("defaultdb")
+ .withUsername("testuser")
+ .withPassword("testpassword");
+ }
+
+ if (!isStarted) {
+ container.start();
+ isStarted = true;
+
+ // Add shutdown hook to stop container when JVM exits
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ return getInstance().getJdbcUrl();
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return getInstance().getUsername();
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ *
+ * @return password string
+ */
+ public static String getPassword() {
+ return getInstance().getPassword();
+ }
+
+ /**
+ * Gets the database name for the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return getInstance().getDatabaseName();
+ }
+
+ /**
+ * Checks if MySQL tests are enabled via system property.
+ *
+ * @return true if MySQL tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enableMySQLTests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionProvider.java
new file mode 100644
index 000000000..9772a2892
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionProvider.java
@@ -0,0 +1,56 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for Oracle integration tests.
+ * Provides connection details from TestContainers when Oracle tests are enabled.
+ * This allows tests to use TestContainers instead of external Oracle instances.
+ */
+public class OracleConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!OracleTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ OracleTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = OracleTestContainer.getJdbcUrl();
+ String username = OracleTestContainer.getUsername();
+ String password = OracleTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:oracle:thin:@localhost:RANDOM_PORT/XEPDB1
+ // OJP wraps this by removing 'jdbc:' and prepending 'jdbc:ojp[host:port]_'
+ // Result format: jdbc:ojp[localhost:1059]_oracle:thin:@localhost:RANDOM_PORT/XEPDB1
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return a single set of arguments with the TestContainer connection details
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionWithRecordCountsProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionWithRecordCountsProvider.java
new file mode 100644
index 000000000..92dfc0a9b
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleConnectionWithRecordCountsProvider.java
@@ -0,0 +1,55 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for Oracle integration tests that include record counts.
+ * Provides connection details from TestContainers along with various record counts for testing.
+ */
+public class OracleConnectionWithRecordCountsProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ // Test record counts to iterate through
+ private static final int[] RECORD_COUNTS = {1, 99, 100, 101, 1000, 10000};
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!OracleTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ OracleTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = OracleTestContainer.getJdbcUrl();
+ String username = OracleTestContainer.getUsername();
+ String password = OracleTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return arguments for each record count
+ return Arrays.stream(RECORD_COUNTS)
+ .mapToObj(count -> Arguments.of(count, driverClass, ojpUrl, username, password));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleTestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleTestContainer.java
new file mode 100644
index 000000000..fa5ba6b19
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/OracleTestContainer.java
@@ -0,0 +1,143 @@
+package openjproxy.jdbc.testutil;
+
+import lombok.extern.slf4j.Slf4j;
+import org.testcontainers.containers.OracleContainer;
+import org.testcontainers.utility.DockerImageName;
+
+/**
+ * Singleton Oracle test container for all Oracle integration tests.
+ * This ensures that all tests share the same Oracle instance to improve test performance
+ * and reduce resource usage.
+ */
+@Slf4j
+public class OracleTestContainer {
+
+ // Oracle Docker image version (using gvenzl/oracle-xe for compatibility)
+ private static final String ORACLE_IMAGE = "gvenzl/oracle-xe:21-full";
+ private static final String TEST_PASSWORD = "testpassword";
+ private static final String TEST_USERNAME = "testuser";
+
+ private static OracleContainer container;
+ private static boolean isStarted = false;
+ private static boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared Oracle test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared OracleContainer instance
+ */
+ public static synchronized OracleContainer getInstance() {
+ if (container == null) {
+ container = new OracleContainer(DockerImageName.parse(ORACLE_IMAGE))
+ .withUsername(TEST_USERNAME)
+ .withPassword(TEST_PASSWORD);
+ }
+
+ if (!isStarted) {
+ container.start();
+ isStarted = true;
+
+ // Grant XA permissions to the test user
+ try {
+ grantXAPermissions();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to grant XA permissions to Oracle test user", e);
+ }
+
+ // Add shutdown hook to stop container when JVM exits
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Grants XA permissions to the test user.
+ * This is required for XA transaction tests.
+ */
+ private static void grantXAPermissions() throws Exception {
+ log.info("Granting XA permissions to Oracle test user: {}", TEST_USERNAME);
+
+ // Build SQL script with all necessary grants
+ StringBuilder sqlScript = new StringBuilder();
+ sqlScript.append("WHENEVER SQLERROR EXIT SQL.SQLCODE\n");
+ sqlScript.append("GRANT XA_RECOVER_ADMIN TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT SELECT ON sys.dba_pending_transactions TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT SELECT ON sys.pending_trans$ TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT SELECT ON sys.dba_2pc_pending TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT SELECT ON sys.dba_2pc_neighbors TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT EXECUTE ON sys.dbms_xa TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT EXECUTE ON sys.dbms_system TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("GRANT FORCE ANY TRANSACTION TO ").append(TEST_USERNAME).append(";\n");
+ sqlScript.append("EXIT;\n");
+
+ // Execute the grants using bash to pipe SQL into sqlplus
+ org.testcontainers.containers.Container.ExecResult result = container.execInContainer(
+ "bash", "-c",
+ "echo \"" + sqlScript.toString().replace("\"", "\\\"") + "\" | sqlplus -s system/" +
+ TEST_PASSWORD + "@" + container.getDatabaseName()
+ );
+
+ if (result.getExitCode() != 0) {
+ log.warn("Failed to grant XA permissions. Exit code: {}", result.getExitCode());
+ log.warn("Output: {}", result.getStdout());
+ log.warn("Error: {}", result.getStderr());
+ // Don't throw exception - XA tests may fail but other tests can still run
+ } else {
+ log.info("Successfully granted XA permissions to {}", TEST_USERNAME);
+ }
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ return getInstance().getJdbcUrl();
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return getInstance().getUsername();
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ *
+ * @return password string
+ */
+ public static String getPassword() {
+ return getInstance().getPassword();
+ }
+
+ /**
+ * Gets the database name (service name) for the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return getInstance().getDatabaseName();
+ }
+
+ /**
+ * Checks if Oracle tests are enabled via system property.
+ *
+ * @return true if Oracle tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enableOracleTests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionProvider.java
new file mode 100644
index 000000000..0c5e55e82
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionProvider.java
@@ -0,0 +1,56 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for PostgreSQL integration tests.
+ * Provides connection details from TestContainers when PostgreSQL tests are enabled.
+ * This allows tests to use TestContainers instead of external PostgreSQL instances.
+ */
+public class PostgresConnectionProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!PostgresTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ PostgresTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = PostgresTestContainer.getJdbcUrl();
+ String username = PostgresTestContainer.getUsername();
+ String password = PostgresTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ // TestContainer URL format: jdbc:postgresql://localhost:RANDOM_PORT/defaultdb
+ // OJP wraps this by removing 'jdbc:' and prepending 'jdbc:ojp[host:port]_'
+ // Result format: jdbc:ojp[localhost:1059]_postgresql://localhost:RANDOM_PORT/defaultdb
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return a single set of arguments with the TestContainer connection details
+ return Stream.of(
+ Arguments.of(driverClass, ojpUrl, username, password)
+ );
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionWithRecordCountsProvider.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionWithRecordCountsProvider.java
new file mode 100644
index 000000000..a570fafcd
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresConnectionWithRecordCountsProvider.java
@@ -0,0 +1,60 @@
+package openjproxy.jdbc.testutil;
+
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+
+import java.util.Arrays;
+import java.util.stream.Stream;
+
+/**
+ * Custom ArgumentsProvider for PostgreSQL integration tests that include record counts.
+ * Provides connection details from TestContainers along with various record counts for testing.
+ */
+public class PostgresConnectionWithRecordCountsProvider implements ArgumentsProvider {
+
+ // JDBC URL prefix to be removed when building OJP URL
+ private static final String JDBC_PREFIX = "jdbc:";
+
+ // OJP proxy server configuration - can be overridden via system property
+ private static final String OJP_PROXY_HOST = System.getProperty("ojp.proxy.host", "localhost");
+ private static final String OJP_PROXY_PORT = System.getProperty("ojp.proxy.port", "1059");
+ private static final String OJP_PROXY_ADDRESS = OJP_PROXY_HOST + ":" + OJP_PROXY_PORT;
+
+ // Test record counts to iterate through
+ private static final int[] RECORD_COUNTS = {1, 99, 100, 101, 1000, 10000};
+
+ @Override
+ public Stream extends Arguments> provideArguments(ExtensionContext context) {
+ if (!PostgresTestContainer.isEnabled()) {
+ // Return empty stream when tests are disabled
+ return Stream.empty();
+ }
+
+ // Initialize and start the TestContainer
+ PostgresTestContainer.getInstance();
+
+ // Get connection details from the TestContainer
+ String containerJdbcUrl = PostgresTestContainer.getJdbcUrl();
+ String username = PostgresTestContainer.getUsername();
+ String password = PostgresTestContainer.getPassword();
+
+ // Build OJP JDBC URL from the container URL
+ String driverClass = "org.openjproxy.jdbc.Driver";
+
+ // Remove "jdbc:" prefix and add OJP wrapper
+ String urlWithoutPrefix = containerJdbcUrl.startsWith(JDBC_PREFIX)
+ ? containerJdbcUrl.substring(JDBC_PREFIX.length())
+ : containerJdbcUrl;
+ String ojpUrl = JDBC_PREFIX + "ojp[" + OJP_PROXY_ADDRESS + "]_" + urlWithoutPrefix;
+
+ // Return arguments for each record count with the isXA boolean parameter
+ // The isXA parameter is kept for compatibility but is not actively used by the test
+ return Arrays.stream(RECORD_COUNTS)
+ .boxed()
+ .flatMap(count -> Stream.of(
+ Arguments.of(count, driverClass, ojpUrl, username, password, false),
+ Arguments.of(count, driverClass, ojpUrl, username, password, true)
+ ));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresTestContainer.java b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresTestContainer.java
new file mode 100644
index 000000000..d21c18d02
--- /dev/null
+++ b/ojp-jdbc-driver/src/test/java/openjproxy/jdbc/testutil/PostgresTestContainer.java
@@ -0,0 +1,102 @@
+package openjproxy.jdbc.testutil;
+
+import lombok.extern.slf4j.Slf4j;
+import org.testcontainers.containers.PostgreSQLContainer;
+
+/**
+ * Singleton PostgreSQL test container for all PostgreSQL integration tests.
+ * This ensures that all tests share the same PostgreSQL instance to improve test performance
+ * and reduce resource usage.
+ */
+@Slf4j
+public class PostgresTestContainer {
+
+ // PostgreSQL Docker image version
+ private static final String POSTGRES_IMAGE = "postgres:17";
+ private static final String TEST_PASSWORD = "testpassword";
+ private static final String TEST_USERNAME = "testuser";
+ private static final String TEST_DATABASE = "defaultdb";
+
+ private static PostgreSQLContainer> container;
+ private static boolean isStarted = false;
+ private static boolean shutdownHookRegistered = false;
+
+ /**
+ * Gets or creates the shared PostgreSQL test container instance.
+ * The container is automatically started on first access.
+ *
+ * @return the shared PostgreSQLContainer instance
+ */
+ public static synchronized PostgreSQLContainer> getInstance() {
+ if (container == null) {
+ container = new PostgreSQLContainer<>(POSTGRES_IMAGE)
+ .withDatabaseName(TEST_DATABASE)
+ .withUsername(TEST_USERNAME)
+ .withPassword(TEST_PASSWORD)
+ .withCommand("postgres", "-c", "max_prepared_transactions=100");
+ }
+
+ if (!isStarted) {
+ container.start();
+ isStarted = true;
+ log.info("PostgreSQL TestContainer started successfully");
+
+ // Add shutdown hook to stop container when JVM exits
+ if (!shutdownHookRegistered) {
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ if (container != null && container.isRunning()) {
+ container.stop();
+ }
+ }));
+ shutdownHookRegistered = true;
+ }
+ }
+
+ return container;
+ }
+
+ /**
+ * Gets the JDBC URL for connecting to the test container.
+ *
+ * @return JDBC URL string
+ */
+ public static String getJdbcUrl() {
+ return getInstance().getJdbcUrl();
+ }
+
+ /**
+ * Gets the username for connecting to the test container.
+ *
+ * @return username string
+ */
+ public static String getUsername() {
+ return getInstance().getUsername();
+ }
+
+ /**
+ * Gets the password for connecting to the test container.
+ *
+ * @return password string
+ */
+ public static String getPassword() {
+ return getInstance().getPassword();
+ }
+
+ /**
+ * Gets the database name for the test container.
+ *
+ * @return database name string
+ */
+ public static String getDatabaseName() {
+ return getInstance().getDatabaseName();
+ }
+
+ /**
+ * Checks if PostgreSQL tests are enabled via system property.
+ *
+ * @return true if PostgreSQL tests should run
+ */
+ public static boolean isEnabled() {
+ return Boolean.parseBoolean(System.getProperty("enablePostgresTests", "false"));
+ }
+}
diff --git a/ojp-jdbc-driver/src/test/resources/cockroachdb_connection.csv b/ojp-jdbc-driver/src/test/resources/cockroachdb_connection.csv
deleted file mode 100644
index 1def7398e..000000000
--- a/ojp-jdbc-driver/src/test/resources/cockroachdb_connection.csv
+++ /dev/null
@@ -1 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_postgresql://localhost:26257/defaultdb?sslmode=disable,root,
diff --git a/ojp-jdbc-driver/src/test/resources/h2_mysql_mariadb_oracle_connections.csv b/ojp-jdbc-driver/src/test/resources/h2_mysql_mariadb_oracle_connections.csv
index 009564e39..3358c4c7a 100644
--- a/ojp-jdbc-driver/src/test/resources/h2_mysql_mariadb_oracle_connections.csv
+++ b/ojp-jdbc-driver/src/test/resources/h2_mysql_mariadb_oracle_connections.csv
@@ -1,4 +1,3 @@
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_h2:~/test,sa,
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mysql://localhost:3306/defaultdb,testuser,testpassword
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mariadb://localhost:3307/defaultdb,testuser,testpassword
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_oracle:thin:@localhost:1521/XEPDB1,testuser,testpassword
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/resources/h2_postgres_mysql_mariadb_oracle_sqlserver_connections.csv b/ojp-jdbc-driver/src/test/resources/h2_postgres_mysql_mariadb_oracle_sqlserver_connections.csv
index 6480f9fbc..e20191e7e 100644
--- a/ojp-jdbc-driver/src/test/resources/h2_postgres_mysql_mariadb_oracle_sqlserver_connections.csv
+++ b/ojp-jdbc-driver/src/test/resources/h2_postgres_mysql_mariadb_oracle_sqlserver_connections.csv
@@ -2,7 +2,6 @@ org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_h2:~/test,sa,,false
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_postgresql://localhost:5432/defaultdb,testuser,testpassword,false
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_postgresql://localhost:5432/defaultdb,testuser,testpassword,true
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mysql://localhost:3306/defaultdb,testuser,testpassword,false
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mariadb://localhost:3307/defaultdb,testuser,testpassword,false
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_oracle:thin:@localhost:1521/XEPDB1,testuser,testpassword,false
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_sqlserver://localhost:1433;databaseName=defaultdb;encrypt=false;trustServerCertificate=true,testuser,TestPassword123!,false
org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_db2://localhost:50000/testdb,db2inst1,testpass,false
diff --git a/ojp-jdbc-driver/src/test/resources/mysql_mariadb_connection.csv b/ojp-jdbc-driver/src/test/resources/mysql_mariadb_connection.csv
deleted file mode 100644
index 8bda7086d..000000000
--- a/ojp-jdbc-driver/src/test/resources/mysql_mariadb_connection.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mysql://localhost:3306/defaultdb,testuser,testpassword,false
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_mariadb://localhost:3307/defaultdb,testuser,testpassword,false
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/resources/oracle_connections.csv b/ojp-jdbc-driver/src/test/resources/oracle_connections.csv
deleted file mode 100644
index d124daff7..000000000
--- a/ojp-jdbc-driver/src/test/resources/oracle_connections.csv
+++ /dev/null
@@ -1 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_oracle:thin:@localhost:1521/XEPDB1,testuser,testpassword
diff --git a/ojp-jdbc-driver/src/test/resources/oracle_xa_connection.csv b/ojp-jdbc-driver/src/test/resources/oracle_xa_connection.csv
deleted file mode 100644
index d60d9179d..000000000
--- a/ojp-jdbc-driver/src/test/resources/oracle_xa_connection.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_oracle:thin:@localhost:1521/XEPDB1,testuser,testpassword
-
diff --git a/ojp-jdbc-driver/src/test/resources/postgres_connection.csv b/ojp-jdbc-driver/src/test/resources/postgres_connection.csv
deleted file mode 100644
index 43abe5cb7..000000000
--- a/ojp-jdbc-driver/src/test/resources/postgres_connection.csv
+++ /dev/null
@@ -1 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_postgresql://localhost:5432/defaultdb,testuser,testpassword,false
\ No newline at end of file
diff --git a/ojp-jdbc-driver/src/test/resources/postgres_xa_connection.csv b/ojp-jdbc-driver/src/test/resources/postgres_xa_connection.csv
deleted file mode 100644
index ca003e3f5..000000000
--- a/ojp-jdbc-driver/src/test/resources/postgres_xa_connection.csv
+++ /dev/null
@@ -1 +0,0 @@
-org.openjproxy.jdbc.Driver,jdbc:ojp[localhost:1059]_postgresql://localhost:5432/defaultdb,testuser,testpassword
\ No newline at end of file