From a00e44d839f2f3cc6152d6baace9ce1521aff742 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Sat, 8 Aug 2020 20:55:39 +0100 Subject: [PATCH] More complete string escaping test --- tests/pq/test_escaping.py | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tests/pq/test_escaping.py b/tests/pq/test_escaping.py index 30015559e..d4b8c8953 100644 --- a/tests/pq/test_escaping.py +++ b/tests/pq/test_escaping.py @@ -19,7 +19,12 @@ def test_escape_literal(pgconn, data, want): assert out == want -def test_escape_literal_1char(pgconn): +@pytest.mark.parametrize("scs", ["on", "off"]) +def test_escape_literal_1char(pgconn, scs): + res = pgconn.exec_( + f"set standard_conforming_strings to {scs}".encode("ascii") + ) + assert res.status == pq.ExecStatus.COMMAND_OK esc = pq.Escaping(pgconn) special = {b"'": b"''''", b"\\": b" E'\\\\'"} for c in range(1, 128): @@ -55,7 +60,12 @@ def test_escape_identifier(pgconn, data, want): assert out == want -def test_escape_identifier_1char(pgconn): +@pytest.mark.parametrize("scs", ["on", "off"]) +def test_escape_identifier_1char(pgconn, scs): + res = pgconn.exec_( + f"set standard_conforming_strings to {scs}".encode("ascii") + ) + assert res.status == pq.ExecStatus.COMMAND_OK esc = pq.Escaping(pgconn) special = {b'"': b'""""', b"\\": b'"\\"'} for c in range(1, 128): @@ -91,9 +101,14 @@ def test_escape_string(pgconn, data, want): assert out == want -def test_escape_string_1char(pgconn): +@pytest.mark.parametrize("scs", ["on", "off"]) +def test_escape_string_1char(pgconn, scs): esc = pq.Escaping(pgconn) - special = {b"'": b"''", b"\\": b"\\"} + res = pgconn.exec_( + f"set standard_conforming_strings to {scs}".encode("ascii") + ) + assert res.status == pq.ExecStatus.COMMAND_OK + special = {b"'": b"''", b"\\": b"\\" if scs == "on" else b"\\\\"} for c in range(1, 128): data = bytes([c]) rv = esc.escape_string(data) @@ -112,6 +127,15 @@ def test_escape_string_noconn(pgconn): esc.escape_string(b"hi") +def test_escape_string_badenc(pgconn): + res = pgconn.exec_(b"set client_encoding to 'UTF8'") + assert res.status == pq.ExecStatus.COMMAND_OK + data = "\u20ac".encode("utf8")[:-1] + esc = pq.Escaping(pgconn) + with pytest.raises(psycopg3.OperationalError): + esc.escape_string(data) + + @pytest.mark.parametrize( "data", [(b"hello\00world"), (b"\00\00\00\00")], ) -- 2.47.2