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 faa48b75 fix: validate instance updates (#615)
faa48b75 is described below

commit faa48b75e87a442740146a02ad2bfcbda0df3977
Author: yx9o <[email protected]>
AuthorDate: Wed Jul 29 10:11:41 2026 +0800

    fix: validate instance updates (#615)
---
 .../rocketmq/studio/instance/InstanceService.java  |  7 ++++
 .../studio/instance/InstanceServiceTest.java       | 45 ++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/instance/InstanceService.java 
b/server/src/main/java/org/apache/rocketmq/studio/instance/InstanceService.java
index eb4c5aec..4269c9d9 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/instance/InstanceService.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/instance/InstanceService.java
@@ -74,6 +74,13 @@ public class InstanceService {
         InstanceVO existing = instanceRepository.findById(instance.getId())
                 .orElseThrow(() -> new BusinessException(404, "InstanceVO not 
found: " + instance.getId()));
 
+        if (instance.getName() != null && instance.getName().isBlank()) {
+            throw new BusinessException(400, "InstanceVO name is required");
+        }
+        if (instance.getEndpoint() != null && 
instance.getEndpoint().isBlank()) {
+            throw new BusinessException(400, "InstanceVO endpoint is 
required");
+        }
+
         if (instance.getName() != null) {
             existing.setName(instance.getName());
         }
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/instance/InstanceServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/instance/InstanceServiceTest.java
index c59644fd..63dcf377 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/instance/InstanceServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/instance/InstanceServiceTest.java
@@ -31,6 +31,7 @@ import java.util.Optional;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -260,6 +261,50 @@ class InstanceServiceTest {
                 .hasMessage("InstanceVO not found: nonexistent");
     }
 
+    @Test
+    void updateInstanceShouldRejectBlankName() {
+        InstanceVO existing = InstanceVO.builder()
+                .name("existing-name")
+                .endpoint("10.0.1.1:8080")
+                .build();
+        existing.setId("inst-1");
+        InstanceVO update = InstanceVO.builder().name("   ").build();
+        update.setId("inst-1");
+
+        
when(instanceRepository.findById("inst-1")).thenReturn(Optional.of(existing));
+
+        assertThatThrownBy(() -> instanceService.updateInstance(update))
+                .isInstanceOf(BusinessException.class)
+                .hasMessage("InstanceVO name is required")
+                .satisfies(ex -> assertThat(((BusinessException) 
ex).getCode()).isEqualTo(400));
+        assertThat(existing.getName()).isEqualTo("existing-name");
+        verify(instanceRepository, never()).save(any(InstanceVO.class));
+    }
+
+    @Test
+    void 
updateInstanceShouldRejectBlankEndpointWithoutMutatingExistingFields() {
+        InstanceVO existing = InstanceVO.builder()
+                .name("existing-name")
+                .endpoint("10.0.1.1:8080")
+                .build();
+        existing.setId("inst-1");
+        InstanceVO update = InstanceVO.builder()
+                .name("new-name")
+                .endpoint("   ")
+                .build();
+        update.setId("inst-1");
+
+        
when(instanceRepository.findById("inst-1")).thenReturn(Optional.of(existing));
+
+        assertThatThrownBy(() -> instanceService.updateInstance(update))
+                .isInstanceOf(BusinessException.class)
+                .hasMessage("InstanceVO endpoint is required")
+                .satisfies(ex -> assertThat(((BusinessException) 
ex).getCode()).isEqualTo(400));
+        assertThat(existing.getName()).isEqualTo("existing-name");
+        assertThat(existing.getEndpoint()).isEqualTo("10.0.1.1:8080");
+        verify(instanceRepository, never()).save(any(InstanceVO.class));
+    }
+
     @Test
     void deleteInstanceShouldRemoveExistingInstance() {
         InstanceVO existing = InstanceVO.builder().name("to-delete").build();

Reply via email to