bpo-23819: Get rid of assert statements in test_asyncio (GH-30212) (GH-30213)

To keep checks even if run tests with optimized Python.

Either use special assertion methods like assertEqual() or
raise an AssertionError explicitly.
(cherry picked from commit 6ca78affc8)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Miss Islington (bot) 2021-12-20 04:50:45 -08:00 committed by GitHub
parent 0c0bd78ccf
commit 95948169d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 102 additions and 63 deletions

View file

@ -643,7 +643,7 @@ def run_loop():
'Exception in callback.*zero'),
exc_info=(ZeroDivisionError, MOCK_ANY, MOCK_ANY))
assert not mock_handler.called
self.assertFalse(mock_handler.called)
def test_set_exc_handler_broken(self):
def run_loop():
@ -1003,22 +1003,26 @@ def __init__(self, create_future=False):
if create_future:
self.done = asyncio.get_running_loop().create_future()
def _assert_state(self, *expected):
if self.state not in expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
def data_received(self, data):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.nbytes += len(data)
def eof_received(self):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'EOF'
def connection_lost(self, exc):
assert self.state in ('CONNECTED', 'EOF'), self.state
self._assert_state('CONNECTED', 'EOF')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -1033,20 +1037,24 @@ def __init__(self, create_future=False, loop=None):
if create_future:
self.done = loop.create_future()
def _assert_state(self, expected):
if self.state != expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'INITIALIZED'
def datagram_received(self, data, addr):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
self.nbytes += len(data)
def error_received(self, exc):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
def connection_lost(self, exc):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -1395,7 +1403,7 @@ def test_create_connection_bluetooth(self, m_socket):
addr = ('00:01:02:03:04:05', 1)
def getaddrinfo(host, port, *args, **kw):
assert (host, port) == addr
self.assertEqual((host, port), addr)
return [(999, 1, 999, '', (addr, 1))]
m_socket.getaddrinfo = getaddrinfo
@ -1694,7 +1702,7 @@ def test_create_datagram_endpoint_sock_unix(self):
lambda: MyDatagramProto(create_future=True, loop=self.loop),
family=socket.AF_UNIX)
transport, protocol = self.loop.run_until_complete(fut)
assert transport._sock.family == socket.AF_UNIX
self.assertEqual(transport._sock.family, socket.AF_UNIX)
transport.close()
self.loop.run_until_complete(protocol.done)
self.assertEqual('CLOSED', protocol.state)

View file

@ -87,23 +87,27 @@ def __init__(self, loop=None):
self.connected = loop.create_future()
self.done = loop.create_future()
def _assert_state(self, *expected):
if self.state not in expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
if self.connected:
self.connected.set_result(None)
def data_received(self, data):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.nbytes += len(data)
def eof_received(self):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'EOF'
def connection_lost(self, exc):
assert self.state in ('CONNECTED', 'EOF'), self.state
self._assert_state('CONNECTED', 'EOF')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -124,20 +128,24 @@ def __init__(self, loop=None):
if loop is not None:
self.done = loop.create_future()
def _assert_state(self, expected):
if self.state != expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'INITIALIZED'
def datagram_received(self, data, addr):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
self.nbytes += len(data)
def error_received(self, exc):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
def connection_lost(self, exc):
assert self.state == 'INITIALIZED', self.state
self._assert_state('INITIALIZED')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -153,23 +161,27 @@ def __init__(self, loop=None):
if loop is not None:
self.done = loop.create_future()
def _assert_state(self, expected):
if self.state != expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == ['INITIAL'], self.state
self._assert_state(['INITIAL'])
self.state.append('CONNECTED')
def data_received(self, data):
assert self.state == ['INITIAL', 'CONNECTED'], self.state
self._assert_state(['INITIAL', 'CONNECTED'])
self.nbytes += len(data)
def eof_received(self):
assert self.state == ['INITIAL', 'CONNECTED'], self.state
self._assert_state(['INITIAL', 'CONNECTED'])
self.state.append('EOF')
def connection_lost(self, exc):
if 'EOF' not in self.state:
self.state.append('EOF') # It is okay if EOF is missed.
assert self.state == ['INITIAL', 'CONNECTED', 'EOF'], self.state
self._assert_state(['INITIAL', 'CONNECTED', 'EOF'])
self.state.append('CLOSED')
if self.done:
self.done.set_result(None)
@ -184,13 +196,17 @@ def __init__(self, loop=None):
if loop is not None:
self.done = loop.create_future()
def _assert_state(self, expected):
if self.state != expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
def connection_lost(self, exc):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -209,31 +225,35 @@ def __init__(self, loop):
self.got_data = {1: asyncio.Event(),
2: asyncio.Event()}
def _assert_state(self, expected):
if self.state != expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
self.connected.set_result(None)
def connection_lost(self, exc):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'CLOSED'
self.completed.set_result(None)
def pipe_data_received(self, fd, data):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.data[fd] += data
self.got_data[fd].set()
def pipe_connection_lost(self, fd, exc):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
if exc:
self.disconnects[fd].set_exception(exc)
else:
self.disconnects[fd].set_result(exc)
def process_exited(self):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.returncode = self.transport.get_returncode()
@ -1283,7 +1303,7 @@ def test_create_datagram_endpoint_sock(self):
else:
break
else:
assert False, 'Can not create socket.'
self.fail('Can not create socket.')
f = self.loop.create_datagram_endpoint(
lambda: MyDatagramProto(loop=self.loop), sock=sock)

View file

