diff --git a/aiomcache/pool.py b/aiomcache/pool.py index 77cd747..1b8bf22 100644 --- a/aiomcache/pool.py +++ b/aiomcache/pool.py @@ -76,10 +76,8 @@ def release(self, conn): if conn.reader.at_eof() or conn.reader.exception(): self._do_close(conn) else: - try: - self._pool.put_nowait(conn) - except asyncio.QueueFull: - self._do_close(conn) + # This should never fail because poolsize=maxsize + self._pool.put_nowait(conn) @asyncio.coroutine def _create_new_conn(self): diff --git a/tests/pool_test.py b/tests/pool_test.py index 1be58a7..cc7ba1f 100644 --- a/tests/pool_test.py +++ b/tests/pool_test.py @@ -83,3 +83,34 @@ def acquire_wait_release(): yield from asyncio.gather(*([acquire_wait_release()] * 3), loop=loop) assert pool.size() == 1 assert len(pool._in_use) == 0 + + +@pytest.mark.run_loop +def test_maxsize_greater_than_minsize(mcache_params, loop): + pool = MemcachePool(minsize=5, maxsize=1, loop=loop, **mcache_params) + conn = yield from pool.acquire() + assert isinstance(conn.reader, asyncio.StreamReader) + assert isinstance(conn.writer, asyncio.StreamWriter) + pool.release(conn) + + +@pytest.mark.run_loop +def test_0_minsize(mcache_params, loop): + pool = MemcachePool(minsize=0, maxsize=5, loop=loop, **mcache_params) + conn = yield from pool.acquire() + assert isinstance(conn.reader, asyncio.StreamReader) + assert isinstance(conn.writer, asyncio.StreamWriter) + pool.release(conn) + + +@pytest.mark.run_loop +def test_bad_connection(mcache_params, loop): + pool = MemcachePool(minsize=5, maxsize=1, loop=loop, **mcache_params) + pool._host = "INVALID_HOST" + assert pool.size() == 0 + with pytest.raises(BlockingIOError): + conn = yield from pool.acquire() + assert isinstance(conn.reader, asyncio.StreamReader) + assert isinstance(conn.writer, asyncio.StreamWriter) + pool.release(conn) + assert pool.size() == 0