Skip to content

Commit f3ca4da

Browse files
fix: surface seed and init failures instead of swallowing them (#938)
1 parent f0307f3 commit f3ca4da

3 files changed

Lines changed: 52 additions & 6 deletions

File tree

integration_tests/tests/conftest.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import pytest
77
import yaml
88
from dbt.version import __version__ as dbt_version
9-
from dbt_project import DbtProject
9+
from dbt_project import PYTEST_XDIST_WORKER, SCHEMA_NAME_SUFFIX, DbtProject
1010
from elementary.clients.dbt.factory import RunnerMethod
1111
from env import Environment
1212
from logger import get_logger
@@ -90,10 +90,17 @@ def init_tests_env(
9090
):
9191
env = Environment(target, project_dir_copy, runner_method)
9292
if not skip_init:
93-
logger.info("Initializing test environment")
93+
logger.info(
94+
"Initializing test environment (worker=%s, schema_suffix='%s')",
95+
PYTEST_XDIST_WORKER or "main",
96+
SCHEMA_NAME_SUFFIX,
97+
)
9498
env.clear()
9599
env.init()
96-
logger.info("Initialization complete")
100+
logger.info(
101+
"Initialization complete (worker=%s)",
102+
PYTEST_XDIST_WORKER or "main",
103+
)
97104

98105
yield
99106

integration_tests/tests/data_seeder.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,21 @@ def seed(self, data: List[dict], table_name: str) -> Generator[None, None, None]
2929
writer.writeheader()
3030
writer.writerows(data)
3131
seed_file.flush()
32-
self.dbt_runner.seed(select=str(relative_seed_path), full_refresh=True)
32+
success = self.dbt_runner.seed(
33+
select=str(relative_seed_path), full_refresh=True
34+
)
35+
if not success:
36+
logger.error(
37+
"dbt seed failed for '%s'. This usually means the "
38+
"target schema does not exist or could not be created. "
39+
"Downstream queries will fail with "
40+
"TABLE_OR_VIEW_NOT_FOUND.",
41+
table_name,
42+
)
43+
raise RuntimeError(
44+
f"dbt seed failed for '{table_name}'. Check the dbt "
45+
f"output above for the root cause (e.g. SCHEMA_NOT_FOUND)."
46+
)
3347

3448
yield
3549
finally:

integration_tests/tests/env.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import dbt_project
44
from elementary.clients.dbt.factory import RunnerMethod
5+
from logger import get_logger
6+
7+
logger = get_logger(__name__)
58

69

710
class Environment:
@@ -22,5 +25,27 @@ def clear(self):
2225
self.dbt_runner.run_operation("elementary_tests.clear_env")
2326

2427
def init(self):
25-
self.dbt_runner.run(selector="init")
26-
self.dbt_runner.run(select="elementary")
28+
init_success = self.dbt_runner.run(selector="init")
29+
if not init_success:
30+
logger.error(
31+
"Environment init failed: 'dbt run --selector init' returned "
32+
"failure. The target schema may not have been created. "
33+
"Subsequent seeds and queries will likely fail with "
34+
"SCHEMA_NOT_FOUND or TABLE_OR_VIEW_NOT_FOUND."
35+
)
36+
raise RuntimeError(
37+
"Test environment initialization failed during "
38+
"'dbt run --selector init'. Check the dbt output above "
39+
"for the root cause."
40+
)
41+
elementary_success = self.dbt_runner.run(select="elementary")
42+
if not elementary_success:
43+
logger.error(
44+
"Environment init failed: 'dbt run --select elementary' "
45+
"returned failure. Elementary models may not be available."
46+
)
47+
raise RuntimeError(
48+
"Test environment initialization failed during "
49+
"'dbt run --select elementary'. Check the dbt output "
50+
"above for the root cause."
51+
)

0 commit comments

Comments
 (0)