"""Legacy route entry points participate in the durable generation fence.""" from sqlalchemy.orm import Session from modelforge_api.domain.serving import CapabilityPromotionCreate from modelforge_api.persistence.models import CapabilityContract from tests.test_serving import approve_and_promote, session, setup_m5 __all__ = ["session"] def test_first_promotion_and_repeated_drain_do_not_allow_generation_reuse(session: Session): service, candidate, _ = setup_m5(session) approval, deployment = approve_and_promote(service, candidate.id) contract = session.get(CapabilityContract, approval.capability_contract_id) assert contract.serving_generation == deployment.route_generation == 1 replay = service.promote(candidate.id, CapabilityPromotionCreate( production_approval_id=approval.id, keep_warm_seconds=900)) assert replay.id == deployment.id and contract.serving_generation == 1 service.request_unload(deployment.id) assert contract.serving_generation == 1 service.request_unload(deployment.id, drain=True) assert contract.serving_generation == 2 service.request_unload(deployment.id, drain=True) assert contract.serving_generation == 2 replacement = service.promote(candidate.id, CapabilityPromotionCreate( production_approval_id=approval.id, keep_warm_seconds=901)) assert replacement.id != deployment.id and contract.serving_generation == replacement.route_generation == 3