Skip to content

Commit

Permalink
handling IllegalArgumentException caused by Discovery Disabled
Browse files Browse the repository at this point in the history
* Update ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/discovery/Endpoint.java

Co-authored-by: Sally MacFarlane <[email protected]>
Signed-off-by: Vaidik <[email protected]>

* loopback address
* use constant

Signed-off-by: Sally MacFarlane <[email protected]>

---------

Signed-off-by: Vaidik <[email protected]>
Signed-off-by: Sally MacFarlane <[email protected]>
Co-authored-by: Sally MacFarlane <[email protected]>
  • Loading branch information
vaidikcode and macfarla authored Jan 15, 2025
1 parent 42b26a4 commit 9c12ed1
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,15 @@

import com.google.common.net.InetAddresses;
import org.apache.tuweni.bytes.Bytes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* Encapsulates the network coordinates of a {@link DiscoveryPeer} as well as serialization logic
* used in various Discovery messages.
*/
public class Endpoint {
private static final Logger LOG = LoggerFactory.getLogger(Endpoint.class);
private final Optional<String> host;
private final int udpPort;
private final Optional<Integer> tcpPort;
Expand All @@ -49,15 +52,16 @@ public Endpoint(final String host, final int udpPort, final Optional<Integer> tc
}

public static Endpoint fromEnode(final EnodeURL enode) {
final int discoveryPort =
enode
.getDiscoveryPort()
.orElseThrow(
() ->
new IllegalArgumentException(
"Attempt to create a discovery endpoint for an enode with discovery disabled."));
Optional<Integer> discoveryPort = enode.getDiscoveryPort();

if (discoveryPort.isEmpty()) {
int defaultPort = EnodeURLImpl.DEFAULT_LISTENING_PORT;
LOG.debug("Discovery disabled for enode {}. Using default port {}.", enode, defaultPort);
return new Endpoint(enode.getIp().getHostAddress(), defaultPort, Optional.empty());
}

final Optional<Integer> listeningPort = enode.getListeningPort();
return new Endpoint(enode.getIp().getHostAddress(), discoveryPort, listeningPort);
return new Endpoint(enode.getIp().getHostAddress(), discoveryPort.get(), listeningPort);
}

public EnodeURL toEnode(final Bytes nodeId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
Expand Down Expand Up @@ -45,6 +46,8 @@
import org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissionsDenylist;
import org.hyperledger.besu.plugin.data.EnodeURL;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -898,6 +901,23 @@ public void assertHostCorrectlyRevertsOnIgnoredPacketFrom() {
assertThat(PeerDiscoveryAgent.deriveHost(source, mockWellFormed)).isEqualTo(routableHost);
}

@Test
void testFromEnodeWithDiscoveryDisabled() throws UnknownHostException {
EnodeURL enodeWithNoDiscovery = mock(EnodeURL.class);
when(enodeWithNoDiscovery.getDiscoveryPort()).thenReturn(Optional.empty());
when(enodeWithNoDiscovery.getListeningPort()).thenReturn(Optional.of(8545));

when(enodeWithNoDiscovery.getIp()).thenReturn(InetAddress.getLoopbackAddress());

Endpoint result = Endpoint.fromEnode(enodeWithNoDiscovery);

assertEquals("127.0.0.1", result.getHost());

assertEquals(EnodeURLImpl.DEFAULT_LISTENING_PORT, result.getUdpPort());

assertEquals(Optional.empty(), result.getTcpPort());
}

protected void bondViaIncomingPing(
final MockPeerDiscoveryAgent agent, final MockPeerDiscoveryAgent otherNode) {
final Packet pingPacket = helper.createPingPacket(otherNode, agent);
Expand Down

0 comments on commit 9c12ed1

Please sign in to comment.