make concurrent
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
@@ -74,6 +75,33 @@ async def test_runs_non_executable_shell_script_from_bind_mount(tmp_path) -> Non
|
||||
assert (workspace / "selected").read_text() == "mounted\n"
|
||||
|
||||
|
||||
async def test_serializes_concurrent_preparation(tmp_path, monkeypatch) -> None:
|
||||
development = environment(tmp_path, ["shared"])
|
||||
script(development.scripts_dir / "shared", "true")
|
||||
started = asyncio.Event()
|
||||
release = asyncio.Event()
|
||||
active = 0
|
||||
maximum_active = 0
|
||||
|
||||
async def run(*_args) -> None:
|
||||
nonlocal active, maximum_active
|
||||
active += 1
|
||||
maximum_active = max(maximum_active, active)
|
||||
started.set()
|
||||
await release.wait()
|
||||
active -= 1
|
||||
|
||||
monkeypatch.setattr(development, "_run", run)
|
||||
first = asyncio.create_task(development.prepare(tmp_path / "first"))
|
||||
await started.wait()
|
||||
second = asyncio.create_task(development.prepare(tmp_path / "second"))
|
||||
await asyncio.sleep(0)
|
||||
release.set()
|
||||
await asyncio.gather(first, second)
|
||||
|
||||
assert maximum_active == 1
|
||||
|
||||
|
||||
async def test_reports_script_failure_output(tmp_path) -> None:
|
||||
workspace = tmp_path / "workspace"
|
||||
workspace.mkdir()
|
||||
|
||||
Reference in New Issue
Block a user