diff --git a/CHANGELOG.md b/CHANGELOG.md index 09878285214202b5156052a1bcdd2c6dfcb97ea6..cdc9ff3f2e9854fd728789518039a72ab04558f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,3 @@ # v2.21.4 +* moar tests for CPManager \ No newline at end of file diff --git a/satella/__init__.py b/satella/__init__.py index 1e35c5c53d7723b17f98a53396d027c67599b563..68faeb8bf0bc18a23e81f9b28c929371d2c42b51 100644 --- a/satella/__init__.py +++ b/satella/__init__.py @@ -1 +1 @@ -__version__ = '2.21.4a1' +__version__ = '2.21.4a2' diff --git a/satella/coding/resources/cp_manager.py b/satella/coding/resources/cp_manager.py index ab4c48f4f03254182b145cfb84a9220751bb0212..600f59bc0ba63551417cb2c3e76b30b5a598d6b5 100644 --- a/satella/coding/resources/cp_manager.py +++ b/satella/coding/resources/cp_manager.py @@ -98,7 +98,7 @@ class CPManager(Monitor, Closeable, tp.Generic[T], metaclass=abc.ABCMeta): :param connection: connection to release """ obj_id = id(connection) - if self.id_to_times[obj_id] == self.max_cycle_no: + if self.id_to_times[obj_id] >= self.max_cycle_no: self._kill_connection(connection) else: try: diff --git a/tests/test_coding/test_resources.py b/tests/test_coding/test_resources.py index d819b2c18f66246b36d12a25af789724541cfce4..c10c67da845c072d22166a4f285483672ef1e229 100644 --- a/tests/test_coding/test_resources.py +++ b/tests/test_coding/test_resources.py @@ -28,6 +28,8 @@ class TestResources(unittest.TestCase): if self.i == 3: self.value_error_emitted = True raise ValueError() + elif self.i > 3: + raise RuntimeError('called too often') def close(self): self.closed = True @@ -48,9 +50,6 @@ class TestResources(unittest.TestCase): self.already_acquired.add(v.id) return v - def fail_connection(self, connection) -> None: - super().fail_connection(connection) - def release_connection(self, connection) -> None: print(f'Releasing connection {connection.id}') self.already_acquired.remove(connection.id) @@ -81,6 +80,13 @@ class TestResources(unittest.TestCase): cp.release_connection(conns.pop()) ret.result(timeout=20) ret2.result(timeout=20) + for i in range(20): + conn = cp.acquire_connection() + try: + conn.do() + except ValueError: + cp.fail_connection(conn) + cp.release_connection(conn) while conns: cp.release_connection(conns.pop())