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 13655576a test(metrics): cover ambiguous dedicated data source 
selection (#5214)
13655576a is described below

commit 13655576a83e17a8b58bb012a400061b96fcd4a2
Author: 健康宝 <[email protected]>
AuthorDate: Fri Oct 9 11:25:05 2026 +0800

    test(metrics): cover ambiguous dedicated data source selection (#5214)
    
    The "more than one dedicated data source -> 409" branch in `MetricsService` 
had no coverage.
    Test-only change, reusing the existing helpers; it pins the 
ambiguous-selection contract so
    relaxing `dedicatedSources.size() == 1` to "take the first one" fails.
---
 .../studio/cluster/metrics/MetricsServiceTest.java | 27 ++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/metrics/MetricsServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/metrics/MetricsServiceTest.java
index 1f19b8835..75cf69c1b 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/cluster/metrics/MetricsServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/cluster/metrics/MetricsServiceTest.java
@@ -620,6 +620,33 @@ class MetricsServiceTest {
         verifyNoInteractions(metricsSourceFactory, metricsSource);
     }
 
+    @Test
+    void queryInstanceShouldRejectAmbiguousDedicatedSourcesTest() {
+        DataSourceVO first = dataSource("ds-1", List.of("instance-a"));
+        DataSourceVO second = dataSource("ds-2", List.of("instance-a"));
+        when(settingsService.listDataSources()).thenReturn(List.of(first, 
second));
+
+        assertThatExceptionOfType(BusinessException.class)
+                .isThrownBy(() -> metricsService.queryInstance("instance-a", 
rawQuery()))
+                .satisfies(exception -> 
assertThat(exception.getCode()).isEqualTo(409));
+        verifyNoInteractions(metricsSourceFactory, metricsSource);
+    }
+
+    @Test
+    void 
queryInstanceShouldRejectDedicatedSourcesEvenWithASoleSharedSourceTest() {
+        // Two dedicated bindings must stay ambiguous even when exactly one 
shared source also
+        // covers the instance: the shared fallback only applies when no 
dedicated source exists.
+        DataSourceVO first = dataSource("ds-1", List.of("instance-a"));
+        DataSourceVO second = dataSource("ds-2", List.of("instance-a"));
+        DataSourceVO shared = dataSource("ds-shared", List.of("instance-a", 
"instance-b"));
+        when(settingsService.listDataSources()).thenReturn(List.of(shared, 
first, second));
+
+        assertThatExceptionOfType(BusinessException.class)
+                .isThrownBy(() -> metricsService.queryInstance("instance-a", 
rawQuery()))
+                .satisfies(exception -> 
assertThat(exception.getCode()).isEqualTo(409));
+        verifyNoInteractions(metricsSourceFactory, metricsSource);
+    }
+
     private DataSourceVO dataSource(String key, List<String> instanceIds) {
         return DataSourceVO.builder()
                 .key(key)

Reply via email to