示例#1
0
async def test_resolve_hostaddr_async_no_resolve(monkeypatch, conninfo, want,
                                                 env, fail_resolve):
    if env:
        for k, v in env.items():
            monkeypatch.setenv(k, v)
    params = conninfo_to_dict(conninfo)
    params = await psycopg._dns.resolve_hostaddr_async(  # type: ignore[attr-defined]
        params)
    assert conninfo_to_dict(want) == params
示例#2
0
async def test_srv_async(conninfo, want, env, afake_srv, retries, monkeypatch):
    if env:
        for k, v in env.items():
            monkeypatch.setenv(k, v)
    async for retry in retries:
        with retry:
            params = conninfo_to_dict(conninfo)
            params = await (
                psycopg._dns.resolve_srv_async(  # type: ignore[attr-defined]
                    params))
            assert conninfo_to_dict(want) == params
示例#3
0
def test_connect_args(monkeypatch, pgconn, args, kwargs, want):
    the_conninfo = None

    def fake_connect(conninfo):
        nonlocal the_conninfo
        the_conninfo = conninfo
        return pgconn
        yield

    monkeypatch.setattr(psycopg.connection, "connect", fake_connect)
    psycopg.Connection.connect(*args, **kwargs)
    assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want)
示例#4
0
def test_srv(conninfo, want, env, fake_srv, retries, monkeypatch):
    if env:
        for k, v in env.items():
            monkeypatch.setenv(k, v)
    # retries are needed because weight order is random, although wrong order
    # is unlikely.
    for retry in retries:
        with retry:
            params = conninfo_to_dict(conninfo)
            params = psycopg._dns.resolve_srv(
                params)  # type: ignore[attr-defined]
            assert conninfo_to_dict(want) == params
示例#5
0
async def test_connect_args(monkeypatch, pgconn, args, kwargs, want):
    the_conninfo: str

    def fake_connect(conninfo):
        nonlocal the_conninfo
        the_conninfo = conninfo
        return pgconn
        yield

    monkeypatch.setattr(psycopg.connection, "connect", fake_connect)
    conn = await psycopg.AsyncConnection.connect(*args, **kwargs)
    assert conninfo_to_dict(the_conninfo) == conninfo_to_dict(want)
    await conn.close()
示例#6
0
async def test_resolve_hostaddr_conn(monkeypatch, fake_resolve):
    got = []

    def fake_connect_gen(conninfo, **kwargs):
        got.append(conninfo)
        1 / 0

    monkeypatch.setattr(psycopg.AsyncConnection, "_connect_gen",
                        fake_connect_gen)

    # TODO: not enabled by default, but should be usable to make a subclass
    class AsyncDnsConnection(psycopg.AsyncConnection[Row]):
        @classmethod
        async def _get_connection_params(cls, conninfo, **kwargs):
            params = await super()._get_connection_params(conninfo, **kwargs)
            params = await (
                psycopg._dns.
                resolve_hostaddr_async(  # type: ignore[attr-defined]
                    params))
            return params

    with pytest.raises(ZeroDivisionError):
        await AsyncDnsConnection.connect("host=foo.com")

    assert len(got) == 1
    want = {"host": "foo.com", "hostaddr": "1.1.1.1"}
    assert conninfo_to_dict(got[0]) == want
示例#7
0
 def test_get_params(self, conn, dsn):
     info = conn.info.get_parameters()
     for k, v in conninfo_to_dict(dsn).items():
         if k != "password":
             assert info.get(k) == v
         else:
             assert k not in info
示例#8
0
def test_srv_bad(conninfo, env, fake_srv, monkeypatch):
    if env:
        for k, v in env.items():
            monkeypatch.setenv(k, v)
    params = conninfo_to_dict(conninfo)
    with pytest.raises(psycopg.OperationalError):
        psycopg._dns.resolve_srv(params)  # type: ignore[attr-defined]
