diff --git a/redis/connection.py b/redis/connection.py index 24614824c5..d35980c167 100644 --- a/redis/connection.py +++ b/redis/connection.py @@ -1153,6 +1153,7 @@ def __init__( retry=None, redis_connect_func=None, credential_provider: Optional[CredentialProvider] = None, + command_packer=None, ): """ Initialize a new UnixDomainSocketConnection. @@ -1202,6 +1203,7 @@ def __init__( self.set_parser(parser_class) self._connect_callbacks = [] self._buffer_cutoff = 6000 + self._command_packer = self._construct_command_packer(command_packer) def repr_pieces(self): pieces = [("path", self.path), ("db", self.db)] diff --git a/tests/test_connection.py b/tests/test_connection.py index e0b53cdf37..25b4118b2c 100644 --- a/tests/test_connection.py +++ b/tests/test_connection.py @@ -7,7 +7,13 @@ import redis from redis.backoff import NoBackoff -from redis.connection import Connection, HiredisParser, PythonParser +from redis.connection import ( + Connection, + HiredisParser, + PythonParser, + SSLConnection, + UnixDomainSocketConnection, +) from redis.exceptions import ConnectionError, InvalidResponse, TimeoutError from redis.retry import Retry from redis.utils import HIREDIS_AVAILABLE @@ -163,3 +169,39 @@ def test_connection_parse_response_resume(r: redis.Redis, parser_class): pytest.fail("didn't receive a response") assert response assert i > 0 + + +@pytest.mark.onlynoncluster +@pytest.mark.parametrize( + "Class", + [ + Connection, + SSLConnection, + UnixDomainSocketConnection, + ], +) +def test_pack_command(Class): + """ + This test verifies that the pack_command works + on all supported connections. #2581 + """ + cmd = ( + "HSET", + "foo", + "key", + "value1", + b"key_b", + b"bytes str", + b"key_i", + 67, + "key_f", + 3.14159265359, + ) + expected = ( + b"*10\r\n$4\r\nHSET\r\n$3\r\nfoo\r\n$3\r\nkey\r\n$6\r\nvalue1\r\n" + b"$5\r\nkey_b\r\n$9\r\nbytes str\r\n$5\r\nkey_i\r\n$2\r\n67\r\n$5" + b"\r\nkey_f\r\n$13\r\n3.14159265359\r\n" + ) + + actual = Class().pack_command(*cmd)[0] + assert actual == expected, f"actual = {actual}, expected = {expected}"