This is an automated email from the ASF dual-hosted git repository.

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 3b1b7eae8a fix(register): report the bootstrap instance type from the 
independent heartbeat (#7696) (#7722)
3b1b7eae8a is described below

commit 3b1b7eae8a3a8d374f7bf8b1ce11cf0af520fe93
Author: konlue <[email protected]>
AuthorDate: Mon Oct 19 15:33:49 2026 +0800

    fix(register): report the bootstrap instance type from the independent 
heartbeat (#7696) (#7722)
---
 .../register/client/beat/HeartbeatListener.java      |  2 +-
 .../register/client/beat/HeartbeatListenerTest.java  | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git 
a/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
 
b/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
index e27a183020..c393cda0b0 100644
--- 
a/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
+++ 
b/shenyu-register-center/shenyu-register-client-beat/src/main/java/org/apache/shenyu/register/client/beat/HeartbeatListener.java
@@ -105,7 +105,7 @@ public class HeartbeatListener {
             instanceBeatInfoDTO.setInstanceIp(IpUtils.getHost());
             instanceBeatInfoDTO.setNamespaceId(shenyuConfig.getNamespace());
             
instanceBeatInfoDTO.setInstanceInfo(SystemInfoUtils.getSystemInfo());
-            
instanceBeatInfoDTO.setInstanceType(InstanceTypeConstants.BOOTSTRAP_INSTANCE_INFO);
+            
instanceBeatInfoDTO.setInstanceType(InstanceTypeConstants.BOOTSTRAP_INSTANCE_TYPE);
             sendHeartbeat(instanceBeatInfoDTO);
             }, INITIAL_DELAY, CHECK_PERIOD, TimeUnit.SECONDS
         );
diff --git 
a/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
 
b/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
index 0bb502f731..311127594f 100644
--- 
a/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
+++ 
b/shenyu-register-center/shenyu-register-client-beat/src/test/java/org/apache/shenyu/register/client/beat/HeartbeatListenerTest.java
@@ -19,7 +19,10 @@ package org.apache.shenyu.register.client.beat;
 
 import org.apache.shenyu.common.config.ShenyuConfig;
 import org.apache.shenyu.common.constant.Constants;
+import org.apache.shenyu.common.constant.InstanceTypeConstants;
+import org.apache.shenyu.common.utils.GsonUtils;
 import org.apache.shenyu.common.utils.SystemInfoUtils;
+import org.apache.shenyu.register.common.dto.InstanceBeatInfoDTO;
 import org.apache.shenyu.register.common.utils.RegisterUtils;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -111,6 +114,23 @@ class HeartbeatListenerTest {
         }
     }
 
+    @Test
+    void testPeriodicHeartbeatReportsBootstrapInstanceType() {
+        try (MockedConstruction<ScheduledThreadPoolExecutor> executors = 
Mockito.mockConstruction(ScheduledThreadPoolExecutor.class);
+                MockedStatic<SystemInfoUtils> ignored = 
Mockito.mockStatic(SystemInfoUtils.class);
+                MockedStatic<RegisterUtils> register = 
Mockito.mockStatic(RegisterUtils.class)) {
+            register.when(() -> RegisterUtils.doLogin(anyString(), 
anyString(), anyString())).thenReturn(Optional.of("mock-token"));
+            heartbeatListener = new HeartbeatListener(config, shenyuConfig, 
serverProperties);
+            ArgumentCaptor<Runnable> periodic = 
ArgumentCaptor.forClass(Runnable.class);
+            
Mockito.verify(executors.constructed().get(0)).scheduleAtFixedRate(periodic.capture(),
 Mockito.eq(0L), Mockito.eq(5L), Mockito.eq(TimeUnit.SECONDS));
+            periodic.getValue().run();
+            ArgumentCaptor<String> payload = 
ArgumentCaptor.forClass(String.class);
+            register.verify(() -> RegisterUtils.doHeartBeat(payload.capture(), 
anyString(), anyString(), anyString()), Mockito.atLeastOnce());
+            InstanceBeatInfoDTO reported = 
GsonUtils.getInstance().fromJson(payload.getAllValues().get(0), 
InstanceBeatInfoDTO.class);
+            assertEquals(InstanceTypeConstants.BOOTSTRAP_INSTANCE_TYPE, 
reported.getInstanceType());
+        }
+    }
+
     @Test
     void testHeartbeatListenerCreation() {
 

Reply via email to