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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
import gc
from unittest import mock
import pytest
from aiohttp.connector import Connection
@pytest.fixture
def key():
return object()
@pytest.fixture
def connector():
return mock.Mock()
@pytest.fixture
def request():
return mock.Mock()
@pytest.fixture
def transport():
return mock.Mock()
@pytest.fixture
def protocol():
return mock.Mock()
def test_del(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
exc_handler = mock.Mock()
loop.set_exception_handler(exc_handler)
with pytest.warns(ResourceWarning):
del conn
gc.collect()
connector._release.assert_called_with(key,
request,
transport,
protocol,
should_close=True)
msg = {'client_connection': mock.ANY, # conn was deleted
'message': 'Unclosed connection'}
if loop.get_debug():
msg['source_traceback'] = mock.ANY
exc_handler.assert_called_with(loop, msg)
def test_close(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
assert not conn.closed
conn.close()
assert conn._transport is None
connector._release.assert_called_with(
key, request, transport, protocol,
should_close=True)
assert conn.closed
def test_release(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
assert not conn.closed
conn.release()
assert not transport.close.called
assert conn._transport is None
connector._release.assert_called_with(
key, request, transport, protocol,
should_close=False)
assert conn.closed
def test_release_released(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
conn.release()
connector._release.reset_mock()
conn.release()
assert not transport.close.called
assert conn._transport is None
assert not connector._release.called
def test_detach(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
assert not conn.closed
conn.detach()
assert conn._transport is None
assert connector._release_acquired.called
assert not connector._release.called
assert conn.closed
def test_detach_closed(connector, key, request, transport, protocol, loop):
conn = Connection(connector, key, request,
transport, protocol, loop)
conn.release()
conn.detach()
assert not connector._release_acquired.called
assert conn._transport is None
|