make concurrent
This commit is contained in:
+37
-4
@@ -22,14 +22,20 @@ async def storage(tmp_path: Path) -> Storage:
|
||||
return value
|
||||
|
||||
|
||||
def command(delivery: str, body: str = "/agent plan") -> CommandEvent:
|
||||
def command(
|
||||
delivery: str,
|
||||
body: str = "/agent plan",
|
||||
*,
|
||||
issue: int = 3,
|
||||
pr: int | None = None,
|
||||
) -> CommandEvent:
|
||||
return CommandEvent(
|
||||
delivery_id=delivery,
|
||||
comment_id=int(delivery.rsplit("-", 1)[-1]),
|
||||
repo_owner="alice",
|
||||
repo_name="repo",
|
||||
issue_number=3,
|
||||
pr_number=None,
|
||||
issue_number=issue,
|
||||
pr_number=pr,
|
||||
requester="alice",
|
||||
body=body,
|
||||
)
|
||||
@@ -47,7 +53,9 @@ async def test_receive_is_idempotent_without_consuming_sequence(storage: Storage
|
||||
assert second.state.receive_sequence == first.state.receive_sequence + 1
|
||||
|
||||
|
||||
async def test_received_job_blocks_later_execute_task(storage: Storage) -> None:
|
||||
async def test_received_job_blocks_later_execute_task_for_same_target(
|
||||
storage: Storage,
|
||||
) -> None:
|
||||
host = StateMachine(storage)
|
||||
first = (await host.receive(command("delivery-1"))).state
|
||||
second = (await host.receive(command("delivery-2"))).state
|
||||
@@ -61,6 +69,31 @@ async def test_received_job_blocks_later_execute_task(storage: Storage) -> None:
|
||||
assert task.job_id == second.id
|
||||
|
||||
|
||||
async def test_received_job_does_not_block_a_different_target(storage: Storage) -> None:
|
||||
host = StateMachine(storage)
|
||||
await host.receive(command("delivery-1", issue=3))
|
||||
second = (await host.receive(command("delivery-2", issue=4))).state
|
||||
await host.evolve("grant-2", PermissionGranted(job_id=second.id))
|
||||
|
||||
task = await storage.claim_task("jobs")
|
||||
|
||||
assert task is not None
|
||||
assert task.job_id == second.id
|
||||
|
||||
|
||||
async def test_claims_multiple_eligible_targets_without_duplicates(storage: Storage) -> None:
|
||||
host = StateMachine(storage)
|
||||
first = (await host.receive(command("delivery-1", issue=3))).state
|
||||
second = (await host.receive(command("delivery-2", issue=4))).state
|
||||
await host.evolve("grant-1", PermissionGranted(job_id=first.id))
|
||||
await host.evolve("grant-2", PermissionGranted(job_id=second.id))
|
||||
|
||||
claimed = [await storage.claim_task("jobs"), await storage.claim_task("jobs")]
|
||||
|
||||
assert [task.job_id for task in claimed if task is not None] == [first.id, second.id]
|
||||
assert await storage.claim_task("jobs") is None
|
||||
|
||||
|
||||
async def test_started_and_finished_timestamps_are_owned_by_store(storage: Storage) -> None:
|
||||
host = StateMachine(storage)
|
||||
state = (await host.receive(command("delivery-1"))).state
|
||||
|
||||
Reference in New Issue
Block a user