From: Daniele Varrazzo Date: Sun, 28 Feb 2021 14:12:18 +0000 (+0100) Subject: Retry server-side cursor tests on del X-Git-Tag: 3.0.dev0~98 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3309628fabdad616f7975f6d2d6397d1be9d200;p=thirdparty%2Fpsycopg.git Retry server-side cursor tests on del Warnings seem unreliably to receive. Also print any eventual unexpected warning: pytest doesn't do it automatically. --- diff --git a/tests/test_server_cursor.py b/tests/test_server_cursor.py index 14bce144b..3978cd371 100644 --- a/tests/test_server_cursor.py +++ b/tests/test_server_cursor.py @@ -51,35 +51,44 @@ def test_query_params(conn): assert cur.params == [bytes([0, 3])] # 3 as binary int2 -def test_close(conn, recwarn): - cur = conn.cursor("foo") - cur.execute("select generate_series(1, 10) as bar") - cur.close() - assert cur.closed - - assert not conn.execute( - "select * from pg_cursors where name = 'foo'" - ).fetchone() - del cur - assert not recwarn - - -def test_close_noop(conn, recwarn): - cur = conn.cursor("foo") - cur.close() - assert not recwarn - - -def test_context(conn, recwarn): - with conn.cursor("foo") as cur: - cur.execute("select generate_series(1, 10) as bar") - - assert cur.closed - assert not conn.execute( - "select * from pg_cursors where name = 'foo'" - ).fetchone() - del cur - assert not recwarn +def test_close(conn, recwarn, retries): + for retry in retries: + with retry: + recwarn.clear() + cur = conn.cursor("foo") + cur.execute("select generate_series(1, 10) as bar") + cur.close() + assert cur.closed + + assert not conn.execute( + "select * from pg_cursors where name = 'foo'" + ).fetchone() + del cur + assert not recwarn, [str(w.message) for w in recwarn.list] + + +def test_close_noop(conn, recwarn, retries): + for retry in retries: + with retry: + recwarn.clear() + cur = conn.cursor("foo") + cur.close() + assert not recwarn, [str(w.message) for w in recwarn.list] + + +def test_context(conn, recwarn, retries): + for retry in retries: + with retry: + recwarn.clear() + with conn.cursor("foo") as cur: + cur.execute("select generate_series(1, 10) as bar") + + assert cur.closed + assert not conn.execute( + "select * from pg_cursors where name = 'foo'" + ).fetchone() + del cur + assert not recwarn, [str(w.message) for w in recwarn.list] def test_close_no_clobber(conn): @@ -88,11 +97,14 @@ def test_close_no_clobber(conn): cur.execute("select 1 / %s", (0,)) -def test_warn_close(conn, recwarn): - cur = conn.cursor("foo") - cur.execute("select generate_series(1, 10) as bar") - del cur - assert ".close()" in str(recwarn.pop(ResourceWarning).message) +def test_warn_close(conn, recwarn, retries): + for retry in retries: + with retry: + recwarn.clear() + cur = conn.cursor("foo") + cur.execute("select generate_series(1, 10) as bar") + del cur + assert ".close()" in str(recwarn.pop(ResourceWarning).message) def test_execute_reuse(conn): diff --git a/tests/test_server_cursor_async.py b/tests/test_server_cursor_async.py index f0a98ccca..7e95b68fb 100644 --- a/tests/test_server_cursor_async.py +++ b/tests/test_server_cursor_async.py @@ -53,35 +53,48 @@ async def test_query_params(aconn): assert cur.params == [bytes([0, 3])] # 3 as binary int2 -async def test_close(aconn, recwarn): - cur = aconn.cursor("foo") - await cur.execute("select generate_series(1, 10) as bar") - await cur.close() - assert cur.closed - - assert not await ( - await aconn.execute("select * from pg_cursors where name = 'foo'") - ).fetchone() - del cur - assert not recwarn - - -async def test_close_noop(aconn, recwarn): - cur = aconn.cursor("foo") - await cur.close() - assert not recwarn - - -async def test_context(aconn, recwarn): - async with aconn.cursor("foo") as cur: - await cur.execute("select generate_series(1, 10) as bar") - - assert cur.closed - assert not await ( - await aconn.execute("select * from pg_cursors where name = 'foo'") - ).fetchone() - del cur - assert not recwarn +async def test_close(aconn, recwarn, retries): + async for retry in retries: + with retry: + recwarn.clear() + cur = aconn.cursor("foo") + await cur.execute("select generate_series(1, 10) as bar") + await cur.close() + assert cur.closed + + assert not await ( + await aconn.execute( + "select * from pg_cursors where name = 'foo'" + ) + ).fetchone() + del cur + assert not recwarn, [str(w.message) for w in recwarn.list] + + +async def test_close_noop(aconn, recwarn, retries): + async for retry in retries: + with retry: + recwarn.clear() + cur = aconn.cursor("foo") + await cur.close() + assert not recwarn, [str(w.message) for w in recwarn.list] + + +async def test_context(aconn, recwarn, retries): + async for retry in retries: + with retry: + recwarn.clear() + async with aconn.cursor("foo") as cur: + await cur.execute("select generate_series(1, 10) as bar") + + assert cur.closed + assert not await ( + await aconn.execute( + "select * from pg_cursors where name = 'foo'" + ) + ).fetchone() + del cur + assert not recwarn, [str(w.message) for w in recwarn.list] async def test_close_no_clobber(aconn): @@ -90,11 +103,14 @@ async def test_close_no_clobber(aconn): await cur.execute("select 1 / %s", (0,)) -async def test_warn_close(aconn, recwarn): - cur = aconn.cursor("foo") - await cur.execute("select generate_series(1, 10) as bar") - del cur - assert ".close()" in str(recwarn.pop(ResourceWarning).message) +async def test_warn_close(aconn, recwarn, retries): + async for retry in retries: + with retry: + recwarn.clear() + cur = aconn.cursor("foo") + await cur.execute("select generate_series(1, 10) as bar") + del cur + assert ".close()" in str(recwarn.pop(ResourceWarning).message) async def test_execute_reuse(aconn):