Skip to content

Commit

Permalink
Make TcpServerConnection.equals more robust [HZ-1202] (5.1.z) (#21641)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwart committed Jul 13, 2022
1 parent 7e487db commit a56e6d5
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -231,20 +231,24 @@ public boolean write(OutboundFrame frame) {
}

@Override
public boolean equals(Object o) {
if (this == o) {
public int hashCode() {
return Objects.hash(acceptorSide, connectionId);
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(o instanceof TcpServerConnection)) {
if (obj == null) {
return false;
}
TcpServerConnection that = (TcpServerConnection) o;
return connectionId == that.getConnectionId();
}

@Override
public int hashCode() {
return connectionId;
if (getClass() != obj.getClass()) {
return false;
}
TcpServerConnection other = (TcpServerConnection) obj;
return acceptorSide == other.acceptorSide && connectionId == other.connectionId
&& Objects.equals(remoteAddress, other.remoteAddress);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,12 @@

package com.hazelcast.internal.server.tcp;

import com.hazelcast.internal.networking.Channel;
import com.hazelcast.internal.nio.ConnectionLifecycleListener;
import com.hazelcast.internal.nio.Packet;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;

import java.net.InetSocketAddress;
import java.util.ArrayList;
Expand All @@ -41,6 +44,9 @@ public abstract class TcpServerConnection_AbstractBasicTest extends TcpServerCon

private List<Packet> packetsB;

@Mock
private ConnectionLifecycleListener<TcpServerConnection> mockedListener;

@Before
public void setup() throws Exception {
super.setup();
Expand Down Expand Up @@ -191,5 +197,21 @@ public void test_equals() {
assertNotEquals(connAB, connAC);
assertNotEquals(connAC, connAB);
assertNotEquals(connAB, "foo");

//don't mock if you don't need to
TcpServerConnectionManager cm = connAB.getConnectionManager();
Channel channel = connAB.getChannel();
TcpServerConnection conn1 = new TcpServerConnection(cm, mockedListener, 0, channel, true);
TcpServerConnection conn2 = new TcpServerConnection(cm, mockedListener, 0, channel, true);
TcpServerConnection conn3 = new TcpServerConnection(cm, mockedListener, 0, channel, false);
assertEquals(conn1, conn2);
assertNotEquals(conn1, conn3);
conn1.setRemoteAddress(addressA);
assertNotEquals(conn1, conn2);
conn2.setRemoteAddress(addressB);
assertNotEquals(conn1, conn2);
conn2.setRemoteAddress(addressA);
assertEquals(conn1, conn2);
}

}

0 comments on commit a56e6d5

Please sign in to comment.