This is an automated email from the ASF dual-hosted git repository.

Duansg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b7831baa6 [bugfix] fix redis acl username authentication (#4403)
5b7831baa6 is described below

commit 5b7831baa629a7e577d1d8d37cc4ec1cb482958e
Author: Liming Deng <[email protected]>
AuthorDate: Sun Sep 27 16:52:33 2026 +0800

    [bugfix] fix redis acl username authentication (#4403)
---
 .../collect/redis/RedisCommonCollectImpl.java      |  6 +--
 .../collect/redis/RedisSingleCollectImplTest.java  | 57 ++++++++++++++++++++++
 2 files changed, 60 insertions(+), 3 deletions(-)

diff --git 
a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
 
b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
index c5b05ff148..a39660cc6c 100644
--- 
a/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
+++ 
b/hertzbeat-collector/hertzbeat-collector-basic/src/main/java/org/apache/hertzbeat/collector/collect/redis/RedisCommonCollectImpl.java
@@ -323,9 +323,9 @@ public class RedisCommonCollectImpl extends AbstractCollect 
{
     private RedisURI redisUri(RedisProtocol redisProtocol, String host, String 
port) {
         RedisURI.Builder redisUriBuilder = 
RedisURI.builder().withHost(host).withPort(Integer.parseInt(port));
         if (StringUtils.hasText(redisProtocol.getUsername())) {
-            redisUriBuilder.withClientName(redisProtocol.getUsername());
-        }
-        if (StringUtils.hasText(redisProtocol.getPassword())) {
+            redisUriBuilder.withAuthentication(redisProtocol.getUsername(),
+                    Objects.requireNonNullElse(redisProtocol.getPassword(), 
"").toCharArray());
+        } else if (StringUtils.hasText(redisProtocol.getPassword())) {
             
redisUriBuilder.withPassword(redisProtocol.getPassword().toCharArray());
         }
         Duration timeout = 
Duration.ofMillis(CollectUtil.getTimeout(redisProtocol.getTimeout()));
diff --git 
a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
 
b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
index 118657ae77..db5cd1c70b 100644
--- 
a/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
+++ 
b/hertzbeat-collector/hertzbeat-collector-basic/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisSingleCollectImplTest.java
@@ -18,7 +18,10 @@
 package org.apache.hertzbeat.collector.collect.redis;
 
 import static 
org.apache.hertzbeat.common.constants.CommonConstants.TYPE_STRING;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import io.lettuce.core.RedisClient;
 import io.lettuce.core.RedisURI;
 import io.lettuce.core.api.StatefulRedisConnection;
@@ -33,11 +36,15 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullAndEmptySource;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.test.util.ReflectionTestUtils;
 
 /**
  * Test case for {@link RedisCommonCollectImpl}
@@ -159,4 +166,54 @@ class RedisSingleCollectImplTest {
         clientMockedStatic.close();
         client.shutdown();
     }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"monitor", "default"})
+    void testAclAuthentication(String username) {
+        RedisURI uri = redisUri(username, "redis-password");
+
+        assertEquals(username, uri.getUsername());
+        assertArrayEquals("redis-password".toCharArray(), uri.getPassword());
+        assertNull(uri.getClientName());
+    }
+
+    @ParameterizedTest
+    @NullAndEmptySource
+    @ValueSource(strings = " ")
+    void testPasswordOnlyAuthentication(String username) {
+        RedisURI uri = redisUri(username, "redis-password");
+
+        assertNull(uri.getUsername());
+        assertArrayEquals("redis-password".toCharArray(), uri.getPassword());
+        assertNull(uri.getClientName());
+    }
+
+    @ParameterizedTest
+    @NullAndEmptySource
+    void testAclAuthenticationWithEmptyPassword(String password) {
+        RedisURI uri = redisUri("monitor", password);
+
+        assertEquals("monitor", uri.getUsername());
+        assertArrayEquals(new char[0], uri.getPassword());
+        assertNull(uri.getClientName());
+    }
+
+    @Test
+    void testNoAuthentication() {
+        RedisURI uri = redisUri(null, null);
+
+        assertNull(uri.getUsername());
+        assertNull(uri.getPassword());
+        assertNull(uri.getClientName());
+    }
+
+    private RedisURI redisUri(String username, String password) {
+        RedisProtocol protocol = RedisProtocol.builder()
+                .username(username)
+                .password(password)
+                .build();
+        RedisURI uri = ReflectionTestUtils.invokeMethod(redisSingleCollect, 
"redisUri", protocol, "localhost", "6379");
+        assertNotNull(uri);
+        return uri;
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to