]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Retry server-side cursor tests on del
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 28 Feb 2021 14:12:18 +0000 (15:12 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 28 Feb 2021 14:15:05 +0000 (15:15 +0100)
Warnings seem unreliably to receive. Also print any eventual unexpected
warning: pytest doesn't do it automatically.

tests/test_server_cursor.py
tests/test_server_cursor_async.py

index 14bce144bbdb952601f6a547a37487b14bdd1f57..3978cd371957947c218512405e3b9fdfb2f5085e 100644 (file)
@@ -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):
index f0a98cccae13b097f97bafaf60dfe687d36704ea..7e95b68fbe71abd9297b3e7119d5c11a7390fcd5 100644 (file)
@@ -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):