From d19bf069289f4032eea8267929b5624d9ab5bd56 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 8 Jan 2025 01:16:46 +0100 Subject: [PATCH] test: add test to reproduce the wrong error on disconnect We raise `OperationalError` instead of `IdleInTransactionSessionTimeout`. See #988. --- tests/test_connection.py | 10 +++++++++- tests/test_connection_async.py | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/test_connection.py b/tests/test_connection.py index c8b6a0c4e..039d85218 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -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") diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index b0836fdf8..51fc9bc82 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -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") -- 2.47.2