28 lines
1.4 KiB
Python
28 lines
1.4 KiB
Python
"""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
|