From 2a2e050d1131e8f7122004160689e98369da3a2d Mon Sep 17 00:00:00 2001 From: JiangHaiting Date: Thu, 5 Feb 2026 16:45:08 +0800 Subject: [PATCH] test: Use mock to eliminate BookieSocketAddressTest dependency on local system configuration - 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 --- .../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 89623184868..4611a2f29c8 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.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 mockHostnameIPSetup(String mockHostAddress) { + MockedStatic 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 void testAdvertisedWithLoopbackAddress() throws UnknownHostException { @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 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 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 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(); + } } }