From b4f04fe60d097abb4d79f97be08a342db8d27f11 Mon Sep 17 00:00:00 2001 From: "S. Matthew English" Date: Fri, 30 Nov 2018 14:41:29 -0500 Subject: [PATCH] add accurate interface parameters --- .../internal/RecursivePeerRefreshState.java | 22 +++--- .../RecursivePeerRefreshStateTest.java | 73 ++++++++++--------- 2 files changed, 49 insertions(+), 46 deletions(-) diff --git a/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshState.java b/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshState.java index 2d0f712490..9c66f39983 100644 --- a/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshState.java +++ b/ethereum/p2p/src/main/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshState.java @@ -55,8 +55,8 @@ void kickstartBootstrapPeers(final List bootstrapPeers) { BytesValue peerId = bootstrapPeer.getId(); outstandingRequestList.add(new OutstandingRequest(bootstrapPeer)); contactedInCurrentExecution.add(peerId); - bondingAgent.performBonding(bootstrapPeer); - neighborFinder.issueFindNodeRequest(bootstrapPeer); + bondingAgent.performBonding(bootstrapPeer, true); + neighborFinder.issueFindNodeRequest(bootstrapPeer, target); } } @@ -86,7 +86,7 @@ private void executeFindNodeRequest(final DiscoveryPeer peer) { BytesValue peerId = peer.getId(); outstandingRequestList.add(new OutstandingRequest(peer)); contactedInCurrentExecution.add(peerId); - neighborFinder.issueFindNodeRequest(peer); + neighborFinder.issueFindNodeRequest(peer, target); } /** @@ -106,7 +106,7 @@ void onNeighboursPacketReceived(final NeighborsPacketData neighboursPacket, fina List receivedPeerList = neighboursPacket.getNodes(); for (DiscoveryPeer receivedPeer : receivedPeerList) { if (!peerBlacklist.contains(receivedPeer)) { - bondingAgent.performBonding(receivedPeer); + bondingAgent.performBonding(receivedPeer, false); anteList.add(new PeerDistance(receivedPeer, distance(target, receivedPeer.getId()))); } } @@ -202,19 +202,21 @@ public String toString() { public interface NeighborFinder { /** - * Wait for the peer to complete bonding before issuance of FindNode request. + * Sends a FIND_NEIGHBORS message to a {@link DiscoveryPeer}, in search of a target value. * - * @param peer + * @param peer the peer to interrogate + * @param target the target node ID to find */ - void issueFindNodeRequest(final Peer peer); + void issueFindNodeRequest(final Peer peer, final BytesValue target); } public interface BondingAgent { /** - * If peer is not previously known, initiate bonding process. + * Initiates a bonding PING-PONG cycle with a peer. * - * @param peer + * @param peer The targeted peer. + * @param bootstrap Whether this is a bootstrap interaction. */ - void performBonding(final Peer peer); + void performBonding(final Peer peer, final boolean bootstrap); } } diff --git a/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshStateTest.java b/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshStateTest.java index e38d06f6cb..8b7c48092e 100644 --- a/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshStateTest.java +++ b/ethereum/p2p/src/test/java/tech/pegasys/pantheon/ethereum/p2p/discovery/internal/RecursivePeerRefreshStateTest.java @@ -38,6 +38,10 @@ public class RecursivePeerRefreshStateTest { private RecursivePeerRefreshState recursivePeerRefreshState; + private final BytesValue target = + BytesValue.fromHexString( + "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); + private final RecursivePeerRefreshState.BondingAgent bondingAgent = mock(RecursivePeerRefreshState.BondingAgent.class); private final RecursivePeerRefreshState.NeighborFinder neighborFinder = @@ -77,9 +81,6 @@ public class RecursivePeerRefreshStateTest { public void setup() throws Exception { JsonNode peers = MAPPER.readTree(RecursivePeerRefreshStateTest.class.getResource("/peers.json")); - BytesValue target = - BytesValue.fromHexString( - "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); recursivePeerRefreshState = new RecursivePeerRefreshState(target, new PeerBlacklist(), bondingAgent, neighborFinder); @@ -182,54 +183,54 @@ private boolean matchPeerToCorrespondingPacketData( public void shouldIssueRequestToPeerWithLesserDistanceGreaterHops() { recursivePeerRefreshState.kickstartBootstrapPeers(Collections.singletonList(peer_000)); - verify(bondingAgent).performBonding(peer_000); - verify(neighborFinder).issueFindNodeRequest(peer_000); + verify(bondingAgent).performBonding(peer_000, true); + verify(neighborFinder).issueFindNodeRequest(peer_000, target); recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_000, peer_000); assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3); - verify(bondingAgent).performBonding(peer_010); - verify(bondingAgent).performBonding(peer_011); - verify(bondingAgent).performBonding(peer_012); - verify(bondingAgent).performBonding(peer_013); + verify(bondingAgent).performBonding(peer_010, false); + verify(bondingAgent).performBonding(peer_011, false); + verify(bondingAgent).performBonding(peer_012, false); + verify(bondingAgent).performBonding(peer_013, false); - verify(neighborFinder, never()).issueFindNodeRequest(peer_010); - verify(neighborFinder).issueFindNodeRequest(peer_011); - verify(neighborFinder).issueFindNodeRequest(peer_012); - verify(neighborFinder).issueFindNodeRequest(peer_013); + verify(neighborFinder, never()).issueFindNodeRequest(peer_010, target); + verify(neighborFinder).issueFindNodeRequest(peer_011, target); + verify(neighborFinder).issueFindNodeRequest(peer_012, target); + verify(neighborFinder).issueFindNodeRequest(peer_013, target); recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_011, peer_011); assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3); - verify(bondingAgent).performBonding(peer_120); - verify(bondingAgent).performBonding(peer_121); - verify(bondingAgent).performBonding(peer_122); - verify(bondingAgent).performBonding(peer_123); + verify(bondingAgent).performBonding(peer_120, false); + verify(bondingAgent).performBonding(peer_121, false); + verify(bondingAgent).performBonding(peer_122, false); + verify(bondingAgent).performBonding(peer_123, false); recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_012, peer_012); assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3); - verify(bondingAgent).performBonding(peer_220); - verify(bondingAgent).performBonding(peer_221); - verify(bondingAgent).performBonding(peer_222); - verify(bondingAgent).performBonding(peer_223); + verify(bondingAgent).performBonding(peer_220, false); + verify(bondingAgent).performBonding(peer_221, false); + verify(bondingAgent).performBonding(peer_222, false); + verify(bondingAgent).performBonding(peer_223, false); recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_013, peer_013); assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3); - verify(bondingAgent).performBonding(peer_320); - verify(bondingAgent).performBonding(peer_321); - verify(bondingAgent).performBonding(peer_322); - verify(bondingAgent).performBonding(peer_323); + verify(bondingAgent).performBonding(peer_320, false); + verify(bondingAgent).performBonding(peer_321, false); + verify(bondingAgent).performBonding(peer_322, false); + verify(bondingAgent).performBonding(peer_323, false); - verify(neighborFinder, never()).issueFindNodeRequest(peer_320); - verify(neighborFinder, never()).issueFindNodeRequest(peer_321); - verify(neighborFinder, never()).issueFindNodeRequest(peer_322); - verify(neighborFinder).issueFindNodeRequest(peer_323); + verify(neighborFinder, never()).issueFindNodeRequest(peer_320, target); + verify(neighborFinder, never()).issueFindNodeRequest(peer_321, target); + verify(neighborFinder, never()).issueFindNodeRequest(peer_322, target); + verify(neighborFinder).issueFindNodeRequest(peer_323, target); } @Test @@ -237,8 +238,8 @@ public void shouldIssueRequestToPeerWithGreaterDistanceOnExpirationOfLowerDistan recursivePeerRefreshState.kickstartBootstrapPeers(Collections.singletonList(peer_000)); recursivePeerRefreshState.executeTimeoutEvaluation(); - verify(bondingAgent).performBonding(peer_000); - verify(neighborFinder).issueFindNodeRequest(peer_000); + verify(bondingAgent).performBonding(peer_000, true); + verify(neighborFinder).issueFindNodeRequest(peer_000, target); recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_000, peer_000); @@ -246,16 +247,16 @@ public void shouldIssueRequestToPeerWithGreaterDistanceOnExpirationOfLowerDistan recursivePeerRefreshState.executeTimeoutEvaluation(); - verify(neighborFinder, never()).issueFindNodeRequest(peer_010); - verify(neighborFinder).issueFindNodeRequest(peer_011); - verify(neighborFinder).issueFindNodeRequest(peer_012); - verify(neighborFinder).issueFindNodeRequest(peer_013); + verify(neighborFinder, never()).issueFindNodeRequest(peer_010, target); + verify(neighborFinder).issueFindNodeRequest(peer_011, target); + verify(neighborFinder).issueFindNodeRequest(peer_012, target); + verify(neighborFinder).issueFindNodeRequest(peer_013, target); recursivePeerRefreshState.executeTimeoutEvaluation(); assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3); - verify(neighborFinder).issueFindNodeRequest(peer_010); + verify(neighborFinder).issueFindNodeRequest(peer_010, target); } private DiscoveryPeer generatePeer(final JsonNode peer) {