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 d6dd637af fix: validate topic deletion names (#2423)
d6dd637af is described below
commit d6dd637afadd469de68b4def0e610926b0bc30fd
Author: xdz997 <[email protected]>
AuthorDate: Fri Aug 21 17:41:49 2026 +0800
fix: validate topic deletion names (#2423)
---
.../rocketmq/studio/instance/topic/MetadataService.java | 2 +-
.../studio/instance/topic/MetadataServiceTest.java | 17 +++++++++++++++++
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git
a/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
b/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
index 2b61fb0b4..bfe9a6a44 100644
---
a/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
+++
b/server/src/main/java/org/apache/rocketmq/studio/instance/topic/MetadataService.java
@@ -117,7 +117,7 @@ public class MetadataService {
public void deleteTopic(String instanceId, String name) {
instanceId = normalizeInstanceId(instanceId);
- resolve(instanceId).deleteTopic(instanceId, name);
+ resolve(instanceId).deleteTopic(instanceId, requireName(name, "topic
name"));
}
diff --git
a/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
b/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
index b02659653..0812728e3 100644
---
a/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
+++
b/server/src/test/java/org/apache/rocketmq/studio/instance/topic/MetadataServiceTest.java
@@ -67,6 +67,7 @@ class MetadataServiceTest {
void routeBlankInstanceIdsToApacheProvider() {
lenient().when(providerRegistry.forVendor(InstanceVendor.APACHE)).thenReturn(apacheProvider);
lenient().when(apacheProvider.vendor()).thenReturn(InstanceVendor.APACHE);
+
lenient().when(providerRegistry.byInstanceId("instance-a")).thenReturn(java.util.Optional.of(apacheProvider));
lenient().when(instanceRepository.findByIdentifier(org.mockito.ArgumentMatchers.anyString()))
.thenReturn(java.util.Optional.empty());
}
@@ -163,6 +164,22 @@ class MetadataServiceTest {
verify(apacheProvider).deleteTopic(null, "topic-to-delete");
}
+ @Test
+ void deleteTopicShouldTrimTopicNameBeforeProviderResolution() {
+ metadataService.deleteTopic("instance-a", " topic-to-delete ");
+
+ verify(apacheProvider).deleteTopic("instance-a", "topic-to-delete");
+ }
+
+ @Test
+ void deleteTopicShouldRejectBlankNameBeforeProviderResolution() {
+ assertThatThrownBy(() -> metadataService.deleteTopic("instance-a", "
"))
+ .isInstanceOf(BusinessException.class)
+ .hasMessage("topic name is required");
+
+ verifyNoInteractions(apacheProvider);
+ }
+
@Test
void topicRuntimeDiagnosticsShouldDelegateWithSelectedInstance() {
BrokerRouteVO route =
BrokerRouteVO.builder().brokerName("broker-a").build();