File size: 1,966 Bytes
51ff9e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import httpx

from openhands.utils.ensure_httpx_close import ensure_httpx_close


def test_ensure_httpx_close_basic():
    """Test basic functionality of ensure_httpx_close."""
    ctx = ensure_httpx_close()
    with ctx:
        # Create a client - should be tracked
        client = httpx.Client()

    # After context exit, client should be closed
    assert client.is_closed


def test_ensure_httpx_close_multiple_clients():
    """Test ensure_httpx_close with multiple clients."""
    ctx = ensure_httpx_close()
    with ctx:
        client1 = httpx.Client()
        client2 = httpx.Client()

    assert client1.is_closed
    assert client2.is_closed


def test_ensure_httpx_close_nested():
    """Test nested usage of ensure_httpx_close."""
    with ensure_httpx_close():
        client1 = httpx.Client()

        with ensure_httpx_close():
            client2 = httpx.Client()
            assert not client2.is_closed

        # After inner context, client2 should be closed
        assert client2.is_closed
        # client1 should still be open since outer context is still active
        assert not client1.is_closed

    # After outer context, both clients should be closed
    assert client1.is_closed
    assert client2.is_closed


def test_ensure_httpx_close_exception():
    """Test ensure_httpx_close when an exception occurs."""
    client = None
    try:
        with ensure_httpx_close():
            client = httpx.Client()
            raise ValueError('Test exception')
    except ValueError:
        pass

    # Client should be closed even if an exception occurred
    assert client is not None
    assert client.is_closed


def test_ensure_httpx_close_restore_client():
    """Test that the original client is restored after context exit."""
    original_client = httpx.Client
    with ensure_httpx_close():
        assert httpx.Client != original_client

    # Original __init__ should be restored
    assert httpx.Client == original_client