@@ -18,6 +18,7 @@ def __init__(
1818 vm : Machine ,
1919 extension_name : str ,
2020 versions : Versions ,
21+ sql_test_dir : Path ,
2122 support_upgrade : bool = True ,
2223 ):
2324 """Initialize the PostgreSQL extension test framework.
@@ -26,12 +27,14 @@ def __init__(
2627 vm: Test machine instance for executing commands
2728 extension_name: Name of the PostgreSQL extension to test
2829 versions: Mapping of PostgreSQL versions to available extension versions
30+ sql_test_dir: Directory containing SQL test files for pg_regress
2931 support_upgrade: Whether the extension supports in-place upgrades
3032 """
3133 self .vm = vm
3234 self .extension_name = extension_name
3335 self .versions = versions
3436 self .support_upgrade = support_upgrade
37+ self .sql_test_dir = sql_test_dir
3538
3639 def run_sql (self , query : str ) -> str :
3740 return self .vm .succeed (
@@ -101,9 +104,9 @@ def check_upgrade_path(self, pg_version: str):
101104 )
102105
103106 # Install and verify first version
104- firstVersion = available_versions [0 ]
107+ first_version = available_versions [0 ]
105108 self .drop_extension ()
106- self .install_extension (firstVersion )
109+ self .install_extension (first_version )
107110
108111 # Test remaining versions
109112 for version in available_versions [1 :]:
@@ -160,10 +163,41 @@ def check_switch_extension_with_background_worker(
160163 f"{ first_version } .so"
161164 ), f"Expected { self .extension_name } version { first_version } , but found { ext_version } "
162165
163- # Switch to the first version
166+ # Switch to the last version
164167 self .vm .succeed (f"switch_{ self .extension_name } _version { last_version } " )
165168 # Check that we are using the last version now
166169 ext_version = self .vm .succeed (f"readlink -f { extension_lib_path } " ).strip ()
167170 assert ext_version .endswith (
168171 f"{ last_version } .so"
169172 ), f"Expected { self .extension_name } version { last_version } , but found { ext_version } "
173+
174+ def check_pg_regress (self , pg_regress : Path , pg_version : str , test_name : str ):
175+ """Run pg_regress tests for the extension on a given PostgreSQL version.
176+
177+ Args:
178+ pg_regress: Path to the pg_regress binary
179+ pg_version: PostgreSQL version to test (e.g., "14", "15")
180+ test_name: SQL test file to run with pg_regress
181+ """
182+ sql_file = self .sql_test_dir / "sql" / f"{ test_name } .sql"
183+ if not sql_file .exists ():
184+ # check if we have a postgres version specific sql file
185+ test_name = f"z_{ pg_version } _{ test_name } "
186+ sql_file = self .sql_test_dir / "sql" / f"{ test_name } .sql"
187+ if not sql_file .exists ():
188+ print (f"Skipping pg_regress test for { pg_version } , no sql file found" )
189+ return
190+ try :
191+ print (
192+ self .vm .succeed (
193+ f"""sudo -u postgres { pg_regress } --inputdir={ self .sql_test_dir } --debug --use-existing --dbname=postgres --outputdir=/tmp/regression_output_{ pg_version } "{ test_name } " """
194+ )
195+ )
196+ except :
197+ print ("Error running pg_regress, diff:" )
198+ print (
199+ self .vm .succeed (
200+ f"cat /tmp/regression_output_{ pg_version } /regression.diffs"
201+ )
202+ )
203+ raise
0 commit comments