]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
test: add test to reproduce the wrong error on disconnect
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 8 Jan 2025 00:16:46 +0000 (01:16 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 8 Jan 2025 12:41:56 +0000 (13:41 +0100)
We raise `OperationalError` instead of `IdleInTransactionSessionTimeout`.

See #988.

tests/test_connection.py
tests/test_connection_async.py

index c8b6a0c4eb71cb2fe9ab63ff457f434f004143a0..039d85218876f87c76a386791048a1393531893d 100644 (file)
@@ -15,7 +15,7 @@ from psycopg import pq, errors as e
 from psycopg.rows import tuple_row
 from psycopg.conninfo import conninfo_to_dict, timeout_from_conninfo
 
-from .acompat import is_async, skip_sync, skip_async
+from .acompat import is_async, skip_sync, skip_async, sleep
 from ._test_cursor import my_row_factory
 from ._test_connection import tx_params, tx_params_isolation, tx_values_map
 from ._test_connection import conninfo_params_timeout
@@ -875,3 +875,11 @@ def test_resolve_hostaddr_conn(conn_cls, monkeypatch, fake_resolve):
         conn_cls.connect("host=foo.com")
 
     assert conninfo_to_dict(got) == {"host": "foo.com", "hostaddr": "1.1.1.1"}
+
+
+@pytest.mark.slow
+def test_right_exception_on_server_disconnect(conn):
+    conn.execute("SET SESSION idle_in_transaction_session_timeout = 100")
+    sleep(0.2)
+    with pytest.raises(e.IdleInTransactionSessionTimeout):
+        conn.execute("SELECT * from pg_tables")
index b0836fdf8474d9a376507e215c985fdb28961bc6..51fc9bc82b4537c552e90f248090fc297126cb07 100644 (file)
@@ -12,7 +12,7 @@ from psycopg import pq, errors as e
 from psycopg.rows import tuple_row
 from psycopg.conninfo import conninfo_to_dict, timeout_from_conninfo
 
-from .acompat import is_async, skip_sync, skip_async
+from .acompat import is_async, skip_sync, skip_async, asleep
 from ._test_cursor import my_row_factory
 from ._test_connection import tx_params, tx_params_isolation, tx_values_map
 from ._test_connection import conninfo_params_timeout
@@ -879,3 +879,11 @@ async def test_resolve_hostaddr_conn(aconn_cls, monkeypatch, fake_resolve):
         await aconn_cls.connect("host=foo.com")
 
     assert conninfo_to_dict(got) == {"host": "foo.com", "hostaddr": "1.1.1.1"}
+
+
+@pytest.mark.slow
+async def test_right_exception_on_server_disconnect(aconn):
+    await aconn.execute("SET SESSION idle_in_transaction_session_timeout = 100")
+    await asleep(0.2)
+    with pytest.raises(e.IdleInTransactionSessionTimeout):
+        await aconn.execute("SELECT * from pg_tables")