@ -54,30 +54,30 @@ def done(self):
or self.__exception is not None)
def result(self):
assert not self.cancelled()
self.assertFalse(self.cancelled())
if self.__exception is not None:
raise self.__exception
return self.__result
def exception(self):
assert not self.cancelled()
self.assertFalse(self.cancelled())
return self.__exception
def set_result(self, result):
assert not self.done()
assert result is not None
self.assertFalse(self.done())
self.assertIsNotNone(result)
self.__result = result
def set_exception(self, exception):
assert not self.done()
assert exception is not None
self.assertFalse(self.done())
self.assertIsNotNone(exception)
self.__exception = exception
def __iter__(self):
if not self.done():
self._asyncio_future_blocking = True
yield self
assert self.done()
self.assertTrue(self.done())
return self.result()
@ -91,12 +91,12 @@ def setUp(self):
def test_wrap_future(self):
f = DuckFuture()
g = asyncio.wrap_future(f)
assert g is f
self.assertIs(g, f)
def test_ensure_future(self):
f = DuckFuture()
g = asyncio.ensure_future(f)
assert g is f
self.assertIs(g, f)
class BaseFutureTests:

View file

@ -36,25 +36,29 @@ def __init__(self, loop=None, close_after=0):
self.data = bytearray()
self.close_after = close_after
def _assert_state(self, *expected):
if self.state not in expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
if self.connected:
self.connected.set_result(None)
def eof_received(self):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'EOF'
def connection_lost(self, exc):
assert self.state in ('CONNECTED', 'EOF'), self.state
self._assert_state('CONNECTED', 'EOF')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
def data_received(self, data):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.nbytes += len(data)
self.data.extend(data)
super().data_received(data)

View file

@ -23,24 +23,28 @@ def __init__(self, loop=None):
self.connected = loop.create_future()
self.done = loop.create_future()
def _assert_state(self, *expected):
if self.state not in expected:
raise AssertionError(f'state: {self.state!r}, expected: {expected!r}')
def connection_made(self, transport):
self.transport = transport
assert self.state == 'INITIAL', self.state
self._assert_state('INITIAL')
self.state = 'CONNECTED'
if self.connected:
self.connected.set_result(None)
transport.write(b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n')
def data_received(self, data):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.nbytes += len(data)
def eof_received(self):
assert self.state == 'CONNECTED', self.state
self._assert_state('CONNECTED')
self.state = 'EOF'
def connection_lost(self, exc):
assert self.state in ('CONNECTED', 'EOF'), self.state
self._assert_state('CONNECTED', 'EOF')
self.state = 'CLOSED'
if self.done:
self.done.set_result(None)
@ -451,7 +455,7 @@ def test_create_connection_sock(self):
else:
break
else:
assert False, 'Can not create socket.'
self.fail('Can not create socket.')
f = self.loop.create_connection(
lambda: MyProto(loop=self.loop), sock=sock)

View file

@ -383,9 +383,9 @@ def connection_made(self, tr):
def get_buffer(self, sizehint):
return self.buf
def buffer_updated(self, nsize):
assert nsize == 1
self.on_data.set_result(bytes(self.buf[:nsize]))
def buffer_updated(slf, nsize):
self.assertEqual(nsize, 1)
slf.on_data.set_result(bytes(slf.buf[:nsize]))
class ClientProtoSecond(asyncio.Protocol):
def __init__(self, on_data, on_eof):

View file

@ -987,10 +987,10 @@ def test_eof_feed_when_closing_writer(self):
wr.close()
f = wr.wait_closed()
self.loop.run_until_complete(f)
assert rd.at_eof()
self.assertTrue(rd.at_eof())
f = rd.read()
data = self.loop.run_until_complete(f)
assert data == b''
self.assertEqual(data, b'')
self.assertEqual(messages, [])

View file

@ -329,7 +329,7 @@ def coro():
self.set_event_loop(loop)
fut = asyncio.ensure_future(Aw(coro()), loop=loop)
loop.run_until_complete(fut)
assert fut.result() == 'ok'
self.assertEqual(fut.result(), 'ok')
def test_ensure_future_neither(self):
with self.assertRaises(TypeError):
@ -1155,7 +1155,7 @@ async def inner():
async def main():
result = await asyncio.wait_for(inner(), timeout=.01)
assert result == 1
self.assertEqual(result, 1)
asyncio.run(main())

View file

@ -34,7 +34,8 @@ def EXITCODE(exitcode):
def SIGNAL(signum):
assert 1 <= signum <= 68
if not 1 <= signum <= 68:
raise AssertionError(f'invalid signum {signum}')
return 32768 - signum

View file

@ -409,12 +409,13 @@ def _remove_writer(self, fd):
return False
def assert_writer(self, fd, callback, *args):
assert fd in self.writers, 'fd {} is not registered'.format(fd)
if fd not in self.writers:
raise AssertionError(f'fd {fd} is not registered')
handle = self.writers[fd]
assert handle._callback == callback, '{!r} != {!r}'.format(
handle._callback, callback)
assert handle._args == args, '{!r} != {!r}'.format(
handle._args, args)
if handle._callback != callback:
raise AssertionError(f'{handle._callback!r} != {callback!r}')
if handle._args != args:
raise AssertionError(f'{handle._args!r} != {args!r}')
def _ensure_fd_no_transport(self, fd):
if not isinstance(fd, int):
@ -530,7 +531,8 @@ def close_loop(loop):
thread.join()
def set_event_loop(self, loop, *, cleanup=True):
assert loop is not None
if loop is None:
raise AssertionError('loop is None')
# ensure that the event loop is passed explicitly in asyncio
events.set_event_loop(None)
if cleanup: