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(); + } } }