anmolnar commented on code in PR #2041:
URL: https://github.com/apache/zookeeper/pull/2041#discussion_r1366872958
##########
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java:
##########
@@ -253,13 +253,39 @@ public void
testGetDesignatedLeaderShouldRecreateSocketAddresses() {
@Test
public void testRecreateSocketAddresses() {
+ InetAddress loopback = InetAddress.getLoopbackAddress();
+ String oldIP = loopback.getHostAddress();
+ String newIP = "1.1.1.1";
+
+ // test case 1: empty MultipleAddresses instance will still be empty
after recreateSocketAddresses
MultipleAddresses multipleAddresses = new MultipleAddresses();
assertEquals(multipleAddresses,
leader.recreateSocketAddresses(multipleAddresses));
- InetSocketAddress addr1 = new
InetSocketAddress(InetAddress.getLoopbackAddress(), PortAssignment.unique());
- InetSocketAddress addr2 = new
InetSocketAddress(InetAddress.getLoopbackAddress(), PortAssignment.unique());
+ // test case 2: The content of MultipleAddresses instance will still
be the same after recreateSocketAddresses if address no change
+ InetSocketAddress addr1 = new InetSocketAddress(loopback,
PortAssignment.unique());
+ InetSocketAddress addr2 = new InetSocketAddress(loopback,
PortAssignment.unique());
multipleAddresses = new MultipleAddresses(Arrays.asList(addr1, addr2));
// Verify after recreateSocketAddresses, the multipleAddresses should
be the same (i.e. under no DNS's interaction)
assertEquals(multipleAddresses,
leader.recreateSocketAddresses(multipleAddresses));
+
+ // test case 3: Simulating the DNS returning different IP address for
the same hostname during recreation.
+ // After recreateSocketAddresses, the MultipleAddresses should contain
the updated IP address instance while other fields unchanged.
+ InetAddress spyInetAddr = Mockito.spy(loopback);
+ InetSocketAddress addr3 = new InetSocketAddress(spyInetAddr,
PortAssignment.unique());
+ // Verify the address is the old IP before recreateSocketAddresses.
+ assertEquals(oldIP, addr3.getAddress().getHostAddress());
+ multipleAddresses = new MultipleAddresses(Arrays.asList(addr3));
+ // simulating the DNS returning different IP address
+ when(spyInetAddr.getHostAddress()).thenReturn(newIP);
+
+ // Verify after recreateSocketAddresses, the multipleAddresses should
have different IP address result
+ MultipleAddresses newMultipleAddress =
leader.recreateSocketAddresses(multipleAddresses);
+ assertNotEquals(multipleAddresses, newMultipleAddress);
+ assertEquals(1, multipleAddresses.getAllAddresses().size());
+ InetSocketAddress newAddr =
multipleAddresses.getAllAddresses().iterator().next();
+ // Verify the hostName should still be the same
+ assertEquals(loopback.getHostName(),
newAddr.getAddress().getHostName());
+ // Verify the IP address has changed.
+ assertEquals(newIP, newAddr.getAddress().getHostAddress());
Review Comment:
lgtm. Thanks!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]