인메모리 _used_jti set은 컨테이너 재시작 시 비워져 TTL 내 토큰 replay가 가능했음(webhook 배포가 잦아 실재 구멍). 영속 볼륨(PACK_BASE_DIR)의 jti_store.db에 사용 jti를 기록(PK 원자성), 만료 항목은 lazy 정리. verify_upload_token이 jti_store.consume 사용. TDD 3 + 기존 replay 테스트 보존. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
24 lines
993 B
Python
24 lines
993 B
Python
"""packs-lab 테스트 공통 fixture."""
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _hmac_secret(monkeypatch):
|
|
"""모든 테스트에서 동일한 HMAC secret 사용. auth._SECRET 모듈 캐시까지 갱신.
|
|
|
|
test_auth.py / test_routes.py 모두 모듈 레벨에서 동일한 값을 os.environ에
|
|
직접 세팅하므로 여기서도 같은 값을 사용해 충돌 없이 일관성을 보장한다.
|
|
"""
|
|
secret = "test-secret-32-bytes-XXXXXXXXXXXX"
|
|
monkeypatch.setenv("BACKEND_HMAC_SECRET", secret)
|
|
# auth.py 모듈은 import 시점에 _SECRET을 캐시하므로 monkeypatch로 함께 갱신
|
|
from app import auth
|
|
monkeypatch.setattr(auth, "_SECRET", secret)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _isolate_jti_db(tmp_path, monkeypatch):
|
|
"""jti 영속 저장소를 테스트별 tmp 파일로 격리 (verify_upload_token이 consume하므로)."""
|
|
from app import jti_store
|
|
monkeypatch.setattr(jti_store, "JTI_DB_PATH", str(tmp_path / "jti.db"))
|