From a9c1b36b63f996e573414140e357b873a0042013 Mon Sep 17 00:00:00 2001 From: liuhy Date: Fri, 24 Jul 2026 22:03:50 -0700 Subject: [PATCH] Normalize consumer diagnostics inputs --- .../group/ConsumerDiagnosticsService.java | 15 +++++++++------ .../group/ConsumerDiagnosticsServiceTest.java | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/server/src/main/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsService.java b/server/src/main/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsService.java index 8bf35f85..45333cc2 100644 --- a/server/src/main/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsService.java +++ b/server/src/main/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsService.java @@ -30,12 +30,15 @@ public class ConsumerDiagnosticsService { private final ConsumerDiagnosticsProvider diagnosticsProvider; public ConsumerStackTraceVO getConsumerStack(String groupName, String clientId) { - if (!StringUtils.hasText(groupName)) { - throw new BusinessException(HttpStatus.BAD_REQUEST.value(), "groupName is required"); - } - if (!StringUtils.hasText(clientId)) { - throw new BusinessException(HttpStatus.BAD_REQUEST.value(), "clientId is required"); + String normalizedGroupName = normalizeRequired(groupName, "groupName"); + String normalizedClientId = normalizeRequired(clientId, "clientId"); + return diagnosticsProvider.getConsumerStack(normalizedGroupName, normalizedClientId); + } + + private String normalizeRequired(String value, String fieldName) { + if (!StringUtils.hasText(value)) { + throw new BusinessException(HttpStatus.BAD_REQUEST.value(), fieldName + " is required"); } - return diagnosticsProvider.getConsumerStack(groupName, clientId); + return value.trim(); } } diff --git a/server/src/test/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsServiceTest.java b/server/src/test/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsServiceTest.java index 7ca5720b..eaebdf32 100644 --- a/server/src/test/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsServiceTest.java +++ b/server/src/test/java/com/rocketmq/studio/instance/group/ConsumerDiagnosticsServiceTest.java @@ -60,6 +60,24 @@ void getConsumerStackShouldDelegateToProvider() { verify(diagnosticsProvider).getConsumerStack("cg-orders", "client-1"); } + @Test + void getConsumerStackShouldTrimInputsBeforeDelegatingToProvider() { + ConsumerStackTraceVO stackTrace = ConsumerStackTraceVO.builder() + .groupName("cg-orders") + .clientId("client-1") + .capturedAt(LocalDateTime.now()) + .threadCount(0) + .threads(List.of()) + .build(); + when(diagnosticsProvider.getConsumerStack("cg-orders", "client-1")).thenReturn(stackTrace); + + ConsumerStackTraceVO result = diagnosticsService.getConsumerStack(" cg-orders ", " client-1 "); + + assertThat(result.getGroupName()).isEqualTo("cg-orders"); + assertThat(result.getClientId()).isEqualTo("client-1"); + verify(diagnosticsProvider).getConsumerStack("cg-orders", "client-1"); + } + @Test void getConsumerStackShouldRejectBlankGroupName() { assertThatThrownBy(() -> diagnosticsService.getConsumerStack(" ", "client-1"))