]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
test: fix dsn manipulation tests confused by the env vars
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 12 Jul 2022 23:19:24 +0000 (00:19 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 12 Jul 2022 23:24:42 +0000 (00:24 +0100)
Add fixture to clean up the PG* vars from the env and replace them with
the values to test.

tests/fix_pq.py
tests/test_connection_async.py
tests/test_conninfo.py
tests/test_dns_srv.py

index 912378dabebe87486b8d18a716e5a84cfc0c7845..af14c7d42ece2d48d8f0e5cfd436c93181ca3a4d 100644 (file)
@@ -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()
index c6971cae1952e5b3b0df8ceb0917626075ff159f..1288a6c817a4081136f5f6919ae877517989d8a5 100644 (file)
@@ -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]
index 34bfa40c569fa9b7bb82bc9e7730a7911e392aca..60983e31bb61645c19976b50ee50a26a9d4422f1 100644 (file)
@@ -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)
index 57fce99c3209f3fa3176be4dd11a626cdabae755..15b370685b819377ca930ff34be60a40736eb027 100644 (file)
@@ -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]