From b07f6b9ba624c185dcce7177c5cb97aa78f426d0 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 13 Jul 2022 00:19:24 +0100 Subject: [PATCH] test: fix dsn manipulation tests confused by the env vars Add fixture to clean up the PG* vars from the env and replace them with the values to test. --- tests/fix_pq.py | 17 +++++++++++++++++ tests/test_connection_async.py | 8 ++++++-- tests/test_conninfo.py | 12 ++++-------- tests/test_dns_srv.py | 24 ++++++++---------------- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/tests/fix_pq.py b/tests/fix_pq.py index 912378dab..af14c7d42 100644 --- a/tests/fix_pq.py +++ b/tests/fix_pq.py @@ -1,3 +1,4 @@ +import os import sys from typing import Iterator, List, NamedTuple from tempfile import TemporaryFile @@ -62,6 +63,22 @@ def libpq(): raise +@pytest.fixture +def setpgenv(monkeypatch): + """Replace the PG* env vars with the vars provided.""" + + def setpgenv_(env): + ks = [k for k in os.environ if k.startswith("PG")] + for k in ks: + monkeypatch.delenv(k) + + if env: + for k, v in env.items(): + monkeypatch.setenv(k, v) + + return setpgenv_ + + @pytest.fixture def trace(libpq): pqver = pq.__build_version__ or pq.version() diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index c6971cae1..1288a6c81 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -364,7 +364,9 @@ async def test_autocommit_unknown(aconn): (("dbname=foo",), {"user": None}, "dbname=foo"), ], ) -async def test_connect_args(aconn_cls, monkeypatch, pgconn, args, kwargs, want): +async def test_connect_args( + aconn_cls, monkeypatch, setpgenv, pgconn, args, kwargs, want +): the_conninfo: str def fake_connect(conninfo): @@ -373,6 +375,7 @@ async def test_connect_args(aconn_cls, monkeypatch, pgconn, args, kwargs, want): return pgconn yield + setpgenv({}) monkeypatch.setattr(psycopg.connection, "connect", fake_connect) conn = await aconn_cls.connect(*args, **kwargs) assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want) @@ -691,7 +694,8 @@ async def test_set_transaction_param_strange(aconn): @pytest.mark.parametrize("dsn, kwargs, exp", conninfo_params_timeout) -async def test_get_connection_params(aconn_cls, dsn, kwargs, exp): +async def test_get_connection_params(aconn_cls, dsn, kwargs, exp, setpgenv): + setpgenv({}) params = await aconn_cls._get_connection_params(dsn, **kwargs) conninfo = make_conninfo(**params) assert conninfo_to_dict(conninfo) == exp[0] diff --git a/tests/test_conninfo.py b/tests/test_conninfo.py index 34bfa40c5..60983e31b 100644 --- a/tests/test_conninfo.py +++ b/tests/test_conninfo.py @@ -351,11 +351,9 @@ class TestConnectionInfo: ) @pytest.mark.asyncio async def test_resolve_hostaddr_async_no_resolve( - monkeypatch, conninfo, want, env, fail_resolve + setpgenv, conninfo, want, env, fail_resolve ): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) + setpgenv(env) params = conninfo_to_dict(conninfo) params = await resolve_hostaddr_async(params) assert conninfo_to_dict(want) == params @@ -418,10 +416,8 @@ async def test_resolve_hostaddr_async(conninfo, want, env, fake_resolve): ], ) @pytest.mark.asyncio -async def test_resolve_hostaddr_async_bad(monkeypatch, conninfo, env, fake_resolve): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) +async def test_resolve_hostaddr_async_bad(setpgenv, conninfo, env, fake_resolve): + setpgenv(env) params = conninfo_to_dict(conninfo) with pytest.raises(psycopg.Error): await resolve_hostaddr_async(params) diff --git a/tests/test_dns_srv.py b/tests/test_dns_srv.py index 57fce99c3..15b370685 100644 --- a/tests/test_dns_srv.py +++ b/tests/test_dns_srv.py @@ -45,10 +45,8 @@ samples_ok = [ @pytest.mark.flakey("random weight order, might cause wrong order") @pytest.mark.parametrize("conninfo, want, env", samples_ok) -def test_srv(conninfo, want, env, fake_srv, monkeypatch): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) +def test_srv(conninfo, want, env, fake_srv, setpgenv): + setpgenv(env) params = conninfo_to_dict(conninfo) params = psycopg._dns.resolve_srv(params) # type: ignore[attr-defined] assert conninfo_to_dict(want) == params @@ -56,10 +54,8 @@ def test_srv(conninfo, want, env, fake_srv, monkeypatch): @pytest.mark.asyncio @pytest.mark.parametrize("conninfo, want, env", samples_ok) -async def test_srv_async(conninfo, want, env, afake_srv, monkeypatch): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) +async def test_srv_async(conninfo, want, env, afake_srv, setpgenv): + setpgenv(env) params = conninfo_to_dict(conninfo) params = await ( psycopg._dns.resolve_srv_async(params) # type: ignore[attr-defined] @@ -74,10 +70,8 @@ samples_bad = [ @pytest.mark.parametrize("conninfo, env", samples_bad) -def test_srv_bad(conninfo, env, fake_srv, monkeypatch): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) +def test_srv_bad(conninfo, env, fake_srv, setpgenv): + setpgenv(env) params = conninfo_to_dict(conninfo) with pytest.raises(psycopg.OperationalError): psycopg._dns.resolve_srv(params) # type: ignore[attr-defined] @@ -85,10 +79,8 @@ def test_srv_bad(conninfo, env, fake_srv, monkeypatch): @pytest.mark.asyncio @pytest.mark.parametrize("conninfo, env", samples_bad) -async def test_srv_bad_async(conninfo, env, afake_srv, monkeypatch): - if env: - for k, v in env.items(): - monkeypatch.setenv(k, v) +async def test_srv_bad_async(conninfo, env, afake_srv, setpgenv): + setpgenv(env) params = conninfo_to_dict(conninfo) with pytest.raises(psycopg.OperationalError): await psycopg._dns.resolve_srv_async(params) # type: ignore[attr-defined] -- 2.47.2