File size: 1,508 Bytes
31c8075
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import time

from arena.sandbox_lease import SandboxLeaseManager, sandbox_ttl_seconds_from_env


def test_sandbox_lease_closes_resource_after_idle_ttl() -> None:
    closed: list[str] = []
    expired: list[str] = []
    leases = SandboxLeaseManager(ttl_seconds=0.01)

    leases.start("lease-1", lambda: closed.append("lease-1"), on_expire=lambda: expired.append("lease-1"))

    deadline = time.time() + 1
    while time.time() < deadline and not closed:
        time.sleep(0.01)

    assert closed == ["lease-1"]
    assert expired == ["lease-1"]


def test_sandbox_lease_touch_resets_idle_ttl() -> None:
    closed: list[str] = []
    leases = SandboxLeaseManager(ttl_seconds=0.06)

    leases.start("lease-1", lambda: closed.append("lease-1"))
    time.sleep(0.03)
    assert leases.touch("lease-1") is True
    time.sleep(0.04)
    assert closed == []

    deadline = time.time() + 1
    while time.time() < deadline and not closed:
        time.sleep(0.01)

    assert closed == ["lease-1"]


def test_sandbox_lease_close_is_idempotent() -> None:
    closed: list[str] = []
    leases = SandboxLeaseManager(ttl_seconds=60)

    leases.start("lease-1", lambda: closed.append("lease-1"))

    assert leases.close("lease-1") is True
    assert leases.close("lease-1") is False
    assert closed == ["lease-1"]


def test_sandbox_ttl_env_falls_back_on_invalid_value(monkeypatch) -> None:
    monkeypatch.setenv("DEEPAGENT_SANDBOX_TTL_SECONDS", "bad")

    assert sandbox_ttl_seconds_from_env() == 30 * 60