@pytest.mark.slow
-def test_cancel(conn):
-
- errors = []
-
+def test_cancel(conn, retries):
def canceller():
try:
time.sleep(0.5)
except Exception as exc:
errors.append(exc)
- cur = conn.cursor()
- t = threading.Thread(target=canceller)
- t0 = time.time()
- t.start()
+ for retry in retries:
+ with retry:
+ errors = []
- with pytest.raises(psycopg.DatabaseError):
- cur.execute("select pg_sleep(2)")
+ cur = conn.cursor()
+ t = threading.Thread(target=canceller)
+ t0 = time.time()
+ t.start()
- t1 = time.time()
- assert not errors
- assert 0.0 < t1 - t0 < 1.0
+ with pytest.raises(psycopg.DatabaseError):
+ cur.execute("select pg_sleep(2)")
+
+ t1 = time.time()
+ assert not errors
+ assert 0.0 < t1 - t0 < 1.0
- # still working
- conn.rollback()
- assert cur.execute("select 1").fetchone()[0] == 1
+ # still working
+ conn.rollback()
+ assert cur.execute("select 1").fetchone()[0] == 1
@pytest.mark.slow
@pytest.mark.slow
-async def test_cancel(aconn):
-
- errors = []
-
+async def test_cancel(aconn, retries):
async def canceller():
try:
await asyncio.sleep(0.5)
with pytest.raises(psycopg.DatabaseError):
await cur.execute("select pg_sleep(2)")
- workers = [worker(), canceller()]
-
- t0 = time.time()
- await asyncio.gather(*workers)
+ async for retry in retries:
+ with retry:
+ errors = []
+ workers = [worker(), canceller()]
- t1 = time.time()
- assert not errors
- assert 0.0 < t1 - t0 < 1.0
+ t0 = time.time()
+ await asyncio.gather(*workers)
- # still working
- await aconn.rollback()
- cur = aconn.cursor()
- await cur.execute("select 1")
- assert await cur.fetchone() == (1,)
+ t1 = time.time()
+ assert not errors
+ assert 0.0 < t1 - t0 < 1.0
+
+ # still working
+ await aconn.rollback()
+ cur = aconn.cursor()
+ await cur.execute("select 1")
+ assert await cur.fetchone() == (1,)
@pytest.mark.slow