示例#9
0
async def test_resolve_hostaddr_async_bad(monkeypatch, conninfo, env,
                                          fake_resolve):
    if env:
        for k, v in env.items():
            monkeypatch.setenv(k, v)
    params = conninfo_to_dict(conninfo)
    with pytest.raises(psycopg.Error):
        await psycopg._dns.resolve_hostaddr_async(  # type: ignore[attr-defined]
            params)
示例#10
0
    def test_dsn_env(self, dsn, monkeypatch):
        dsn = conninfo_to_dict(dsn)
        dsn.pop("application_name", None)

        monkeypatch.delenv("PGAPPNAME", raising=False)
        with psycopg.connect(**dsn) as conn:
            assert "application_name=" not in conn.info.dsn

        monkeypatch.setenv("PGAPPNAME", "hello test")
        with psycopg.connect(**dsn) as conn:
            assert "application_name='hello test'" in conn.info.dsn
示例#11
0
    def test_get_params_env(self, dsn, monkeypatch):
        dsn = conninfo_to_dict(dsn)
        dsn.pop("application_name", None)

        monkeypatch.delenv("PGAPPNAME", raising=False)
        with psycopg.connect(**dsn) as conn:
            assert "application_name" not in conn.info.get_parameters()

        monkeypatch.setenv("PGAPPNAME", "hello test")
        with psycopg.connect(**dsn) as conn:
            assert (
                conn.info.get_parameters()["application_name"] == "hello test")
示例#12
0
    def __init__(self, server_dsn):
        cdict = conninfo.conninfo_to_dict(server_dsn)

        # Get server params
        self.server_port = cdict.get("port", "5432")
        if "host" not in cdict or cdict["host"].startswith("/"):
            self.server_host = "localhost"
        else:
            self.server_host = cdict["host"]

        # Get client params
        self.client_host = "localhost"
        self.client_port = self._get_random_port()

        # Make a connection string to the proxy
        cdict["host"] = self.client_host
        cdict["port"] = self.client_port
        cdict["sslmode"] = "disable"  # not supported by the proxy
        self.client_dsn = conninfo.make_conninfo(**cdict)

        # The running proxy process
        self.proc = None
示例#13
0
def test_make_conninfo(conninfo, kwargs, exp):
    out = make_conninfo(conninfo, **kwargs)
    assert conninfo_to_dict(out) == conninfo_to_dict(exp)
示例#14
0
def test_get_connection_params(dsn, kwargs, exp):
    params = Connection._get_connection_params(dsn, **kwargs)
    conninfo = make_conninfo(**params)
    assert conninfo_to_dict(conninfo) == exp[0]
    assert params.get("connect_timeout") == exp[1]
示例#15
0
def test__conninfo_connect_timeout(dsn, kwargs, exp):
    conninfo, connect_timeout = _conninfo_connect_timeout(dsn, **kwargs)
    assert conninfo_to_dict(conninfo) == exp[0]
    assert connect_timeout == exp[1]
示例#16
0
async def test_resolve_hostaddr_async(conninfo, want, env, fake_resolve):
    params = conninfo_to_dict(conninfo)
    params = await psycopg._dns.resolve_hostaddr_async(  # type: ignore[attr-defined]
        params)
    assert conninfo_to_dict(want) == params
示例#17
0
async def test_get_connection_params(dsn, kwargs, exp):
    params = await AsyncConnection._get_connection_params(dsn, **kwargs)
    conninfo = make_conninfo(**params)
    assert conninfo_to_dict(conninfo) == exp[0]
    assert params["connect_timeout"] == exp[1]
示例#18
0
 def test_dsn(self, conn, dsn):
     dsn = conn.info.dsn
     assert "password" not in dsn
     for k, v in conninfo_to_dict(dsn).items():
         if k != "password":
             assert f"{k}=" in dsn
示例#19
0
def test_conninfo_to_dict(conninfo, exp):
    assert conninfo_to_dict(conninfo) == exp
示例#20
0
文件: test_dns.py 项目: dlax/psycopg3
async def test_resolve_hostaddr_async(conninfo, want, env, fake_resolve):
    params = conninfo_to_dict(conninfo)
    params = await psycopg._dns.resolve_hostaddr_async(params)
    assert conninfo_to_dict(want) == params