fix(test): use tmp_path for full-stack invariant test (Windows CI)
`test_fresh_palace_via_full_stack_gets_cosine` used `tempfile.Temporary-
Directory()` as a context manager, which tries to delete the temp path
on exit. On Windows, ChromaDB still holds SQLite file handles to
`chroma.sqlite3` when the context closes, producing:
PermissionError: [WinError 32] The process cannot access the file
because it is being used by another process: '...\\chroma.sqlite3'
NotADirectoryError: [WinError 267] The directory name is invalid
Other tests in the same file use pytest's `tmp_path` fixture, which
defers cleanup to session end (when the process is exiting and the
file-lock contention is moot). Align this one with the rest of the
file.
CLAUDE.md already documents the 80% Windows coverage allowance due to
"ChromaDB file lock cleanup" — the fix is to stop fighting the lock.
This commit is contained in:
@@ -12,8 +12,6 @@ This test file locks the invariant so a future refactor that drops the
|
|||||||
gets caught at test time rather than silently degrading search quality.
|
gets caught at test time rather than silently degrading search quality.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from mempalace.backends.chroma import ChromaBackend
|
from mempalace.backends.chroma import ChromaBackend
|
||||||
from mempalace.palace import get_collection
|
from mempalace.palace import get_collection
|
||||||
|
|
||||||
@@ -70,13 +68,20 @@ def test_reopening_cosine_palace_preserves_metric(tmp_path):
|
|||||||
_assert_cosine(col, "re-opened palace")
|
_assert_cosine(col, "re-opened palace")
|
||||||
|
|
||||||
|
|
||||||
def test_fresh_palace_via_full_stack_gets_cosine():
|
def test_fresh_palace_via_full_stack_gets_cosine(tmp_path):
|
||||||
"""End-to-end: build a palace with the public API the way a new user
|
"""End-to-end: build a palace with the public API the way a new user
|
||||||
would, confirm the resulting collection uses cosine distance."""
|
would, confirm the resulting collection uses cosine distance.
|
||||||
with tempfile.TemporaryDirectory() as tmp:
|
|
||||||
col = get_collection(tmp, "mempalace_drawers", create=True)
|
|
||||||
_assert_cosine(col, "full-stack new palace")
|
|
||||||
|
|
||||||
# And the closets collection too
|
Uses the ``tmp_path`` fixture rather than ``tempfile.TemporaryDirectory``
|
||||||
closets = get_collection(tmp, "mempalace_closets", create=True)
|
so ChromaDB's persistent SQLite file handles aren't asked to release
|
||||||
_assert_cosine(closets, "full-stack new closets")
|
during the test body — pytest cleans the path at session end, by which
|
||||||
|
point the process is exiting and Windows' file-lock contention is
|
||||||
|
moot. Matches the cleanup strategy used by the rest of this file and
|
||||||
|
the project's 80% Windows coverage note in CLAUDE.md.
|
||||||
|
"""
|
||||||
|
col = get_collection(str(tmp_path), "mempalace_drawers", create=True)
|
||||||
|
_assert_cosine(col, "full-stack new palace")
|
||||||
|
|
||||||
|
# And the closets collection too
|
||||||
|
closets = get_collection(str(tmp_path), "mempalace_closets", create=True)
|
||||||
|
_assert_cosine(closets, "full-stack new closets")
|
||||||
|
|||||||
Reference in New Issue
Block a user