This is an automated email from the ASF dual-hosted git repository.
ostinru pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry-pxf.git
The following commit(s) were added to refs/heads/main by this push:
new 1f79fccd Testcontainers: Fixes for JDBC test suite (#108)
1f79fccd is described below
commit 1f79fccdbb3f3259dad886cd8e6f3b36fc27a1fe
Author: Nikolay Antonov <[email protected]>
AuthorDate: Mon Apr 20 13:02:46 2026 +0500
Testcontainers: Fixes for JDBC test suite (#108)
In this PR following issues addressed:
* Docker image size reduced from 4.52G to 3.34G (github provides 10G cache)
* Runs MS SQL tests with FDW plugin
* Always specify username/password for PostgreSQL JDBC tests (required for
hardened PXF versions)
* minor cleanups
---
.../applications/CloudberryApplication.java | 8 +++++++
.../structures/tables/pxf/ForeignTable.java | 2 +-
.../testcontainers/PXFCloudberryContainer.java | 5 +++++
.../resources/testcontainers/pxf-cbdb/Dockerfile | 6 +++---
.../pxf-cbdb/script/build_cloudberry.sh | 3 +++
.../testcontainers/pxf-cbdb/script/build_pxf.sh | 8 -------
.../automation/features/jdbc/JdbcMssqlTest.java | 2 ++
.../pxf/automation/features/jdbc/JdbcTest.java | 25 ++++++++++++++++++++++
server/Makefile | 1 -
9 files changed, 47 insertions(+), 13 deletions(-)
diff --git
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/applications/CloudberryApplication.java
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/applications/CloudberryApplication.java
index 5150a6fd..0929572c 100644
---
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/applications/CloudberryApplication.java
+++
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/applications/CloudberryApplication.java
@@ -49,6 +49,7 @@ public class CloudberryApplication implements AutoCloseable {
private final PXFCloudberryContainer container;
private final String jdbcUrl;
private final String userName;
+ private final String password;
private Connection connection;
private Statement statement;
@@ -56,12 +57,14 @@ public class CloudberryApplication implements AutoCloseable
{
this.container = container;
this.jdbcUrl = getCloudberryMappedJdbcUrl();
this.userName = container.getCloudberryUser();
+ this.password = container.getCloudberryPassword();
}
public CloudberryApplication(PXFCloudberryContainer container, String
dbName) {
this.container = container;
this.jdbcUrl = getCloudberryMappedJdbcUrl(dbName);
this.userName = container.getCloudberryUser();
+ this.password = container.getCloudberryPassword();
}
public void connect() throws Exception {
@@ -71,6 +74,7 @@ public class CloudberryApplication implements AutoCloseable {
Properties props = new Properties();
if (userName != null) {
props.setProperty("user", userName);
+ props.setProperty("password", password);
}
Exception lastException = null;
@@ -276,6 +280,10 @@ public class CloudberryApplication implements
AutoCloseable {
return userName;
}
+ public String getPassword() {
+ return password;
+ }
+
public PXFCloudberryContainer getContainer() {
return container;
}
diff --git
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/tables/pxf/ForeignTable.java
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/tables/pxf/ForeignTable.java
index c01874f1..5448fe46 100644
---
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/tables/pxf/ForeignTable.java
+++
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/structures/tables/pxf/ForeignTable.java
@@ -113,7 +113,7 @@ public class ForeignTable extends WritableExternalTable {
if (params != null) {
for (String param : params) {
// parse parameter, each one is KEY=VALUE
- String[] paramPair = param.split("=");
+ String[] paramPair = param.split("=", 2);
appendOption(joiner, paramPair[0], paramPair[1]);
}
}
diff --git
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/testcontainers/PXFCloudberryContainer.java
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/testcontainers/PXFCloudberryContainer.java
index b5bbb4cc..5382c794 100644
---
a/automation/src/main/java/org/apache/cloudberry/pxf/automation/testcontainers/PXFCloudberryContainer.java
+++
b/automation/src/main/java/org/apache/cloudberry/pxf/automation/testcontainers/PXFCloudberryContainer.java
@@ -64,6 +64,7 @@ public class PXFCloudberryContainer extends
GenericContainer<PXFCloudberryContai
public static final int CLOUDBERRY_PORT = 7000;
public static final int PXF_PORT = 5888;
public static final String CLOUDBERRY_USER = "gpadmin";
+ public static final String CLOUDBERRY_PASSWORD = "cbdb@123";
private static final String CONTAINER_GRADLE_RO_CACHE =
"/home/gpadmin/.gradle-host-cache";
private static final String CONTAINER_REPO_DIR =
"/home/gpadmin/workspace/cloudberry-pxf";
@@ -234,6 +235,10 @@ public class PXFCloudberryContainer extends
GenericContainer<PXFCloudberryContai
return CLOUDBERRY_USER;
}
+ public String getCloudberryPassword() {
+ return CLOUDBERRY_PASSWORD;
+ }
+
public String getPxfInternalHost() {
return "localhost";
}
diff --git a/automation/src/main/resources/testcontainers/pxf-cbdb/Dockerfile
b/automation/src/main/resources/testcontainers/pxf-cbdb/Dockerfile
index d0633320..19ef014a 100644
--- a/automation/src/main/resources/testcontainers/pxf-cbdb/Dockerfile
+++ b/automation/src/main/resources/testcontainers/pxf-cbdb/Dockerfile
@@ -42,9 +42,9 @@ RUN curl -fsSL
"https://services.gradle.org/distributions/gradle-${GRADLE_VERSIO
-o /tmp/gradle.zip && \
sudo unzip -q /tmp/gradle.zip -d /opt && \
sudo ln -s "/opt/gradle-${GRADLE_VERSION}/bin/gradle"
/usr/local/bin/gradle && \
- rm /tmp/gradle.zip
-RUN cd /tmp && gradle init && gradle wrapper --gradle-version
${GRADLE_VERSION} && ./gradlew javaToolchains
-RUN rm -rf /tmp/gradle /tmp/gradlew /tmp/gradlew.bat /tmp/.gradle
+ rm /tmp/gradle.zip && \
+ cd /tmp && gradle init && gradle wrapper --gradle-version
${GRADLE_VERSION} && ./gradlew javaToolchains &&\
+ rm -rf /tmp/gradle /tmp/gradlew /tmp/gradlew.bat /tmp/.gradle
ENV GRADLE_HOME="/opt/gradle-${GRADLE_VERSION}"
# Go toolchain for building pxf_regress inside the container
diff --git
a/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_cloudberry.sh
b/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_cloudberry.sh
index 7ad3204a..ef65c287 100755
---
a/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_cloudberry.sh
+++
b/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_cloudberry.sh
@@ -209,3 +209,6 @@ make install -C ~/workspace/cloudberry/contrib
/usr/local/cloudberry-db/bin/postgres --gp-version
/usr/local/cloudberry-db/bin/postgres --version
ldd /usr/local/cloudberry-db/bin/postgres
+
+# cleanup build tree (reduce image size)
+make clean
\ No newline at end of file
diff --git
a/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_pxf.sh
b/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_pxf.sh
index bc7bbc22..350cc91f 100755
--- a/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_pxf.sh
+++ b/automation/src/main/resources/testcontainers/pxf-cbdb/script/build_pxf.sh
@@ -33,14 +33,6 @@ export GPHOME=/usr/local/cloudberry-db
source /usr/local/cloudberry-db/cloudberry-env.sh
export PATH=$GPHOME/bin:$PATH
-# Install Java 11 JDK and Maven
-if command -v apt-get >/dev/null 2>&1; then
- sudo apt update
- sudo apt install -y openjdk-11-jdk-headless maven
-elif command -v dnf >/dev/null 2>&1; then
- sudo dnf install -y java-11-openjdk-devel maven
-fi
-
cd /home/gpadmin/workspace/cloudberry-pxf
# Ensure gpadmin owns the source directory
diff --git
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcMssqlTest.java
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcMssqlTest.java
index ff19e3af..673a2012 100644
---
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcMssqlTest.java
+++
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcMssqlTest.java
@@ -19,6 +19,7 @@ package org.apache.cloudberry.pxf.automation.features.jdbc;
* under the License.
*/
+import annotations.WorksWithFDW;
import org.apache.cloudberry.pxf.automation.AbstractTestcontainersTest;
import
org.apache.cloudberry.pxf.automation.structures.tables.pxf.ExternalTable;
import
org.apache.cloudberry.pxf.automation.structures.tables.utils.TableFactory;
@@ -41,6 +42,7 @@ import java.util.Properties;
import java.util.TimeZone;
import java.util.UUID;
+@WorksWithFDW
public class JdbcMssqlTest extends AbstractTestcontainersTest {
private static final String MSSQL_DRIVER =
"com.microsoft.sqlserver.jdbc.SQLServerDriver";
diff --git
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcTest.java
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcTest.java
index 2263deb5..e2cfe044 100755
---
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcTest.java
+++
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/jdbc/JdbcTest.java
@@ -223,6 +223,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcSingleFragment.setHost(pxfHost);
pxfJdbcSingleFragment.setPort(pxfPort);
+ pxfJdbcSingleFragment.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcSingleFragment);
}
@@ -242,6 +243,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
null);
pxfJdbcMultipleFragmentsByEnum.setHost(pxfHost);
pxfJdbcMultipleFragmentsByEnum.setPort(pxfPort);
+ pxfJdbcMultipleFragmentsByEnum.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByEnum);
}
@@ -261,6 +263,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
null);
pxfJdbcMultipleFragmentsByInt.setHost(pxfHost);
pxfJdbcMultipleFragmentsByInt.setPort(pxfPort);
+ pxfJdbcMultipleFragmentsByInt.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByInt);
}
@@ -280,6 +283,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
null);
pxfJdbcMultipleFragmentsByDate.setHost(pxfHost);
pxfJdbcMultipleFragmentsByDate.setPort(pxfPort);
+ pxfJdbcMultipleFragmentsByDate.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByDate);
}
@@ -299,6 +303,8 @@ public class JdbcTest extends AbstractTestcontainersTest {
"database");
pxfJdbcReadServerConfigAll.setHost(pxfHost);
pxfJdbcReadServerConfigAll.setPort(pxfPort);
+ pxfJdbcReadServerConfigAll.addUserParameter("USER=" +
gpdb.getUserName());
+ pxfJdbcReadServerConfigAll.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcReadServerConfigAll);
}
@@ -310,6 +316,8 @@ public class JdbcTest extends AbstractTestcontainersTest {
"database");
pxfJdbcReadViewNoParams.setHost(pxfHost);
pxfJdbcReadViewNoParams.setPort(pxfPort);
+ pxfJdbcReadViewNoParams.addUserParameter("USER=" + gpdb.getUserName());
+ pxfJdbcReadViewNoParams.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcReadViewNoParams);
pxfJdbcReadViewSessionParams = TableFactory.getPxfJdbcReadableTable(
@@ -319,6 +327,8 @@ public class JdbcTest extends AbstractTestcontainersTest {
"db-session-params");
pxfJdbcReadViewSessionParams.setHost(pxfHost);
pxfJdbcReadViewSessionParams.setPort(pxfPort);
+ pxfJdbcReadViewSessionParams.addUserParameter("USER=" +
gpdb.getUserName());
+ pxfJdbcReadViewSessionParams.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcReadViewSessionParams);
}
@@ -332,6 +342,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), null);
pxfJdbcWritable.setHost(pxfHost);
pxfJdbcWritable.setPort(pxfPort);
+ pxfJdbcWritable.addUserParameter("PASS=" + gpdb.getPassword());
pxfJdbcWritable.addUserParameter("date_wide_range=false");
gpdb.createTableAndVerify(pxfJdbcWritable);
@@ -344,6 +355,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), null);
pxfJdbcDateTimeWritableWithDateWideRangeOn.setHost(pxfHost);
pxfJdbcDateTimeWritableWithDateWideRangeOn.setPort(pxfPort);
+ pxfJdbcDateTimeWritableWithDateWideRangeOn.addUserParameter("PASS=" +
gpdb.getPassword());
pxfJdbcDateTimeWritableWithDateWideRangeOn.addUserParameter("date_wide_range=true");
gpdb.createTableAndVerify(pxfJdbcDateTimeWritableWithDateWideRangeOn);
@@ -356,6 +368,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), null);
pxfJdbcDateTimeWritableWithDateWideRangeOff.setHost(pxfHost);
pxfJdbcDateTimeWritableWithDateWideRangeOff.setPort(pxfPort);
+ pxfJdbcDateTimeWritableWithDateWideRangeOff.addUserParameter("PASS=" +
gpdb.getPassword());
pxfJdbcDateTimeWritableWithDateWideRangeOff.addUserParameter("date_wide_range=false");
gpdb.createTableAndVerify(pxfJdbcDateTimeWritableWithDateWideRangeOff);
@@ -368,6 +381,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), "BATCH_SIZE=1");
pxfJdbcWritableNoBatch.setHost(pxfHost);
pxfJdbcWritableNoBatch.setPort(pxfPort);
+ pxfJdbcWritableNoBatch.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcWritableNoBatch);
pxfJdbcWritablePool = TableFactory.getPxfJdbcWritableTable(
@@ -379,6 +393,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), "POOL_SIZE=2");
pxfJdbcWritablePool.setHost(pxfHost);
pxfJdbcWritablePool.setPort(pxfPort);
+ pxfJdbcWritablePool.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcWritablePool);
}
@@ -392,6 +407,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcColumns.setHost(pxfHost);
pxfJdbcColumns.setPort(pxfPort);
+ pxfJdbcColumns.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcColumns);
}
@@ -405,6 +421,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcColumnProjectionSubset.setHost(pxfHost);
pxfJdbcColumnProjectionSubset.setPort(pxfPort);
+ pxfJdbcColumnProjectionSubset.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcColumnProjectionSubset);
}
@@ -418,6 +435,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcColumnProjectionSuperset.setHost(pxfHost);
pxfJdbcColumnProjectionSuperset.setPort(pxfPort);
+ pxfJdbcColumnProjectionSuperset.addUserParameter("PASS=" +
gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcColumnProjectionSuperset);
}
@@ -431,6 +449,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName(), "FETCH_SIZE=0");
pxfJdbcSingleFragment.setHost(pxfHost);
pxfJdbcSingleFragment.setPort(pxfPort);
+ pxfJdbcSingleFragment.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcSingleFragment);
}
@@ -444,6 +463,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcDateWideRangeOn.setHost(pxfHost);
pxfJdbcDateWideRangeOn.setPort(pxfPort);
+ pxfJdbcDateWideRangeOn.addUserParameter("PASS=" + gpdb.getPassword());
pxfJdbcDateWideRangeOn.addUserParameter("date_wide_range=true");
gpdb.createTableAndVerify(pxfJdbcDateWideRangeOn);
@@ -456,6 +476,7 @@ public class JdbcTest extends AbstractTestcontainersTest {
gpdb.getUserName());
pxfJdbcDateWideRangeOff.setHost(pxfHost);
pxfJdbcDateWideRangeOff.setPort(pxfPort);
+ pxfJdbcDateWideRangeOff.addUserParameter("PASS=" + gpdb.getPassword());
pxfJdbcDateWideRangeOff.addUserParameter("date_wide_range=false");
gpdb.createTableAndVerify(pxfJdbcDateWideRangeOff);
}
@@ -468,6 +489,8 @@ public class JdbcTest extends AbstractTestcontainersTest {
"database");
pxfJdbcNamedQuery.setHost(pxfHost);
pxfJdbcNamedQuery.setPort(pxfPort);
+ pxfJdbcNamedQuery.addUserParameter("USER=" + gpdb.getUserName());
+ pxfJdbcNamedQuery.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcNamedQuery);
pxfJdbcNamedQuery = TableFactory.getPxfJdbcReadablePartitionedTable(
@@ -484,6 +507,8 @@ public class JdbcTest extends AbstractTestcontainersTest {
"database");
pxfJdbcNamedQuery.setHost(pxfHost);
pxfJdbcNamedQuery.setPort(pxfPort);
+ pxfJdbcNamedQuery.addUserParameter("USER=" + gpdb.getUserName());
+ pxfJdbcNamedQuery.addUserParameter("PASS=" + gpdb.getPassword());
gpdb.createTableAndVerify(pxfJdbcNamedQuery);
}
diff --git a/server/Makefile b/server/Makefile
index e6d05e61..bfd0ee34 100644
--- a/server/Makefile
+++ b/server/Makefile
@@ -109,7 +109,6 @@ install-jdbc-drivers: stage-jdbc-drivers
echo "ERROR: PXF_HOME is not set"; exit 2; \
fi
mkdir -p "$(PXF_HOME)"/lib
- rm -f "$(PXF_HOME)"/lib/clickhouse-jdbc-*.jar
cp -R build/stage/lib/. "$(PXF_HOME)"/lib/
clean: prepare-gradle-wrapper
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]