diff --git a/aiossdb/__init__.py b/aiossdb/__init__.py index cb6ab5d..8831b34 100644 --- a/aiossdb/__init__.py +++ b/aiossdb/__init__.py @@ -1,7 +1,8 @@ from .connection import create_connection, SSDBConnection -from .errors import SSDBError, ReplyError, ConnectionClosedError, ProtocolError +from .errors import SSDBError, ReplyError, ConnectionClosedError, ProtocolError, PoolClosedError from .parser import SSDBParser from .pool import create_pool, SSDBConnectionPool +from .client import Client __version__ = '0.0.1' __author__ = "Kevin Du" diff --git a/aiossdb/client.py b/aiossdb/client.py index 54a5fbd..709994a 100644 --- a/aiossdb/client.py +++ b/aiossdb/client.py @@ -42,3 +42,4 @@ def close(self): if self._pool: self._pool.close() yield from self._pool.wait_closed() + self._pool = None diff --git a/aiossdb/log.py b/aiossdb/log.py index 7568ac2..39ecbb2 100644 --- a/aiossdb/log.py +++ b/aiossdb/log.py @@ -1,14 +1,14 @@ -import os -import sys +# import os +# import sys import logging logger = logging.getLogger('aiossdb') -if os.environ.get("AIOSSDB_DEBUG"): - logger.setLevel(logging.DEBUG) - handler = logging.StreamHandler(stream=sys.stderr) - handler.setFormatter(logging.Formatter( - "%(asctime)s %(name)s %(levelname)s %(message)s")) - logger.addHandler(handler) - os.environ["AIOSSDB_DEBUG"] = "" +# if os.environ.get("AIOSSDB_DEBUG"): +# logger.setLevel(logging.DEBUG) +# handler = logging.StreamHandler(stream=sys.stderr) +# handler.setFormatter(logging.Formatter( +# "%(asctime)s %(name)s %(levelname)s %(message)s")) +# logger.addHandler(handler) +# os.environ["AIOSSDB_DEBUG"] = "" diff --git a/aiossdb/pool.py b/aiossdb/pool.py index 3e25968..54a5f8c 100644 --- a/aiossdb/pool.py +++ b/aiossdb/pool.py @@ -220,6 +220,7 @@ def _do_close(self): yield from asyncio.gather(*waiters, loop=self._loop) self._closed = True + @asyncio.coroutine def wait_closed(self): """等待直到连接池关闭,这里要等待的是所有连接池连接的关闭期物Future的完成""" yield from asyncio.shield(self._waiter, loop=self._loop) diff --git a/tests/client_test.py b/tests/client_test.py index e69de29..40258f6 100644 --- a/tests/client_test.py +++ b/tests/client_test.py @@ -0,0 +1,24 @@ +import pytest +from aiossdb import Client + + +@pytest.mark.asyncio +async def test_create_client(event_loop): + c = Client(loop=event_loop) + assert c._pool is None + pool = await c.get_pool() + assert pool is c._pool + assert c._pool.maxsize == c.max_connection + await c.close() + assert c._pool is None + + +@pytest.mark.asyncio +async def test_execute_command(event_loop): + c = Client(loop=event_loop) + await c.set('a', 1) + res = await c.get('a') + assert res[0] == '1' + assert c._pool is not None + await c.close() + assert c._pool is None diff --git a/tests/connection_pool_test.py b/tests/connection_pool_test.py index 8bd3786..b00bbf0 100644 --- a/tests/connection_pool_test.py +++ b/tests/connection_pool_test.py @@ -1,5 +1,5 @@ import pytest -from aiossdb import SSDBConnectionPool, SSDBConnection, ReplyError +from aiossdb import SSDBConnectionPool, SSDBConnection, ReplyError, PoolClosedError def _assert_defaults(pool): @@ -9,6 +9,7 @@ def _assert_defaults(pool): assert pool.size == 1 assert pool.freesize == 1 assert pool._waiter is None + assert str(pool) == '' @pytest.mark.asyncio @@ -34,6 +35,7 @@ async def test_get_connection(pool): @pytest.mark.asyncio async def test_execute_commands(pool): + await pool.auth('') await pool.execute('set', 'a', 1) res = await pool.execute('get', 'a') @@ -75,4 +77,42 @@ async def test_more_connections(pool): assert pool.freesize == 2 assert pool.size == 2 + conn1.close() + await conn1.wait_closed() + pool._drop_closed() + + assert pool.freesize == 1 + assert pool.size == 1 + + pool.close() + await pool.wait_closed() + + assert pool.closed + + with pytest.raises(PoolClosedError): + await pool.release(conn2) + + +@pytest.mark.asyncio +async def test_close_pool(pool): + + conn, addr = await pool.get_connection() + await pool.release(conn) + assert pool.freesize == 1 + assert pool.size == 1 + + conn.close() + await conn.wait_closed() + + conn, addr = await pool.get_connection() + assert pool.freesize == 0 + assert pool.size == 1 + + pool.close() + await pool.wait_closed() + + assert pool.closed + + with pytest.raises(PoolClosedError): + await pool.new_connection() \ No newline at end of file diff --git a/tests/connection_test.py b/tests/connection_test.py index 5836455..30d7d49 100644 --- a/tests/connection_test.py +++ b/tests/connection_test.py @@ -194,4 +194,4 @@ async def test_execute_commands(create_connection, event_loop, local_server): conn = await create_connection(address, loop=event_loop, password='') - assert not conn.closed \ No newline at end of file + assert not conn.closed