@@ -264,6 +264,58 @@ def test_on_connect_fail_auth(self, mock_read_response, mock_send_command):
264
264
mock_send_command .assert_called ()
265
265
mock_read_response .assert_called ()
266
266
267
+ @patch .object (Connection , 'send_command' )
268
+ @patch .object (Connection , 'read_response' )
269
+ def test_on_connect_auth_with_password_only (
270
+ self , mock_read_response , mock_send_command ):
271
+ """Test on_connect handling of password-only AUTH for Redis versions below 6.0.0 without HELLO command"""
272
+ conn = Connection ()
273
+
274
+ conn ._parser = MagicMock ()
275
+ conn ._parser .on_connect .return_value = None
276
+ conn .credential_provider = None
277
+ conn .username = None
278
+ conn .password = "password"
279
+ conn .protocol = 1
280
+ conn .client_name = "test-client"
281
+ conn .lib_name = "test"
282
+ conn .lib_version = "1234"
283
+ conn .db = 1
284
+ conn .client_cache = True
285
+
286
+ # command response to simulate Redis < 6.0.0 behavior
287
+ mock_read_response .side_effect = itertools .cycle ([
288
+ Exception ("ERR HELLO" ), # HELLO (fails)
289
+ b'QUEUED' , # MULTI
290
+ b'QUEUED' , # AUTH
291
+ b'QUEUED' , # CLIENT SETNAME
292
+ b'QUEUED' , # CLIENT SETINFO LIB-NAME
293
+ b'QUEUED' , # CLIENT SETINFO LIB-VER
294
+ b'QUEUED' , # SELECT
295
+ b'QUEUED' , # CLIENT TRACKING ON
296
+ [
297
+ b'OK' , # AUTH response
298
+ b'OK' , # CLIENT SETNAME response
299
+ b'OK' , # CLIENT SETINFO LIB-NAME response
300
+ b'OK' , # CLIENT SETINFO LIB-VER response
301
+ b'OK' , # SELECT response
302
+ b'OK' # CLIENT TRACKING ON response
303
+ ]
304
+ ])
305
+
306
+ conn .on_connect ()
307
+
308
+ mock_send_command .assert_any_call ('HELLO' , 1 , 'AUTH' , 'default' , 'password' ),
309
+ mock_send_command .assert_any_call ('MULTI' ),
310
+ mock_send_command .assert_any_call (
311
+ 'AUTH' , 'default' , 'password' , check_health = False )
312
+ mock_send_command .assert_any_call ('CLIENT' , 'SETNAME' , 'test-client' )
313
+ mock_send_command .assert_any_call ('CLIENT' , 'SETINFO' , 'LIB-NAME' , 'test' )
314
+ mock_send_command .assert_any_call ('CLIENT' , 'SETINFO' , 'LIB-VER' , '1234' )
315
+ mock_send_command .assert_any_call ('SELECT' , 1 )
316
+ mock_send_command .assert_any_call ('CLIENT' , 'TRACKING' , 'ON' )
317
+ mock_send_command .assert_any_call ('EXEC' )
318
+ mock_read_response .assert_called ()
267
319
268
320
269
321
@pytest .mark .onlynoncluster
0 commit comments