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 4d10c498 Testcontainers: run PxfExtensionTest in testcontainers (#125)
4d10c498 is described below

commit 4d10c4980801de6359118fd0fecf10e3f81e5eff
Author: Nikolay Antonov <[email protected]>
AuthorDate: Mon Jul 13 13:09:40 2026 +0300

    Testcontainers: run PxfExtensionTest in testcontainers (#125)
    
    Use TestContainers for "pxf_extension" test group:
    1. use TestContainers
    2. explicitly specify extension version - so, there is no need in SQL file 
manipulation
    3. remove 'SELECT' from test - we don't care about external-table 2.0 (pre 
PXF 6.7).
---
 .github/workflows/pxf-ci.yml                       |   9 +-
 .../create_extension/expected/query01.ans          |  30 ----
 .../create_extension/sql/query01.sql               |   4 -
 .../create_extension_rpm/expected/query01.ans      |  19 ---
 .../create_extension_rpm/sql/query01.sql           |   4 -
 .../step_1_create_extension/expected/query01.ans   |  30 ----
 .../step_1_create_extension/sql/query01.sql        |   4 -
 .../expected/query01.ans                           |  19 ---
 .../sql/query01.sql                                |   4 -
 .../step_1_check_extension/expected/query01.ans    |  30 ----
 .../step_1_check_extension/sql/query01.sql         |   4 -
 .../expected/query01.ans                           |  19 ---
 .../sql/query01.sql                                |   4 -
 .../expected/query01.ans                           |  30 ----
 .../sql/query01.sql                                |   4 -
 .../expected/query01.ans                           |  15 --
 .../sql/query01.sql                                |   2 -
 .../expected/query01.ans                           |  30 ----
 .../step_2_after_alter_extension/sql/query01.sql   |   4 -
 .../expected/query01.ans                           |  15 --
 .../sql/query01.sql                                |   2 -
 .../expected/query01.ans                           |  30 ----
 .../step_2_after_alter_extension/sql/query01.sql   |   4 -
 .../applications/CloudberryApplication.java        |   4 +
 .../features/extension/PxfExtensionTest.java       | 171 ++++++++-------------
 .../features/extension/PxfFdwExtensionTest.java    |  91 ++++++-----
 ci/docker/pxf-cbdb-dev/common/script/run_tests.sh  |  44 +-----
 27 files changed, 135 insertions(+), 491 deletions(-)

diff --git a/.github/workflows/pxf-ci.yml b/.github/workflows/pxf-ci.yml
index 6109bd77..93a5717e 100644
--- a/.github/workflows/pxf-ci.yml
+++ b/.github/workflows/pxf-ci.yml
@@ -334,7 +334,6 @@ jobs:
           - gpdb
           - gpdb_fdw
           - load
-          - pxf_extension
     steps:
     - name: Free disk space
       run: |
@@ -504,7 +503,6 @@ jobs:
           - gpdb
           - gpdb_fdw
           - load
-          - pxf_extension
     steps:
     - name: Free disk space
       run: |
@@ -658,12 +656,19 @@ jobs:
         tc_group:
           - 'pxf-jdbc'
           - 'pxf-s3'
+          - 'pxf-extension'
+          - 'pxf-fdw-extension'
         use_fdw:
           - 'false'
           - 'true'
         distro:
           - 'ubuntu'
           - 'rocky9'
+        exclude:
+          - tc_group: 'pxf-extension'
+            use_fdw: 'true'
+          - tc_group: 'pxf-fdw-extension'
+            use_fdw: 'false'
     steps:
       - name: Checkout PXF source
         uses: actions/checkout@v4
diff --git 
a/automation/sqlrepo/features/extension_tests/create_extension/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/create_extension/expected/query01.ans
index c6553ee2..7ce4f097 100644
--- 
a/automation/sqlrepo/features/extension_tests/create_extension/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/create_extension/expected/query01.ans
@@ -40,33 +40,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/create_extension/sql/query01.sql 
b/automation/sqlrepo/features/extension_tests/create_extension/sql/query01.sql
index c9962dff..d8fa5c1c 100644
--- 
a/automation/sqlrepo/features/extension_tests/create_extension/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/create_extension/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/create_extension_rpm/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/create_extension_rpm/expected/query01.ans
index 417c714a..bcebafbb 100644
--- 
a/automation/sqlrepo/features/extension_tests/create_extension_rpm/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/create_extension_rpm/expected/query01.ans
@@ -39,22 +39,3 @@ ORDER BY 1;
  pxfwritable_export | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (5 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-ERROR:  formatter function "pxfdelimited_import" of type readable was not found
-HINT:  Create it with CREATE FUNCTION.
diff --git 
a/automation/sqlrepo/features/extension_tests/create_extension_rpm/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/create_extension_rpm/sql/query01.sql
index c9962dff..d8fa5c1c 100644
--- 
a/automation/sqlrepo/features/extension_tests/create_extension_rpm/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/create_extension_rpm/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/expected/query01.ans
index e142b6ea..9ccefb91 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/expected/query01.ans
@@ -41,33 +41,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/sql/query01.sql
index 76edbb82..4c204b2d 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade/step_1_create_extension/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
index c51d2843..a8697b78 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
@@ -46,22 +46,3 @@ ORDER BY 1;
  pxfwritable_export | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (5 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-ERROR:  formatter function "pxfdelimited_import" of type readable was not found
-HINT:  Create it with CREATE FUNCTION.
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
index 8a87c225..455c1432 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
@@ -28,7 +28,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans
index e142b6ea..9ccefb91 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/expected/query01.ans
@@ -41,33 +41,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql
index 76edbb82..4c204b2d 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_1_check_extension/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
index c2b26b82..8507fa88 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/expected/query01.ans
@@ -46,22 +46,3 @@ ORDER BY 1;
  pxfwritable_export | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (5 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-ERROR:  formatter function "pxfdelimited_import" of type readable was not found
-HINT:  Create it with CREATE FUNCTION.
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
index 8a87c225..455c1432 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade/sql/query01.sql
@@ -28,7 +28,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans
index e142b6ea..9ccefb91 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/expected/query01.ans
@@ -41,33 +41,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql
index 76edbb82..4c204b2d 100644
--- 
a/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
index 406e013d..8499ae36 100644
--- 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
@@ -40,18 +40,3 @@ ORDER BY 1;
  pxfwritable_export | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (5 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
index 48ba18a3..62c2e296 100644
--- 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
@@ -22,5 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/expected/query01.ans
index b70f65c7..3e1baf25 100644
--- 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/expected/query01.ans
@@ -41,33 +41,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/sql/query01.sql
index c3075e9b..62c2e296 100644
--- 
a/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/explicit_upgrade/step_2_after_alter_extension/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
index 02dfffac..4601b8d7 100644
--- 
a/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/expected/query01.ans
@@ -41,18 +41,3 @@ ORDER BY 1;
  pxfwritable_export | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (5 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
index 8c31dcf1..c2f6dbe8 100644
--- 
a/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version/sql/query01.sql
@@ -22,5 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
diff --git 
a/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans
 
b/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans
index 9f87b291..fc4cb6cb 100644
--- 
a/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans
+++ 
b/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/expected/query01.ans
@@ -41,33 +41,3 @@ ORDER BY 1;
  pxfwritable_export  | gpdbwritableformatter_export | $PXF_HOME/gpextable/pxf
  pxfwritable_import  | gpdbwritableformatter_import | $PXF_HOME/gpextable/pxf
 (6 rows)
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
-  name  | num | dub |    longnum    | bool
---------+-----+-----+---------------+------
- row_1  |   1 |   1 |  100000000000 | f
- row_2  |   2 |   2 |  200000000000 | t
- row_3  |   3 |   3 |  300000000000 | f
- row_4  |   4 |   4 |  400000000000 | t
- row_5  |   5 |   5 |  500000000000 | f
- row_6  |   6 |   6 |  600000000000 | t
- row_7  |   7 |   7 |  700000000000 | f
- row_8  |   8 |   8 |  800000000000 | t
- row_9  |   9 |   9 |  900000000000 | f
- row_10 |  10 |  10 | 1000000000000 | t
-(10 rows)
diff --git 
a/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql
 
b/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql
index 5edb69e5..56696cf6 100644
--- 
a/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql
+++ 
b/automation/sqlrepo/features/extension_tests/upgrade/step_2_after_alter_extension/sql/query01.sql
@@ -22,7 +22,3 @@ FROM pg_catalog.pg_extension AS e
     INNER JOIN pg_catalog.pg_proc AS p ON (p.oid = d.objid)
 WHERE d.deptype = 'e' AND e.extname = 'pxf'
 ORDER BY 1;
-
-SELECT * FROM pxf_upgrade_test ORDER BY num;
-
-SELECT * FROM pxf_upgrade_test_multibyte ORDER BY num;
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 0929572c..279b8ce2 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
@@ -210,6 +210,10 @@ public class CloudberryApplication implements 
AutoCloseable {
         }
     }
 
+    public void dropDatabase(String dbName) throws Exception {
+        runQuery("DROP DATABASE IF EXISTS " + dbName, true);
+    }
+
     public void createExtension(String extensionName, boolean ignoreFail) 
throws Exception {
         runQuery("CREATE EXTENSION IF NOT EXISTS " + extensionName, 
ignoreFail);
     }
diff --git 
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfExtensionTest.java
 
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfExtensionTest.java
index 5d781c61..77cbaaa3 100644
--- 
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfExtensionTest.java
+++ 
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfExtensionTest.java
@@ -1,142 +1,103 @@
 package org.apache.cloudberry.pxf.automation.features.extension;
 
-import org.apache.cloudberry.pxf.automation.BaseFunctionality;
-import org.apache.cloudberry.pxf.automation.structures.tables.basic.Table;
-import 
org.apache.cloudberry.pxf.automation.structures.tables.pxf.ReadableExternalTable;
-import 
org.apache.cloudberry.pxf.automation.structures.tables.utils.TableFactory;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.cloudberry.pxf.automation.AbstractTestcontainersTest;
+import org.apache.cloudberry.pxf.automation.applications.CloudberryApplication;
 import org.testng.annotations.Test;
 
-public class PxfExtensionTest extends BaseFunctionality {
+public class PxfExtensionTest extends AbstractTestcontainersTest {
 
-    public static final String[] FIELDS = {
-            "name    text",
-            "num     integer",
-            "dub     double precision",
-            "longNum bigint",
-            "bool    boolean"
-    };
-
-    private ReadableExternalTable externalTable;
-    private String location;
-    private String location_multi;
+    private CloudberryApplication extensionDb;
 
     @Override
-    public void beforeClass() throws Exception {
-        super.beforeClass();
-        gpdb.dropDataBase("pxfautomation_extension", true, true);
-        gpdb.createDataBase("pxfautomation_extension", false);
-        gpdb.setDb("pxfautomation_extension");
-        gpdb.connectToDataBase("pxfautomation_extension");
-
-        Table smallData = getSmallData("", 10);
-
-        location = hdfs.getWorkingDirectory() + "/upgrade-test-data.txt";
-        hdfs.writeTableToFile(location, smallData, ",");
+    protected void beforeClass() throws Exception {
+        // pxf_regress scripts run "\c pxfautomation_extension", so the 
database must exist in the container.
+        cloudberry.dropDatabase("pxfautomation_extension");
+        cloudberry.createDatabase("pxfautomation_extension");
 
-        location_multi = hdfs.getWorkingDirectory() + 
"/upgrade-test-data_multibyte.txt";
-        hdfs.writeTableToFile(location_multi, smallData, "停");
+        extensionDb = new CloudberryApplication(container, 
"pxfautomation_extension");
+        extensionDb.connect();
     }
 
     @Override
-    public void afterClass() throws Exception {
-        gpdb.connectToDataBase("pxfautomation");
-        gpdb.dropDataBase("pxfautomation_extension", true, true);
-        super.afterClass();
+    protected void afterClass() throws Exception {
+        if (extensionDb != null) {
+            extensionDb.close();
+        }
+        cloudberry.dropDatabase("pxfautomation_extension");
     }
 
     @Override
-    public void beforeMethod() throws Exception {
-        gpdb.setDb("pxfautomation_extension");
-        gpdb.connectToDataBase("pxfautomation_extension");
-        gpdb.runQuery("DROP EXTENSION IF EXISTS pxf CASCADE", true, false);
+    protected void beforeMethod() throws Exception {
+        extensionDb.runQuery("DROP EXTENSION IF EXISTS pxf CASCADE", true);
     }
 
-    @Test(groups = {"gpdb", "pxfExtensionVersion2_1"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfCreateExtension() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf");
-        // create a regular external table
-        createReadablePxfTable("default", location, false);
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        runSqlTest("features/extension_tests/create_extension");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.1'");
+        regress.runSqlTest("features/extension_tests/create_extension");
     }
 
-    @Test(groups = {"pxfExtensionVersion2"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfCreateExtensionOldRPM() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf");
-        // create a regular external table
-        createReadablePxfTable("default", location, false);
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        runSqlTest("features/extension_tests/create_extension_rpm");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.0'");
+        regress.runSqlTest("features/extension_tests/create_extension_rpm");
     }
 
-    @Test(groups = {"gpdb", "pxfExtensionVersion2_1"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfUpgrade() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf VERSION '2.0'");
-        createReadablePxfTable("default", location, false);
-        
runSqlTest("features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version");
-
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        gpdb.runQuery("ALTER EXTENSION pxf UPDATE");
-        
runSqlTest("features/extension_tests/upgrade/step_2_after_alter_extension");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.0'");
+        
regress.runSqlTest("features/extension_tests/upgrade/step_1_create_extension_with_older_pxf_version");
+
+        extensionDb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.1'");
+        
regress.runSqlTest("features/extension_tests/upgrade/step_2_after_alter_extension");
     }
 
-    @Test(groups = {"gpdb", "pxfExtensionVersion2_1"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfExplicitUpgrade() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf VERSION '2.0'");
-        createReadablePxfTable("default", location, false);
-        
runSqlTest("features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version");
-
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        gpdb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.1'");
-        
runSqlTest("features/extension_tests/explicit_upgrade/step_2_after_alter_extension");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.0'");
+        
regress.runSqlTest("features/extension_tests/explicit_upgrade/step_1_create_extension_with_older_pxf_version");
+
+        extensionDb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.1'");
+        
regress.runSqlTest("features/extension_tests/explicit_upgrade/step_2_after_alter_extension");
     }
 
-    @Test(groups = {"gpdb", "pxfExtensionVersion2_1"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfDowngrade() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.1'");
+        
regress.runSqlTest("features/extension_tests/downgrade/step_1_create_extension");
 
-        createReadablePxfTable("default", location, false);
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        
runSqlTest("features/extension_tests/downgrade/step_1_create_extension");
-
-        gpdb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.0'");
-        
runSqlTest("features/extension_tests/downgrade/step_2_after_alter_extension_downgrade");
+        extensionDb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.0'");
+        
regress.runSqlTest("features/extension_tests/downgrade/step_2_after_alter_extension_downgrade");
     }
 
-    @Test(groups = {"gpdb", "pxfExtensionVersion2_1"})
+    @Test(groups = {"testcontainers", "pxf-extension"})
     public void testPxfDowngradeThenUpgradeAgain() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf");
-
-        createReadablePxfTable("default", location, false);
-        // create an external table with the multibyte formatter
-        createReadablePxfTable("default", location_multi, true);
-        
runSqlTest("features/extension_tests/downgrade_then_upgrade/step_1_check_extension");
-
-        gpdb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.0'");
-        
runSqlTest("features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade");
+        extensionDb.runQuery("CREATE EXTENSION pxf VERSION '2.1'");
+        
regress.runSqlTest("features/extension_tests/downgrade_then_upgrade/step_1_check_extension");
 
-        gpdb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.1'");
-        
runSqlTest("features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade");
-    }
+        extensionDb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.0'");
+        
regress.runSqlTest("features/extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade");
 
-    private void createReadablePxfTable(String serverName, String location, 
boolean multi) throws Exception {
-        if (multi) {
-            externalTable = 
TableFactory.getPxfReadableTextTable("pxf_upgrade_test_multibyte", FIELDS, 
location, null);
-            externalTable.setFormat("CUSTOM");
-            externalTable.setFormatter("pxfdelimited_import");
-            externalTable.addFormatterOption("delimiter='停'");
-        } else {
-            externalTable = 
TableFactory.getPxfReadableTextTable("pxf_upgrade_test", FIELDS, location, ",");
-        }
-        externalTable.setHost(pxfHost);
-        externalTable.setPort(pxfPort);
-        externalTable.setServer("SERVER=" + serverName);
-        gpdb.createTableAndVerify(externalTable);
+        extensionDb.runQuery("ALTER EXTENSION pxf UPDATE TO '2.1'");
+        
regress.runSqlTest("features/extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade");
     }
-
 }
diff --git 
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfFdwExtensionTest.java
 
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfFdwExtensionTest.java
index b937c321..27f07510 100644
--- 
a/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfFdwExtensionTest.java
+++ 
b/automation/src/test/java/org/apache/cloudberry/pxf/automation/features/extension/PxfFdwExtensionTest.java
@@ -1,64 +1,85 @@
 package org.apache.cloudberry.pxf.automation.features.extension;
 
-import org.apache.cloudberry.pxf.automation.BaseFunctionality;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.cloudberry.pxf.automation.AbstractTestcontainersTest;
+import org.apache.cloudberry.pxf.automation.applications.CloudberryApplication;
 import org.testng.annotations.Test;
 
-public class PxfFdwExtensionTest extends BaseFunctionality {
+public class PxfFdwExtensionTest extends AbstractTestcontainersTest {
+
+    private CloudberryApplication extensionDb;
 
     @Override
-    public void beforeClass() throws Exception {
-        super.beforeClass();
-        gpdb.dropDataBase("pxfautomation_extension", true, true);
-        gpdb.createDataBase("pxfautomation_extension", false);
-        gpdb.setDb("pxfautomation_extension");
-        gpdb.connectToDataBase("pxfautomation_extension");
+    protected void beforeClass() throws Exception {
+        // pxf_regress scripts run "\c pxfautomation_extension", so the 
database must exist in the container.
+        cloudberry.dropDatabase("pxfautomation_extension");
+        cloudberry.createDatabase("pxfautomation_extension");
+
+        extensionDb = new CloudberryApplication(container, 
"pxfautomation_extension");
+        extensionDb.connect();
     }
 
     @Override
-    public void afterClass() throws Exception {
-        gpdb.connectToDataBase("pxfautomation");
-        gpdb.dropDataBase("pxfautomation_extension", true, true);
-        super.afterClass();
+    protected void afterClass() throws Exception {
+        if (extensionDb != null) {
+            extensionDb.close();
+        }
+        cloudberry.dropDatabase("pxfautomation_extension");
     }
 
     @Override
-    public void beforeMethod() throws Exception {
-        gpdb.setDb("pxfautomation_extension");
-        gpdb.connectToDataBase("pxfautomation_extension");
-        gpdb.runQuery("DROP EXTENSION IF EXISTS pxf_fdw CASCADE", true, false);
+    protected void beforeMethod() throws Exception {
+        extensionDb.runQuery("DROP EXTENSION IF EXISTS pxf_fdw CASCADE", true);
     }
 
-    @Test(groups = {"pxfFdwExtensionVersion2"})
+    @Test(groups = {"testcontainers", "pxf-fdw-extension"})
     public void testPxfCreateExtension() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf_fdw");
-        runSqlTest("features/fdw_extension_tests/create_extension");
+        extensionDb.runQuery("CREATE EXTENSION pxf_fdw VERSION '2.0'");
+        regress.runSqlTest("features/fdw_extension_tests/create_extension");
     }
 
-    @Test(groups = {"pxfFdwExtensionVersion1"})
+    @Test(groups = {"testcontainers", "pxf-fdw-extension"})
     public void testPxfCreateExtensionOldRPM() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf_fdw");
-        runSqlTest("features/fdw_extension_tests/create_extension_rpm");
+        extensionDb.runQuery("CREATE EXTENSION pxf_fdw VERSION '1.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/create_extension_rpm");
     }
 
-    @Test(groups = {"pxfFdwExtensionVersion2"})
+    @Test(groups = {"testcontainers", "pxf-fdw-extension"})
     public void testPxfUpgrade() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf_fdw VERSION '1.0'");
-        
runSqlTest("features/fdw_extension_tests/upgrade/step_1_create_extension_with_older_pxf_version");
+        extensionDb.runQuery("CREATE EXTENSION pxf_fdw VERSION '1.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/upgrade/step_1_create_extension_with_older_pxf_version");
 
-        gpdb.runQuery("ALTER EXTENSION pxf_fdw UPDATE");
-        
runSqlTest("features/fdw_extension_tests/upgrade/step_2_after_alter_extension");
+        extensionDb.runQuery("ALTER EXTENSION pxf_fdw UPDATE TO '2.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/upgrade/step_2_after_alter_extension");
     }
 
-    @Test(groups = {"pxfFdwExtensionVersion2"})
+    @Test(groups = {"testcontainers", "pxf-fdw-extension"})
     public void testPxfDowngradeThenUpgradeAgain() throws Exception {
-        gpdb.runQuery("CREATE EXTENSION pxf_fdw");
-        
runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_1_check_extension");
+        extensionDb.runQuery("CREATE EXTENSION pxf_fdw VERSION '2.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_1_check_extension");
 
-        gpdb.runQuery("ALTER EXTENSION pxf_fdw UPDATE TO '1.0'");
-        
runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade");
+        extensionDb.runQuery("ALTER EXTENSION pxf_fdw UPDATE TO '1.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_2_after_alter_extension_downgrade");
 
-        gpdb.runQuery("ALTER EXTENSION pxf_fdw UPDATE TO '2.0'");
-        
runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade");
+        extensionDb.runQuery("ALTER EXTENSION pxf_fdw UPDATE TO '2.0'");
+        
regress.runSqlTest("features/fdw_extension_tests/downgrade_then_upgrade/step_3_after_alter_extension_upgrade");
     }
-
 }
diff --git a/ci/docker/pxf-cbdb-dev/common/script/run_tests.sh 
b/ci/docker/pxf-cbdb-dev/common/script/run_tests.sh
index 5e78d40e..2bca3ce8 100755
--- a/ci/docker/pxf-cbdb-dev/common/script/run_tests.sh
+++ b/ci/docker/pxf-cbdb-dev/common/script/run_tests.sh
@@ -408,43 +408,6 @@ gpdb_test() {
   echo "[run_tests] GROUP=gpdb $extra_args finished"
 }
 
-pxf_extension_test(){
-  local sudo_cmd=""
-  if [ "$(id -u)" -ne 0 ]; then
-    sudo_cmd="sudo -n"
-  fi
-  local extension_dir="${GPHOME}/share/postgresql/extension"
-  local pxf_fdw_control="${extension_dir}/pxf_fdw.control"
-  if [ -d "${REPO_ROOT}/fdw" ] && [ -d "${extension_dir}" ]; then
-    for sql in pxf_fdw--2.0.sql pxf_fdw--1.0--2.0.sql pxf_fdw--2.0--1.0.sql; do
-      if [ -f "${REPO_ROOT}/fdw/${sql}" ]; then
-        ${sudo_cmd} cp -f "${REPO_ROOT}/fdw/${sql}" "${extension_dir}/${sql}"
-      fi
-    done
-  fi
-
-  set_pxf_fdw_default_version() {
-    local version="$1"
-    if [ -f "${pxf_fdw_control}" ]; then
-      ${sudo_cmd} sed -i "s/^default_version = '.*'/default_version = 
'${version}'/" "${pxf_fdw_control}"
-    fi
-  }
-
-  set_pxf_fdw_default_version "2.0"
-  make GROUP="pxfExtensionVersion2" || true
-  save_test_reports "pxfExtensionVersion2"
-  make GROUP="pxfExtensionVersion2_1" || true
-  save_test_reports "pxfExtensionVersion2_1"
-
-  set_pxf_fdw_default_version "1.0"
-  make GROUP="pxfFdwExtensionVersion1" || true
-  save_test_reports "pxfFdwExtensionVersion1"
-
-  set_pxf_fdw_default_version "2.0"
-  make GROUP="pxfFdwExtensionVersion2" || true
-  save_test_reports "pxfFdwExtensionVersion2"
-}
-
 bench_prepare_env() {
   export HADOOP_HEAPSIZE=${HADOOP_HEAPSIZE:-2048}
   export JAVA_HOME="${JAVA_HADOOP}"
@@ -541,7 +504,7 @@ generate_test_summary() {
 
     local group=$(basename "$group_dir")
     # Skip if it's not a test group directory
-    [[ "$group" =~ 
^(smoke|hcatalog|hcfs|hdfs|hive|gpdb|sanity|hbase|profile|jdbc|proxy|unused|features|load|performance|pxfExtensionVersion2|pxfExtensionVersion2_1|pxfFdwExtensionVersion1|pxfFdwExtensionVersion2|fdw|gpdb_fdw)$
 ]] || continue
+    [[ "$group" =~ 
^(smoke|hcatalog|hcfs|hdfs|hive|gpdb|sanity|hbase|profile|jdbc|proxy|unused|features|load|performance|fdw|gpdb_fdw)$
 ]] || continue
 
     echo "Processing $group test reports from $group_dir"
 
@@ -705,9 +668,6 @@ run_single_group() {
     gpdb)
       gpdb_test "false"
       ;;
-    pxf_extension)
-      pxf_extension_test
-      ;;
     load)
       bench_prepare_env
       load_test
@@ -729,7 +689,7 @@ run_single_group() {
       ;;
     *)
       echo "Unknown test group: $group"
-      echo "Available groups: cli, external-table, fdw, server, sanity, smoke, 
hdfs, hcatalog, hcfs, hive, hbase, profile, jdbc, proxy, unused, features, 
gpdb, gpdb_fdw, load, performance, bench, pxf_extension"
+      echo "Available groups: cli, external-table, fdw, server, sanity, smoke, 
hdfs, hcatalog, hcfs, hive, hbase, profile, jdbc, proxy, unused, features, 
gpdb, gpdb_fdw, load, performance, bench"
       exit 1
       ;;
   esac


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to