diff --git a/aiohttp/streams.py b/aiohttp/streams.py index 3604bc96fb..032a65df3f 100644 --- a/aiohttp/streams.py +++ b/aiohttp/streams.py @@ -213,6 +213,7 @@ def unread_data(self, data): self._size += len(data) self._cursor -= len(data) self._buffer.appendleft(data) + self._eof_counter = 0 def feed_data(self, data): assert not self._eof, 'feed_data after feed_eof' diff --git a/changes/2251.bugfix b/changes/2251.bugfix new file mode 100644 index 0000000000..ad2a76e063 --- /dev/null +++ b/changes/2251.bugfix @@ -0,0 +1 @@ +Fix incorrect warning in StreamReader. diff --git a/tests/test_streams.py b/tests/test_streams.py index d233b3e456..c2ab328b24 100644 --- a/tests/test_streams.py +++ b/tests/test_streams.py @@ -181,6 +181,22 @@ def test_read_eof_infinit(self, internal_logger): self.loop.run_until_complete(stream.read()) self.assertTrue(internal_logger.warning.called) + @mock.patch('aiohttp.streams.internal_logger') + def test_read_eof_unread_data_no_warning(self, internal_logger): + # Read bytes. + stream = self._make_one() + stream.feed_eof() + + self.loop.run_until_complete(stream.read()) + self.loop.run_until_complete(stream.read()) + self.loop.run_until_complete(stream.read()) + self.loop.run_until_complete(stream.read()) + self.loop.run_until_complete(stream.read()) + stream.unread_data(b'data') + self.loop.run_until_complete(stream.read()) + self.loop.run_until_complete(stream.read()) + self.assertFalse(internal_logger.warning.called) + def test_read_until_eof(self): # Read all bytes until eof. stream = self._make_one()