22
33import sys
44import time
5- import pathlib
65import threading
76import typing as t
87import unittest
@@ -86,7 +85,7 @@ def run_tests(
8685 model_test_metadata : list [ModelTestMetadata ],
8786 models : UniqueKeyDict [str , Model ],
8887 config : C ,
89- gateway : t . Optional [ str ] = None ,
88+ default_gateway : str ,
9089 dialect : str | None = None ,
9190 verbosity : Verbosity = Verbosity .DEFAULT ,
9291 preserve_fixtures : bool = False ,
@@ -102,8 +101,6 @@ def run_tests(
102101 verbosity: The verbosity level.
103102 preserve_fixtures: Preserve the fixture tables in the testing database, useful for debugging.
104103 """
105- default_gateway = gateway or config .default_gateway_name
106-
107104 default_test_connection = config .get_test_connection (
108105 gateway_name = default_gateway ,
109106 default_catalog = default_catalog ,
@@ -128,34 +125,40 @@ def run_tests(
128125
129126 def _run_single_test (
130127 metadata : ModelTestMetadata , engine_adapter : EngineAdapter
131- ) -> ModelTextTestResult :
132- test = ModelTest .create_test (
133- body = metadata .body ,
134- test_name = metadata .test_name ,
135- models = models ,
136- engine_adapter = engine_adapter ,
137- dialect = dialect ,
138- path = metadata .path ,
139- default_catalog = default_catalog ,
140- preserve_fixtures = preserve_fixtures ,
141- )
128+ ) -> t .Optional [ModelTextTestResult ]:
129+ result : t .Optional [ModelTextTestResult ] = None
130+ try :
131+ test = ModelTest .create_test (
132+ body = metadata .body ,
133+ test_name = metadata .test_name ,
134+ models = models ,
135+ engine_adapter = engine_adapter ,
136+ dialect = dialect ,
137+ path = metadata .path ,
138+ default_catalog = default_catalog ,
139+ preserve_fixtures = preserve_fixtures ,
140+ )
142141
143- result = t .cast (
144- ModelTextTestResult ,
145- ModelTextTestRunner ().run (t .cast (unittest .TestCase , test )),
146- )
142+ result = t .cast (
143+ ModelTextTestResult ,
144+ ModelTextTestRunner ().run (t .cast (unittest .TestCase , test )),
145+ )
146+
147+ with lock :
148+ if result .successes :
149+ combined_results .addSuccess (result .successes [0 ])
150+ elif result .errors :
151+ combined_results .addError (result .original_err [0 ], result .original_err [1 ])
152+ elif result .failures :
153+ combined_results .addFailure (result .original_err [0 ], result .original_err [1 ])
154+ elif result .skipped :
155+ skipped_args = result .skipped [0 ]
156+ combined_results .addSkip (skipped_args [0 ], skipped_args [1 ])
147157
148- with lock :
149- if result .successes :
150- combined_results .addSuccess (result .successes [0 ])
151- elif result .errors :
152- combined_results .addError (result .original_err [0 ], result .original_err [1 ])
153- elif result .failures :
154- combined_results .addFailure (result .original_err [0 ], result .original_err [1 ])
155- elif result .skipped :
156- skipped_args = result .skipped [0 ]
157- combined_results .addSkip (skipped_args [0 ], skipped_args [1 ])
158- return result
158+ combined_results .testsRun += 1
159+
160+ finally :
161+ return result
159162
160163 test_results = []
161164
@@ -180,57 +183,6 @@ def _run_single_test(
180183
181184 end_time = time .perf_counter ()
182185
183- combined_results .testsRun = len (test_results )
184-
185186 combined_results .log_test_report (test_duration = end_time - start_time )
186187
187188 return combined_results
188-
189-
190- def run_model_tests (
191- tests : list [str ],
192- models : UniqueKeyDict [str , Model ],
193- config : C ,
194- gateway : t .Optional [str ] = None ,
195- dialect : str | None = None ,
196- verbosity : Verbosity = Verbosity .DEFAULT ,
197- patterns : list [str ] | None = None ,
198- preserve_fixtures : bool = False ,
199- stream : t .TextIO | None = None ,
200- default_catalog : t .Optional [str ] = None ,
201- default_catalog_dialect : str = "" ,
202- ) -> ModelTextTestResult :
203- """Load and run tests.
204-
205- Args:
206- tests: A list of tests to run, e.g. [tests/test_orders.yaml::test_single_order]
207- models: All models to use for expansion and mapping of physical locations.
208- verbosity: The verbosity level.
209- patterns: A list of patterns to match against.
210- preserve_fixtures: Preserve the fixture tables in the testing database, useful for debugging.
211- """
212- loaded_tests = []
213- for test in tests :
214- filename , test_name = test .split ("::" , maxsplit = 1 ) if "::" in test else (test , "" )
215- path = pathlib .Path (filename )
216-
217- if test_name :
218- loaded_tests .append (load_model_test_file (path , variables = config .variables )[test_name ])
219- else :
220- loaded_tests .extend (load_model_test_file (path , variables = config .variables ).values ())
221-
222- if patterns :
223- loaded_tests = filter_tests_by_patterns (loaded_tests , patterns )
224-
225- return run_tests (
226- loaded_tests ,
227- models ,
228- config ,
229- gateway = gateway ,
230- dialect = dialect ,
231- verbosity = verbosity ,
232- preserve_fixtures = preserve_fixtures ,
233- stream = stream ,
234- default_catalog = default_catalog ,
235- default_catalog_dialect = default_catalog_dialect ,
236- )
0 commit comments