mirror of
https://github.com/esphome/esphome.git
synced 2026-09-24 13:34:07 +00:00
Merge branch 'pch-strict-ci' into host-pch
This commit is contained in:
@@ -264,3 +264,48 @@ def test_pch_strict_rejects_unrecognized_values(
|
||||
monkeypatch.setenv("ESPHOME_PCH_STRICT", "yolo")
|
||||
with pytest.raises(EsphomeError, match="Unrecognized ESPHOME_PCH_STRICT"):
|
||||
pch.pch_strict()
|
||||
|
||||
|
||||
def test_discard_pch_raises_when_gch_survives(
|
||||
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""A .gch an unlink failure leaves behind would be consumed silently."""
|
||||
from pathlib import Path as _P
|
||||
|
||||
from esphome.core import EsphomeError
|
||||
|
||||
(tmp_path / "esphome_pch.h").write_text("")
|
||||
gch = tmp_path / "esphome_pch.h.gch"
|
||||
gch.write_bytes(b"gch")
|
||||
real_unlink = _P.unlink
|
||||
|
||||
def failing_unlink(self, missing_ok=False):
|
||||
if self.name.endswith(".gch"):
|
||||
raise OSError("readonly")
|
||||
return real_unlink(self, missing_ok=missing_ok)
|
||||
|
||||
monkeypatch.setattr(_P, "unlink", failing_unlink)
|
||||
with pytest.raises(EsphomeError, match="Could not discard"):
|
||||
pch.discard_pch(tmp_path)
|
||||
|
||||
|
||||
def test_discard_pch_warns_when_only_sidecar_unlink_fails(
|
||||
tmp_path: Path,
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
from pathlib import Path as _P
|
||||
|
||||
(tmp_path / "esphome_pch.h").write_text("")
|
||||
(tmp_path / "esphome_pch.h.gch").write_bytes(b"gch")
|
||||
(tmp_path / "esphome_pch.h.gch.sum").write_text("x")
|
||||
real_unlink = _P.unlink
|
||||
|
||||
def failing_unlink(self, missing_ok=False):
|
||||
if self.name.endswith(".sum"):
|
||||
raise OSError("readonly")
|
||||
return real_unlink(self, missing_ok=missing_ok)
|
||||
|
||||
monkeypatch.setattr(_P, "unlink", failing_unlink)
|
||||
pch.discard_pch(tmp_path)
|
||||
assert "Could not discard the pch sidecars" in caplog.text
|
||||
|
||||
@@ -669,12 +669,12 @@ def test_get_core_framework_version_from_core_data():
|
||||
assert toolchain._get_core_framework_version() == "5.5.4"
|
||||
|
||||
|
||||
def test_run_compile_logs_failed_pch_discard(
|
||||
setup_core: Path,
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
def test_run_compile_aborts_when_stale_pch_survives_discard(
|
||||
setup_core: Path, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""A discard failure in the catch-all must be visible, not silent."""
|
||||
"""An undiscardable stale .gch means silently wrong output: abort."""
|
||||
from esphome.core import EsphomeError
|
||||
|
||||
monkeypatch.setenv("ESPHOME_PCH_ENABLE", "1")
|
||||
_setup_build(setup_core)
|
||||
|
||||
@@ -683,10 +683,13 @@ def test_run_compile_logs_failed_pch_discard(
|
||||
patch.object(toolchain, "run_idf_py", return_value=0),
|
||||
patch.object(toolchain, "print_summary"),
|
||||
patch("esphome.build_gen.espidf.prepare_pch", side_effect=RuntimeError("boom")),
|
||||
patch("esphome.build_gen.espidf.discard_pch", side_effect=OSError("readonly")),
|
||||
patch(
|
||||
"esphome.build_gen.espidf.discard_pch",
|
||||
side_effect=EsphomeError("Could not discard the stale precompiled header"),
|
||||
),
|
||||
pytest.raises(EsphomeError, match="Could not discard"),
|
||||
):
|
||||
assert toolchain.run_compile({CONF_ESPHOME: {}}, verbose=False) == 0
|
||||
assert "Could not discard the stale pch" in caplog.text
|
||||
toolchain.run_compile({CONF_ESPHOME: {}}, verbose=False)
|
||||
|
||||
|
||||
def test_run_compile_strict_reraises_pch_failure(
|
||||
|
||||
Reference in New Issue
Block a user