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 5150a6fdb..0929572c0 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 CloudberryApplication(PXFCloudberryContainer container) { 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 void connect() throws Exception { Properties props = new Properties(); if (userName != null) { props.setProperty("user", userName); + props.setProperty("password", password); } Exception lastException = null; @@ -276,6 +280,10 @@ public String getUserName() { 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 c01874f1a..5448fe46d 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 @@ protected String createOptions() { 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 b5bbb4cc4..5382c7943 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/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 ff19e3af0..673a2012f 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 @@ * 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.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 2263deb55..e2cfe044f 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 @@ private void prepareSingleFragment() throws Exception { gpdb.getUserName()); pxfJdbcSingleFragment.setHost(pxfHost); pxfJdbcSingleFragment.setPort(pxfPort); + pxfJdbcSingleFragment.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcSingleFragment); } @@ -242,6 +243,7 @@ private void prepareMultipleFragmentsByEnum() throws Exception { null); pxfJdbcMultipleFragmentsByEnum.setHost(pxfHost); pxfJdbcMultipleFragmentsByEnum.setPort(pxfPort); + pxfJdbcMultipleFragmentsByEnum.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByEnum); } @@ -261,6 +263,7 @@ private void prepareMultipleFragmentsByInt() throws Exception { null); pxfJdbcMultipleFragmentsByInt.setHost(pxfHost); pxfJdbcMultipleFragmentsByInt.setPort(pxfPort); + pxfJdbcMultipleFragmentsByInt.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByInt); } @@ -280,6 +283,7 @@ private void prepareMultipleFragmentsByDate() throws Exception { null); pxfJdbcMultipleFragmentsByDate.setHost(pxfHost); pxfJdbcMultipleFragmentsByDate.setPort(pxfPort); + pxfJdbcMultipleFragmentsByDate.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcMultipleFragmentsByDate); } @@ -299,6 +303,8 @@ private void prepareServerBasedMultipleFragmentsByInt() throws Exception { "database"); pxfJdbcReadServerConfigAll.setHost(pxfHost); pxfJdbcReadServerConfigAll.setPort(pxfPort); + pxfJdbcReadServerConfigAll.addUserParameter("USER=" + gpdb.getUserName()); + pxfJdbcReadServerConfigAll.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcReadServerConfigAll); } @@ -310,6 +316,8 @@ private void prepareViewBasedForTestingSessionParams() throws Exception { "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 @@ private void prepareViewBasedForTestingSessionParams() throws Exception { "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 @@ private void prepareWritable() throws Exception { 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 @@ private void prepareWritable() throws Exception { 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 @@ private void prepareWritable() throws Exception { 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 @@ private void prepareWritable() throws Exception { 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 @@ private void prepareWritable() throws Exception { gpdb.getUserName(), "POOL_SIZE=2"); pxfJdbcWritablePool.setHost(pxfHost); pxfJdbcWritablePool.setPort(pxfPort); + pxfJdbcWritablePool.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcWritablePool); } @@ -392,6 +407,7 @@ private void prepareColumns() throws Exception { gpdb.getUserName()); pxfJdbcColumns.setHost(pxfHost); pxfJdbcColumns.setPort(pxfPort); + pxfJdbcColumns.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcColumns); } @@ -405,6 +421,7 @@ private void prepareColumnProjectionSubsetInDifferentOrder() throws Exception { gpdb.getUserName()); pxfJdbcColumnProjectionSubset.setHost(pxfHost); pxfJdbcColumnProjectionSubset.setPort(pxfPort); + pxfJdbcColumnProjectionSubset.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcColumnProjectionSubset); } @@ -418,6 +435,7 @@ private void prepareColumnProjectionSuperset() throws Exception { gpdb.getUserName()); pxfJdbcColumnProjectionSuperset.setHost(pxfHost); pxfJdbcColumnProjectionSuperset.setPort(pxfPort); + pxfJdbcColumnProjectionSuperset.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcColumnProjectionSuperset); } @@ -431,6 +449,7 @@ private void prepareFetchSizeZero() throws Exception { gpdb.getUserName(), "FETCH_SIZE=0"); pxfJdbcSingleFragment.setHost(pxfHost); pxfJdbcSingleFragment.setPort(pxfPort); + pxfJdbcSingleFragment.addUserParameter("PASS=" + gpdb.getPassword()); gpdb.createTableAndVerify(pxfJdbcSingleFragment); } @@ -444,6 +463,7 @@ private void prepareDateWideRange() throws Exception { 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 @@ private void prepareDateWideRange() throws Exception { 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 @@ private void prepareNamedQuery() throws Exception { "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 @@ private void prepareNamedQuery() throws Exception { "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 e6d05e619..bfd0ee344 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