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

jimin pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 1b63dd0f0c test: fix the NPE on ConsulConfigurationTest method (#7796)
1b63dd0f0c is described below

commit 1b63dd0f0c1734968e3ffe0f66a4a2405ab2571f
Author: lokidundun <[email protected]>
AuthorDate: Thu Nov 20 10:09:07 2025 +0800

    test: fix the NPE on ConsulConfigurationTest method (#7796)
---
 changes/en-us/2.x.md                               |  1 +
 changes/zh-cn/2.x.md                               |  1 +
 .../config/consul/ConsulConfigurationTest.java     | 24 +++++++++++++++-------
 3 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/changes/en-us/2.x.md b/changes/en-us/2.x.md
index 5e511e0a3a..9028c50d32 100644
--- a/changes/en-us/2.x.md
+++ b/changes/en-us/2.x.md
@@ -52,6 +52,7 @@ Add changes here for all PR submitted to the 2.x branch.
 - [[#7761](https://github.com/apache/incubator-seata/pull/7761)] special 
handling is applied to the Byte[] type to ensure the correct primary key value
 - [[#7771](https://github.com/apache/incubator-seata/pull/7771)] Shentongdata 
xa mode should be hold the same connection
 - [[#7785](https://github.com/apache/incubator-seata/pull/7785)] fix the 
failure test
+- [[#7796](https://github.com/apache/incubator-seata/pull/7796)] fix the NPE 
on ConsulConfigurationTest method
 
 
 ### optimize:
diff --git a/changes/zh-cn/2.x.md b/changes/zh-cn/2.x.md
index 112388d45e..adddd6f180 100644
--- a/changes/zh-cn/2.x.md
+++ b/changes/zh-cn/2.x.md
@@ -52,6 +52,7 @@
 - [[#7761](https://github.com/apache/incubator-seata/pull/7761)] 对 Byte[] 
类型进行了特殊处理,以确保主键值正确
 - [[#7771](https://github.com/apache/incubator-seata/pull/7771)] 
确保神通XA模式相同的事务使用相同的XAConnection
 - [[#7785](https://github.com/apache/incubator-seata/pull/7785)] 修复失败的测试方法
+- [[#7796](https://github.com/apache/incubator-seata/pull/7796)] 修复 Consul 
监听器空值 NPE 问题
 
 
 ### optimize:
diff --git 
a/config/seata-config-consul/src/test/java/org/apache/seata/config/consul/ConsulConfigurationTest.java
 
b/config/seata-config-consul/src/test/java/org/apache/seata/config/consul/ConsulConfigurationTest.java
index 6dc8e84933..650ec33f23 100644
--- 
a/config/seata-config-consul/src/test/java/org/apache/seata/config/consul/ConsulConfigurationTest.java
+++ 
b/config/seata-config-consul/src/test/java/org/apache/seata/config/consul/ConsulConfigurationTest.java
@@ -135,26 +135,36 @@ class ConsulConfigurationTest {
 
     @Test
     void testOnChangeEvent_skipWhenValueIsBlank() throws InterruptedException {
-
         String dataId = "seata.properties";
-        ConsulConfiguration.ConsulListener listener = new 
ConsulConfiguration.ConsulListener(dataId, null);
 
+        // Mock the initial call in ConsulListener constructor (2-arg version)
+        GetValue initValue = mock(GetValue.class);
+        when(initValue.getDecodedValue()).thenReturn("dummy");
+        Response<GetValue> initResponse = new Response<>(initValue, 1L, false, 
1L);
+        when(mockConsulClient.getKVValue(eq(dataId), (String) 
isNull())).thenReturn(initResponse);
+
+        // Mock the watch call in onChangeEvent loop (3-arg version)
         GetValue blankValue = mock(GetValue.class);
         when(blankValue.getDecodedValue()).thenReturn("");
-
         Response<GetValue> blankResponse = new Response<>(blankValue, 2L, 
false, 2L);
-        when(mockConsulClient.getKVValue(eq(dataId), isNull(), 
any(QueryParams.class)))
+        when(mockConsulClient.getKVValue(eq(dataId), (String) isNull(), 
any(QueryParams.class)))
                 .thenReturn(blankResponse);
 
+        ConsulConfiguration.ConsulListener listener = new 
ConsulConfiguration.ConsulListener(dataId, null);
+
         // Run onChangeEvent in a separate thread since it loops indefinitely
-        Thread thread = new Thread(() -> listener.onChangeEvent(new 
ConfigurationChangeEvent()));
+        Thread thread = new Thread(() -> {
+            try {
+                listener.onChangeEvent(new ConfigurationChangeEvent());
+            } catch (Exception e) {
+                // ignore
+            }
+        });
         thread.start();
         Thread.sleep(100);
-        // Interrupt to break the loop
         thread.interrupt();
         thread.join(500);
 
-        // Assert: Test passes as long as no exceptions are thrown
         assertTrue(true);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to