From 1117be75e92f58159f785d751158ac9bd4f1d0b9 Mon Sep 17 00:00:00 2001 From: liuhy Date: Fri, 31 Jul 2026 00:53:31 -0700 Subject: [PATCH] [ISSUE #684] Fail explicitly when message provider is missing --- .../instance/message/MessageProviderStub.java | 17 +++---- .../message/MessageProviderStubTest.java | 46 +++++++++++++++++++ 2 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 server/src/test/java/org/apache/rocketmq/studio/instance/message/MessageProviderStubTest.java diff --git a/server/src/main/java/org/apache/rocketmq/studio/instance/message/MessageProviderStub.java b/server/src/main/java/org/apache/rocketmq/studio/instance/message/MessageProviderStub.java index db3f04c4..f99882ab 100644 --- a/server/src/main/java/org/apache/rocketmq/studio/instance/message/MessageProviderStub.java +++ b/server/src/main/java/org/apache/rocketmq/studio/instance/message/MessageProviderStub.java @@ -16,10 +16,10 @@ */ package org.apache.rocketmq.studio.instance.message; +import org.apache.rocketmq.studio.common.exception.BusinessException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import java.util.Collections; import java.util.List; @Component @@ -29,16 +29,17 @@ public class MessageProviderStub implements MessageProvider { @Override public List queryMessages(String topic, String msgId, String tag, String key, Long startTime, Long endTime) { - log.warn("MessageProviderStub.queryMessages called - returning empty list"); - return Collections.emptyList(); + log.warn("MessageProviderStub.queryMessages called but no real message provider is configured"); + throw unsupported(); } @Override public TraceRecordVO getMessageTrace(String msgId) { - log.warn("MessageProviderStub.getMessageTrace called - returning empty trace"); - return TraceRecordVO.builder() - .nodes(Collections.emptyList()) - .consumerStatus(Collections.emptyList()) - .build(); + log.warn("MessageProviderStub.getMessageTrace called but no real message provider is configured"); + throw unsupported(); + } + + private BusinessException unsupported() { + return new BusinessException(501, "Message query provider is not configured"); } } diff --git a/server/src/test/java/org/apache/rocketmq/studio/instance/message/MessageProviderStubTest.java b/server/src/test/java/org/apache/rocketmq/studio/instance/message/MessageProviderStubTest.java new file mode 100644 index 00000000..f33fd853 --- /dev/null +++ b/server/src/test/java/org/apache/rocketmq/studio/instance/message/MessageProviderStubTest.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.rocketmq.studio.instance.message; + +import org.apache.rocketmq.studio.common.exception.BusinessException; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class MessageProviderStubTest { + + private final MessageProviderStub provider = new MessageProviderStub(); + + @Test + void queryMessagesShouldFailExplicitlyWhenRealProviderIsMissing() { + assertThatThrownBy(() -> provider.queryMessages("orders", null, null, null, null, null)) + .isInstanceOf(BusinessException.class) + .hasMessage("Message query provider is not configured") + .extracting("code") + .isEqualTo(501); + } + + @Test + void getMessageTraceShouldFailExplicitlyWhenRealProviderIsMissing() { + assertThatThrownBy(() -> provider.getMessageTrace("msg-001")) + .isInstanceOf(BusinessException.class) + .hasMessage("Message query provider is not configured") + .extracting("code") + .isEqualTo(501); + } +}