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)