Skip to content

Commit d08fcb7

Browse files
Jason918JiangHaitinglhotari
authored
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 <jasonxjiang@tencent.com> Co-authored-by: Lari Hotari <lhotari@users.noreply.github.com>
1 parent 951f10d commit d08fcb7

1 file changed

Lines changed: 33 additions & 16 deletions

File tree

bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieSocketAddressTest.java

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,22 @@
2222
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2323

2424
import com.google.common.net.InetAddresses;
25-
import java.net.InetAddress;
2625
import java.net.UnknownHostException;
2726
import org.apache.bookkeeper.conf.ServerConfiguration;
2827
import org.apache.bookkeeper.net.BookieSocketAddress;
28+
import org.apache.bookkeeper.net.DNS;
2929
import org.junit.Test;
30+
import org.mockito.MockedStatic;
31+
import org.mockito.Mockito;
3032

3133
public class BookieSocketAddressTest {
3234

35+
private MockedStatic<DNS> mockHostnameIPSetup(String mockHostAddress) {
36+
MockedStatic<DNS> mockedDNS = Mockito.mockStatic(DNS.class);
37+
mockedDNS.when(() -> DNS.getDefaultIP("default")).thenReturn(mockHostAddress);
38+
return mockedDNS;
39+
}
40+
3341
private void testAdvertisedWithLoopbackAddress(String address) throws UnknownHostException {
3442
ServerConfiguration conf = new ServerConfiguration();
3543
conf.setAdvertisedAddress(address);
@@ -49,29 +57,38 @@ public void testAdvertisedWithLoopbackAddress() throws UnknownHostException {
4957

5058
@Test
5159
public void testAdvertisedWithNonLoopbackAddress() throws UnknownHostException {
52-
String hostAddress = InetAddress.getLocalHost().getHostAddress();
53-
if (hostAddress == null) {
54-
throw new UnknownHostException("Host address is null");
60+
// Mock to return a non-loopback address
61+
try (MockedStatic<DNS> mockedDNS = mockHostnameIPSetup("192.168.1.100")) {
62+
ServerConfiguration conf = new ServerConfiguration();
63+
conf.setAllowLoopback(false);
64+
conf.setAdvertisedAddress("192.168.1.100");
65+
BookieSocketAddress bookieAddress = getBookieAddress(conf);
66+
assertThat(bookieAddress.getHostName()).isEqualTo("192.168.1.100");
5567
}
56-
ServerConfiguration conf = new ServerConfiguration();
57-
conf.setAllowLoopback(false);
58-
conf.setAdvertisedAddress(hostAddress);
59-
BookieSocketAddress bookieAddress = getBookieAddress(conf);
60-
assertThat(bookieAddress.getHostName()).isEqualTo(hostAddress);
6168
}
6269

6370
@Test
6471
public void testBookieAddressIsIPAddressByDefault() throws UnknownHostException {
65-
ServerConfiguration conf = new ServerConfiguration();
66-
BookieSocketAddress bookieAddress = getBookieAddress(conf);
67-
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isTrue();
72+
// Mock to return a non-loopback address
73+
try (MockedStatic<DNS> mockedDNS = mockHostnameIPSetup("192.168.1.100")) {
74+
ServerConfiguration conf = new ServerConfiguration();
75+
// Do not allow loopback addresses
76+
conf.setAllowLoopback(false);
77+
BookieSocketAddress bookieAddress = getBookieAddress(conf);
78+
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isTrue();
79+
}
6880
}
6981

7082
@Test
7183
public void testBookieAddressIsHostname() throws UnknownHostException {
72-
ServerConfiguration conf = new ServerConfiguration();
73-
conf.setUseHostNameAsBookieID(true);
74-
BookieSocketAddress bookieAddress = getBookieAddress(conf);
75-
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isFalse();
84+
// Mock to return localhost address which can be resolved to a hostname
85+
try (MockedStatic<DNS> mockedDNS = mockHostnameIPSetup("127.0.0.1")) {
86+
ServerConfiguration conf = new ServerConfiguration();
87+
conf.setUseHostNameAsBookieID(true);
88+
// Allow loopback addresses since we're testing hostname resolution
89+
conf.setAllowLoopback(true);
90+
BookieSocketAddress bookieAddress = getBookieAddress(conf);
91+
assertThat(InetAddresses.isInetAddress(bookieAddress.getHostName())).isFalse();
92+
}
7693
}
7794
}

0 commit comments

Comments
 (0)