@@ -18,6 +18,7 @@ def __init__(
18
18
vm : Machine ,
19
19
extension_name : str ,
20
20
versions : Versions ,
21
+ sql_test_dir : Path ,
21
22
support_upgrade : bool = True ,
22
23
):
23
24
"""Initialize the PostgreSQL extension test framework.
@@ -26,12 +27,14 @@ def __init__(
26
27
vm: Test machine instance for executing commands
27
28
extension_name: Name of the PostgreSQL extension to test
28
29
versions: Mapping of PostgreSQL versions to available extension versions
30
+ sql_test_dir: Directory containing SQL test files for pg_regress
29
31
support_upgrade: Whether the extension supports in-place upgrades
30
32
"""
31
33
self .vm = vm
32
34
self .extension_name = extension_name
33
35
self .versions = versions
34
36
self .support_upgrade = support_upgrade
37
+ self .sql_test_dir = sql_test_dir
35
38
36
39
def run_sql (self , query : str ) -> str :
37
40
return self .vm .succeed (
@@ -101,9 +104,9 @@ def check_upgrade_path(self, pg_version: str):
101
104
)
102
105
103
106
# Install and verify first version
104
- firstVersion = available_versions [0 ]
107
+ first_version = available_versions [0 ]
105
108
self .drop_extension ()
106
- self .install_extension (firstVersion )
109
+ self .install_extension (first_version )
107
110
108
111
# Test remaining versions
109
112
for version in available_versions [1 :]:
@@ -160,10 +163,41 @@ def check_switch_extension_with_background_worker(
160
163
f"{ first_version } .so"
161
164
), f"Expected { self .extension_name } version { first_version } , but found { ext_version } "
162
165
163
- # Switch to the first version
166
+ # Switch to the last version
164
167
self .vm .succeed (f"switch_{ self .extension_name } _version { last_version } " )
165
168
# Check that we are using the last version now
166
169
ext_version = self .vm .succeed (f"readlink -f { extension_lib_path } " ).strip ()
167
170
assert ext_version .endswith (
168
171
f"{ last_version } .so"
169
172
), 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