From 7b1cbbdf99cee8400d92ae6bb7c31023abe089f1 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Sat, 23 May 2020 17:18:58 +1200 Subject: [PATCH] Added further tests about dsn parsing --- tests/test_conninfo.py | 43 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/tests/test_conninfo.py b/tests/test_conninfo.py index 5eacb31dc..93ab89306 100644 --- a/tests/test_conninfo.py +++ b/tests/test_conninfo.py @@ -3,6 +3,12 @@ import pytest from psycopg3.conninfo import make_conninfo, conninfo_to_dict from psycopg3 import ProgrammingError +snowman = "\u2603" + + +class MyString(str): + pass + @pytest.mark.parametrize( "conninfo, kwargs, exp", @@ -10,11 +16,20 @@ from psycopg3 import ProgrammingError ("", {}, ""), ("dbname=foo", {}, "dbname=foo"), ("dbname=foo", {"user": "bar"}, "dbname=foo user=bar"), + ("dbname=sony", {"password": ""}, "dbname=sony password="), ("dbname=foo", {"dbname": "bar"}, "dbname=bar"), ("user=bar", {"dbname": "foo bar"}, "dbname='foo bar' user=bar"), ("", {"dbname": "foo"}, "dbname=foo"), ("", {"dbname": "foo", "user": None}, "dbname=foo"), ("", {"dbname": "a'b"}, r"dbname='a\'b'"), + (f"dbname={snowman}", {}, f"dbname={snowman}"), + ("", {"dbname": snowman}, f"dbname={snowman}"), + ( + "postgresql://host1/test", + {"host": "host2"}, + "dbname=test host=host2", + ), + (MyString(""), {}, ""), ], ) def test_make_conninfo(conninfo, kwargs, exp): @@ -24,7 +39,14 @@ def test_make_conninfo(conninfo, kwargs, exp): @pytest.mark.parametrize( "conninfo, kwargs", - [("dbname=foo bar", {}), ("foo=bar", {}), ("dbname=foo", {"bar": "baz"})], + [ + ("hello", {}), + ("dbname=foo bar", {}), + ("foo=bar", {}), + ("dbname=foo", {"bar": "baz"}), + ("postgresql://tester:secret@/test?port=5433=x", {}), + (f"{snowman}={snowman}", {}), + ], ) def test_make_conninfo_bad(conninfo, kwargs): with pytest.raises(ProgrammingError): @@ -36,9 +58,28 @@ def test_make_conninfo_bad(conninfo, kwargs): [ ("", {}), ("dbname=foo user=bar", {"dbname": "foo", "user": "bar"}), + ("dbname=sony password=", {"dbname": "sony", "password": ""}), ("dbname='foo bar'", {"dbname": "foo bar"}), + ("dbname='a\"b'", {"dbname": 'a"b'}), (r"dbname='a\'b'", {"dbname": "a'b"}), + (r"dbname='a\\b'", {"dbname": r"a\b"}), + (f"dbname={snowman}", {"dbname": snowman}), + ( + "postgresql://tester:secret@/test?port=5433", + { + "user": "tester", + "password": "secret", + "dbname": "test", + "port": "5433", + }, + ), ], ) def test_conninfo_to_dict(conninfo, exp): assert conninfo_to_dict(conninfo) == exp + + +def test_no_munging(): + dsnin = "dbname=a host=b user=c password=d" + dsnout = make_conninfo(dsnin) + assert dsnin == dsnout -- 2.47.2