def test_reconnect(self): dbapi = MockDBAPI() p = pool.NullPool(creator = lambda: dbapi.connect('foo.db')) c1 = p.connect() c_id = c1.connection.id c1.close(); c1=None c1 = p.connect() dbapi.raise_error = True c1.invalidate() c1 = None c1 = p.connect() assert c1.connection.id != c_id
def test_reconnect(self): dbapi = MockDBAPI() p = pool.NullPool(creator=lambda: dbapi.connect('foo.db')) c1 = p.connect() c1.close() c1 = None c1 = p.connect() c1.invalidate() c1 = None c1 = p.connect() dbapi.connect.assert_has_calls( [call('foo.db'), call('foo.db')], any_order=True)
def test_notify_waiters(self): dbapi = MockDBAPI() canary = [] def creator1(): canary.append(1) return dbapi.connect() def creator2(): canary.append(2) return dbapi.connect() p1 = pool.QueuePool(creator=creator1, pool_size=1, timeout=None, max_overflow=0) p2 = pool.NullPool(creator=creator2) def waiter(p): conn = p.connect() time.sleep(.5) conn.close() c1 = p1.connect() threads = [] for i in range(5): t = threading.Thread(target=waiter, args=(p1, )) t.start() threads.append(t) time.sleep(.5) eq_(canary, [1]) p1._pool.abort(p2) for t in threads: t.join(join_timeout) eq_(canary, [1, 2, 2, 2, 2, 2])