]> 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:44:44 +0000 (00:44 +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_dns_srv.py

index 055178c564543f60855de6ec1d3c1dae5cbbe117..b5aeba0b6e8a129a6a833d3585638be4054365f1 100644 (file)
@@ -1,3 +1,4 @@
+import os
 import sys
 
 import pytest
@@ -57,3 +58,19 @@ def libpq():
             pytest.skip(f"can't load libpq for testing: {e}")
         else:
             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_
index e3f5c8dbfda35757044ac900035c852ca53ab2fb..66a5e5f2954f6cb65fae3e95910ceb5d7d1b1031 100644 (file)
@@ -342,7 +342,7 @@ async def test_autocommit_unknown(aconn):
         (("host=foo",), {"user": None}, "host=foo"),
     ],
 )
-async def test_connect_args(monkeypatch, pgconn, args, kwargs, want):
+async def test_connect_args(monkeypatch, setpgenv, pgconn, args, kwargs, want):
     the_conninfo: str
 
     def fake_connect(conninfo):
@@ -351,6 +351,7 @@ async def test_connect_args(monkeypatch, pgconn, args, kwargs, want):
         return pgconn
         yield
 
+    setpgenv({})
     monkeypatch.setattr(psycopg.connection, "connect", fake_connect)
     conn = await psycopg.AsyncConnection.connect(*args, **kwargs)
     assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want)
@@ -654,7 +655,8 @@ async def test_set_transaction_param_strange(aconn):
 
 
 @pytest.mark.parametrize("dsn, kwargs, exp", conninfo_params_timeout)
-async def test_get_connection_params(dsn, kwargs, exp):
+async def test_get_connection_params(dsn, kwargs, exp, setpgenv):
+    setpgenv({})
     params = await AsyncConnection._get_connection_params(dsn, **kwargs)
     conninfo = make_conninfo(**params)
     assert conninfo_to_dict(conninfo) == exp[0]
index 5a7fa2d18b51909454cecb1de6fc9bc7f62c5c4e..641bc634b2616f22ca570d9b531cbfdcfd58711f 100644 (file)
@@ -44,10 +44,8 @@ samples_ok = [
 
 
 @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)
     # Note: This test is flakey because weight order is random, although wrong
     # order is unlikely.
     params = conninfo_to_dict(conninfo)
@@ -57,10 +55,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]
@@ -75,10 +71,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]
@@ -86,10 +80,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]