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

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


The following commit(s) were added to refs/heads/master by this push:
     new d08fcb7094 test: Use mock to eliminate BookieSocketAddressTest 
dependency on local system configuration (#4711)
d08fcb7094 is described below

commit d08fcb7094f404aca5f0351feedd744d40ea2602
Author: JiangHaiting <[email protected]>
AuthorDate: Wed Mar 18 17:35:26 2026 +0800

    test: Use mock to eliminate BookieSocketAddressTest dependency on local 
system configuration (#4711)
    
    - Replace direct network calls with Mockito mocks in BookieSocketAddressTest
    - Add mockHostnameIPSetup helper method to simulate DNS.getDefaultIP 
behavior
    - Remove dependency on actual network configuration and loopback addresses
    - Ensure consistent test behavior across different environments
    - All 4 existing tests pass with the mock implementation
    
    Co-authored-by: JiangHaiting <[email protected]>
    Co-authored-by: Lari Hotari <[email protected]>
---
 .../bookkeeper/bookie/BookieSocketAddressTest.java | 49 +++++++++++++++-------
 1 file changed, 33 insertions(+), 16 deletions(-)

diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieSocketAddressTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieSocketAddressTest.java
index 8962318486..4611a2f29c 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieSocketAddressTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieSocketAddressTest.java
@@ -22,14 +22,22 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import com.google.common.net.InetAddresses;
-import java.net.InetAddress;
 import java.net.UnknownHostException;
 import org.apache.bookkeeper.conf.ServerConfiguration;
 import org.apache.bookkeeper.net.BookieSocketAddress;
+import org.apache.bookkeeper.net.DNS;
 import org.junit.Test;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
 
 public class BookieSocketAddressTest {
 
+    private MockedStatic<DNS> mockHostnameIPSetup(String mockHostAddress) {
+        MockedStatic<DNS> mockedDNS = Mockito.mockStatic(DNS.class);
+        mockedDNS.when(() -> 
DNS.getDefaultIP("default")).thenReturn(mockHostAddress);
+        return mockedDNS;
+    }
+
     private void testAdvertisedWithLoopbackAddress(String address) throws 
UnknownHostException {
         ServerConfiguration conf = new ServerConfiguration();
         conf.setAdvertisedAddress(address);
@@ -49,29 +57,38 @@ public class BookieSocketAddressTest {
 
     @Test
     public void testAdvertisedWithNonLoopbackAddress() throws 
UnknownHostException {
-        String hostAddress = InetAddress.getLocalHost().getHostAddress();
-        if (hostAddress == null) {
-            throw new UnknownHostException("Host address is null");
+        // Mock to return a non-loopback address
+        try (MockedStatic<DNS> mockedDNS = 
mockHostnameIPSetup("192.168.1.100")) {
+            ServerConfiguration conf = new ServerConfiguration();
+            conf.setAllowLoopback(false);
+            conf.setAdvertisedAddress("192.168.1.100");
+            BookieSocketAddress bookieAddress = getBookieAddress(conf);
+            assertThat(bookieAddress.getHostName()).isEqualTo("192.168.1.100");
         }
-        ServerConfiguration conf = new ServerConfiguration();
-        conf.setAllowLoopback(false);
-        conf.setAdvertisedAddress(hostAddress);
-        BookieSocketAddress bookieAddress = getBookieAddress(conf);
-        assertThat(bookieAddress.getHostName()).isEqualTo(hostAddress);
     }
 
     @Test
     public void testBookieAddressIsIPAddressByDefault() throws 
UnknownHostException {
-        ServerConfiguration conf = new ServerConfiguration();
-        BookieSocketAddress bookieAddress = getBookieAddress(conf);
-        
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isTrue();
+        // Mock to return a non-loopback address
+        try (MockedStatic<DNS> mockedDNS = 
mockHostnameIPSetup("192.168.1.100")) {
+            ServerConfiguration conf = new ServerConfiguration();
+            // Do not allow loopback addresses
+            conf.setAllowLoopback(false);
+            BookieSocketAddress bookieAddress = getBookieAddress(conf);
+            
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isTrue();
+        }
     }
 
     @Test
     public void testBookieAddressIsHostname() throws UnknownHostException {
-        ServerConfiguration conf = new ServerConfiguration();
-        conf.setUseHostNameAsBookieID(true);
-        BookieSocketAddress bookieAddress = getBookieAddress(conf);
-        
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isFalse();
+        // Mock to return localhost address which can be resolved to a hostname
+        try (MockedStatic<DNS> mockedDNS = mockHostnameIPSetup("127.0.0.1")) {
+            ServerConfiguration conf = new ServerConfiguration();
+            conf.setUseHostNameAsBookieID(true);
+            // Allow loopback addresses since we're testing hostname resolution
+            conf.setAllowLoopback(true);
+            BookieSocketAddress bookieAddress = getBookieAddress(conf);
+            
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isFalse();
+        }
     }
 }

Reply via email to