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

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new c2488ccb test: add regression coverage from closed duplicates (#1497, 
#1498, #1499)
c2488ccb is described below

commit c2488ccb45b7ae66a3a37a6e4fab8a62a02367f4
Author: lizhimins <[email protected]>
AuthorDate: Tue Aug 11 18:02:03 2026 +0800

    test: add regression coverage from closed duplicates (#1497, #1498, #1499)
    
    * fix: persist updated topic metadata
    
    * test: add regression coverage from closed duplicates (#1497, #1498, #1499)
    
    ---------
    
    Co-authored-by: yyqdbngt <[email protected]>
---
 .../studio/ops/alert/AlertServiceTest.java         | 45 ++++++++++++++++++++++
 .../apache/RocketMQAdminClientImplTest.java        | 22 +++++++++++
 2 files changed, 67 insertions(+)

diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
index f764f9ec..ecf8f60a 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/ops/alert/AlertServiceTest.java
@@ -153,6 +153,31 @@ class AlertServiceTest {
                 .contains("expr: rocketmq_consumer_lag_messages > 2000");
     }
 
+    @Test
+    void exportPrometheusRulesYamlShouldDisambiguateDuplicateAlertNames() {
+        AlertRuleVO first = AlertRuleVO.builder()
+                .name("High Lag")
+                .metric("rocketmq_consumer_lag_messages")
+                .operator(">")
+                .threshold(1000)
+                .enabled(true)
+                .build();
+        AlertRuleVO second = AlertRuleVO.builder()
+                .name("High-Lag")
+                .metric("rocketmq_consumer_lag_messages")
+                .operator(">")
+                .threshold(2000)
+                .enabled(true)
+                .build();
+        when(alertRepository.findAllRules()).thenReturn(List.of(first, 
second));
+
+        String result = alertService.exportPrometheusRulesYaml();
+
+        assertThat(result)
+                .contains("- alert: HighLag\n")
+                .contains("- alert: HighLag_2\n");
+    }
+
     @Test
     void 
exportPrometheusRulesYamlShouldRenderReplicationLagRuleWithScopeAndSeverity() {
         AlertRuleVO rule = AlertRuleVO.builder()
@@ -199,6 +224,26 @@ class AlertServiceTest {
                 .contains("severity: warning");
     }
 
+    @Test
+    void exportPrometheusRulesYamlShouldReplaceInvalidPrometheusFields() {
+        AlertRuleVO rule = AlertRuleVO.builder()
+                .name("Malformed rule")
+                .metric("up) or vector(1")
+                .operator("> 0 or")
+                .threshold(10)
+                .duration("5xyz")
+                .enabled(true)
+                .build();
+        when(alertRepository.findAllRules()).thenReturn(List.of(rule));
+
+        String result = alertService.exportPrometheusRulesYaml();
+
+        assertThat(result)
+                .contains("expr: rocketmq_consumer_lag_messages > 10")
+                .contains("for: 5m")
+                .doesNotContain("vector(1", "> 0 or", "5xyz");
+    }
+
     @Test
     void 
exportPrometheusRulesYamlShouldNormalizeSeverityIndependentlyOfDefaultLocale() {
         AlertRuleVO rule = AlertRuleVO.builder()
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQAdminClientImplTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQAdminClientImplTest.java
index 804ec59b..f80e57a6 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQAdminClientImplTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/provider/apache/RocketMQAdminClientImplTest.java
@@ -27,6 +27,7 @@ import org.apache.rocketmq.remoting.protocol.body.ClusterInfo;
 import org.apache.rocketmq.remoting.protocol.route.BrokerData;
 import org.apache.rocketmq.studio.cluster.broker.MqAdminExtFactory;
 import org.apache.rocketmq.studio.common.exception.BusinessException;
+import org.apache.rocketmq.studio.common.domain.enums.TopicType;
 import org.apache.rocketmq.studio.cluster.broker.RuntimeAdminClientResolver;
 import org.apache.rocketmq.studio.instance.group.ConsumerGroupVO;
 import org.apache.rocketmq.studio.instance.topic.TopicVO;
@@ -205,6 +206,27 @@ class RocketMQAdminClientImplTest {
         verify(adminExt, never()).createAndUpdateTopicConfig(anyString(), 
any(TopicConfig.class));
     }
 
+    @Test
+    void updateTopicPersistsTypeAndRemark() throws Exception {
+        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new 
MybatisConfiguration(), ""), RmqTopic.class);
+        RmqTopic existing = new RmqTopic();
+        existing.setTopicType(TopicType.NORMAL.name());
+        existing.setRemark("old remark");
+        
when(adminExt.examineBrokerClusterInfo()).thenReturn(clusterInfoWithMaster());
+        when(topicMapper.selectOne(any())).thenReturn(existing);
+
+        TopicVO topic = new TopicVO();
+        topic.setName("orders");
+        topic.setType(TopicType.FIFO);
+        topic.setRemark("updated remark");
+
+        adminClient.updateTopic(topic);
+
+        assertThat(existing.getTopicType()).isEqualTo(TopicType.FIFO.name());
+        assertThat(existing.getRemark()).isEqualTo("updated remark");
+        verify(topicMapper).updateById(existing);
+    }
+
     @Test
     void topicDeleteUsesSelectedInstanceAndScopesMetadataToCluster() throws 
Exception {
         TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new 
MybatisConfiguration(), ""), RmqTopic.class);

Reply via email to