Fix caplog-based assertion flaking under xdist ordering
This commit is contained in:
parent
ddcc4518ad
commit
0ffca7727c
1 changed files with 20 additions and 4 deletions
|
|
@ -344,7 +344,7 @@ async def test_rebuild_title_only_handles_llm_failure(temp_db_path, monkeypatch)
|
||||||
|
|
||||||
@pytest.mark.vcr()
|
@pytest.mark.vcr()
|
||||||
async def test_rebuild_full_source_failure_is_logged_and_skipped(
|
async def test_rebuild_full_source_failure_is_logged_and_skipped(
|
||||||
temp_db_path, monkeypatch, caplog
|
temp_db_path, monkeypatch
|
||||||
):
|
):
|
||||||
"""FULL rebuild logs-and-continues when re-ingesting from source fails.
|
"""FULL rebuild logs-and-continues when re-ingesting from source fails.
|
||||||
|
|
||||||
|
|
@ -354,6 +354,8 @@ async def test_rebuild_full_source_failure_is_logged_and_skipped(
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from haiku.rag.client import rebuild as rebuild_module
|
||||||
|
|
||||||
async with HaikuRAG(temp_db_path, create=True) as client:
|
async with HaikuRAG(temp_db_path, create=True) as client:
|
||||||
with tempfile.TemporaryDirectory() as temp_dir:
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||||||
source_path = Path(temp_dir) / "source.txt"
|
source_path = Path(temp_dir) / "source.txt"
|
||||||
|
|
@ -369,16 +371,30 @@ async def test_rebuild_full_source_failure_is_logged_and_skipped(
|
||||||
|
|
||||||
monkeypatch.setattr(client, "create_document_from_source", failing_create)
|
monkeypatch.setattr(client, "create_document_from_source", failing_create)
|
||||||
|
|
||||||
with caplog.at_level(logging.ERROR, logger="haiku.rag.client.rebuild"):
|
# Attach directly to the rebuild module's logger rather than
|
||||||
|
# relying on caplog — `haiku.rag.logging.get_logger()` (invoked
|
||||||
|
# by other tests) sets `propagate=False` on the `haiku.rag`
|
||||||
|
# logger, which breaks caplog under xdist ordering.
|
||||||
|
records: list[logging.LogRecord] = []
|
||||||
|
|
||||||
|
class _ListHandler(logging.Handler):
|
||||||
|
def emit(self, record: logging.LogRecord) -> None:
|
||||||
|
records.append(record)
|
||||||
|
|
||||||
|
handler = _ListHandler(level=logging.ERROR)
|
||||||
|
rebuild_module.logger.addHandler(handler)
|
||||||
|
try:
|
||||||
processed_ids = [
|
processed_ids = [
|
||||||
doc_id
|
doc_id
|
||||||
async for doc_id in client.rebuild_database(mode=RebuildMode.FULL)
|
async for doc_id in client.rebuild_database(mode=RebuildMode.FULL)
|
||||||
]
|
]
|
||||||
|
finally:
|
||||||
|
rebuild_module.logger.removeHandler(handler)
|
||||||
|
|
||||||
assert processed_ids == []
|
assert processed_ids == []
|
||||||
assert any(
|
assert any(
|
||||||
"Error recreating document from source" in rec.message
|
"Error recreating document from source" in rec.getMessage()
|
||||||
for rec in caplog.records
|
for rec in records
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue