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

gongchao 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 b3cb1b074 [test] add RedisClusterCollectImplTest (#1789)
b3cb1b074 is described below

commit b3cb1b074c6907f98d94f3e73b79f78499928d93
Author: crossoverJie <[email protected]>
AuthorDate: Mon Apr 22 17:26:59 2024 +0800

    [test] add RedisClusterCollectImplTest (#1789)
---
 .../collect/redis/RedisClusterCollectImplTest.java | 104 ++++++++++++++++++---
 1 file changed, 92 insertions(+), 12 deletions(-)

diff --git 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
index 29b9628e2..ebad258ca 100644
--- 
a/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
+++ 
b/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java
@@ -17,6 +17,15 @@
 
 package org.apache.hertzbeat.collector.collect.redis;
 
+import static 
org.apache.hertzbeat.common.constants.CommonConstants.TYPE_STRING;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import io.lettuce.core.RedisURI;
+import io.lettuce.core.cluster.RedisClusterClient;
+import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
+import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands;
+import io.lettuce.core.cluster.models.partitions.Partitions;
+import io.lettuce.core.cluster.models.partitions.RedisClusterNode;
+import io.lettuce.core.resource.ClientResources;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.hertzbeat.common.entity.job.Metrics;
@@ -27,6 +36,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 /**
@@ -36,33 +46,103 @@ import org.mockito.junit.jupiter.MockitoExtension;
  */
 @ExtendWith(MockitoExtension.class)
 public class RedisClusterCollectImplTest {
+    
+    @InjectMocks
+    private RedisCommonCollectImpl redisClusterCollect;
+
 
     @Mock
-    private RedisProtocol redisProtocol;
+    private StatefulRedisClusterConnection<String, String> connection;
 
-    @InjectMocks
-    private RedisCommonCollectImpl redisClusterCollect;
+    @Mock
+    private RedisAdvancedClusterCommands<String, String> cmd;
+
+    @Mock
+    private RedisClusterClient client;
 
     @BeforeEach
     void setUp() {
-        redisProtocol = RedisProtocol.builder()
-                .host("192.168.77.100")
-                .port("6380")
-                .build();
     }
 
-    @Test
-    void getInstance() {
-    }
+
 
     @Test
-    void collect() {
+    void testCollect(){
+        RedisProtocol redisProtocol = RedisProtocol.builder()
+                .host("127.0.0.1")
+                .port("6379")
+                .pattern("3")
+                .build();
+        String infoTemp = """
+                # Cluster
+                cluster_enabled:%s
+                """;
+        String clusterEnabled = "1";
+        String info = String.format(infoTemp, clusterEnabled);
+
+        String clusterKnownNodes = "2";
+        String clusterInfoTemp = """
+                cluster_slots_fail:0
+                cluster_known_nodes:%s
+                """;
+        String clusterInfo = String.format(clusterInfoTemp, clusterKnownNodes);
         CollectRep.MetricsData.Builder builder = 
CollectRep.MetricsData.newBuilder();
         List<String> aliasField = new ArrayList<>();
-        aliasField.add("used_cpu_sys");
+        aliasField.add("cluster_known_nodes");
+        aliasField.add("cluster_enabled");
+        aliasField.add("identity");
+        List<Metrics.Field> fields = new ArrayList<>();
+        fields.add(Metrics.Field.builder()
+                .field("cluster_enabled")
+                .type(TYPE_STRING)
+                .build());
+        fields.add(Metrics.Field.builder()
+                .field("cluster_known_nodes")
+                .type(TYPE_STRING)
+                .build());
+
         Metrics metrics = new Metrics();
+        metrics.setName("cluster");
         metrics.setRedis(redisProtocol);
         metrics.setAliasFields(aliasField);
+        metrics.setFields(fields);
+
+
+        
Mockito.mockStatic(RedisClusterClient.class).when(()->RedisClusterClient.create(Mockito.any(ClientResources.class),
+                Mockito.any(RedisURI.class))).thenReturn(client);
+        Mockito.when(client.connect()).thenReturn(connection);
+
+        Partitions partitions = new Partitions();
+        RedisClusterNode node = new RedisClusterNode();
+        String uri1 = "127.0.0.1:6379";
+        node.setUri(RedisURI.create("redis://" + uri1));
+        partitions.add(node);
+        RedisClusterNode node2 = new RedisClusterNode();
+        String uri2 = "127.0.0.2:6379";
+        node2.setUri(RedisURI.create("redis://" + uri2));
+        partitions.add(node2);
+
+        Mockito.when(connection.getPartitions()).thenReturn(partitions);
+
+        Mockito.when(connection.sync()).thenReturn(cmd);
+        Mockito.when(cmd.info(metrics.getName())).thenReturn(info);
+        Mockito.when(cmd.clusterInfo()).thenReturn(clusterInfo);
+
         redisClusterCollect.collect(builder, 1L, "test", metrics);
+
+        assertEquals(builder.getCode(), CollectRep.Code.SUCCESS);
+        assertEquals(builder.getValuesCount(), 2);
+        for (int i = 0; i < builder.getValuesList().size(); i++) {
+            CollectRep.ValueRow row = builder.getValues(i);
+            assertEquals(row.getColumnsCount(), 3);
+            assertEquals(row.getColumns(0), clusterKnownNodes);
+            assertEquals(row.getColumns(1), clusterEnabled);
+            if (i == 0) {
+                assertEquals(row.getColumns(2), uri1);
+            } else {
+                assertEquals(row.getColumns(2), uri2);
+            }
+        }
+
     }
 }


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

Reply via email to