Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<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);
Expand All @@ -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<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();
}
}
}
Loading