Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
cleaning up
Browse files Browse the repository at this point in the history
  • Loading branch information
smatthewenglish committed Dec 18, 2018
1 parent 92a6ccd commit 6081235
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 190 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,6 @@ public PeerDiscoveryAgent(
nodeWhitelistController);
}

PeerDiscoveryController getPeerDiscoveryController() {
return this.controller;
}

public CompletableFuture<?> start(final int tcpPort) {
final CompletableFuture<?> completion = new CompletableFuture<>();
if (config.isActive()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,8 @@ public CompletableFuture<?> start() {

bootstrapNodes.stream().filter(nodeWhitelist::contains).forEach(peerTable::tryAdd);

final BytesValue target = Peer.randomId();
recursivePeerRefreshState =
new RecursivePeerRefreshState(
target, nodeWhitelist, peerBlacklist, this::bond, this::findNodes);
new RecursivePeerRefreshState(Peer.randomId(), this::bond, this::findNodes);
recursivePeerRefreshState.kickstartBootstrapPeers(
bootstrapNodes.stream().filter(nodeWhitelist::contains).collect(Collectors.toList()));

Expand Down Expand Up @@ -230,17 +228,17 @@ public void onMessage(final Packet packet, final DiscoveryPeer sender) {
return;
}
addToPeerTable(peer);
// If this was a bootstrap peer, let's ask it for nodes near to us.
if (interaction.isBootstrap()) {
findNodes(peer, agent.getAdvertisedPeer().getId());
}
});
break;
case NEIGHBORS:
recursivePeerRefreshState.setPeerBlacklist(peerBlacklist);
recursivePeerRefreshState.setNodeWhitelistController(nodeWhitelist);
recursivePeerRefreshState.onNeighboursPacketReceived(
packet.getPacketData(NeighborsPacketData.class).orElse(null), peer);
packet.getPacketData(NeighborsPacketData.class).orElse(null),
peer,
peerBlacklist,
nodeWhitelist);
break;
case FIND_NEIGHBORS:
if (!peerKnown || peerBlacklisted) {
Expand Down Expand Up @@ -359,13 +357,11 @@ void bond(final DiscoveryPeer peer, final boolean bootstrap) {
* @param target the target node ID to find
*/
private void findNodes(final DiscoveryPeer peer, final BytesValue target) {
final FindNeighborsPacketData data = FindNeighborsPacketData.create(target);
final Consumer<PeerInteractionState> action =
(interaction) -> {
final FindNeighborsPacketData data = FindNeighborsPacketData.create(target);
agent.sendPacket(peer, PacketType.FIND_NEIGHBORS, data);
};
interaction -> agent.sendPacket(peer, PacketType.FIND_NEIGHBORS, data);
final PeerInteractionState interaction =
new PeerInteractionState(action, PacketType.NEIGHBORS, packet -> true, true, false);
new PeerInteractionState(action, PacketType.NEIGHBORS, filter -> true, true, false);
interaction.execute(0);
}

Expand Down Expand Up @@ -483,7 +479,7 @@ public boolean removePeerDroppedObserver(final long observerId) {
* @return Associated RecursivePeerRefreshState.
*/
@VisibleForTesting
public RecursivePeerRefreshState getRecursivePeerRefreshState() {
RecursivePeerRefreshState getRecursivePeerRefreshState() {
return this.recursivePeerRefreshState;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,11 @@ public class RecursivePeerRefreshState {
private final List<BytesValue> dispatchedFindNeighbours;
private final List<BytesValue> dispatchedBond;

private NodeWhitelistController nodeWhitelist;
private PeerBlacklist peerBlacklist;

public RecursivePeerRefreshState(
final BytesValue target,
final NodeWhitelistController nodeWhitelist,
final PeerBlacklist peerBlacklist,
final BondingAgent bondingAgent,
final NeighborFinder neighborFinder) {
this.target = target;
this.nodeWhitelist = nodeWhitelist;
this.peerBlacklist = peerBlacklist;
this.bondingAgent = bondingAgent;
this.neighborFinder = neighborFinder;
this.anteList = new ArrayList<>();
Expand All @@ -55,14 +48,6 @@ public RecursivePeerRefreshState(
this.dispatchedBond = new ArrayList<>();
}

void setPeerBlacklist(final PeerBlacklist peerBlacklist) {
this.peerBlacklist = peerBlacklist;
}

void setNodeWhitelistController(final NodeWhitelistController nodeWhitelist) {
this.nodeWhitelist = nodeWhitelist;
}

void kickstartBootstrapPeers(final List<DiscoveryPeer> bootstrapPeers) {
for (DiscoveryPeer bootstrapPeer : bootstrapPeers) {
final BytesValue peerId = bootstrapPeer.getId();
Expand Down Expand Up @@ -113,17 +98,17 @@ private void initiatePeerRefreshCycle(final List<DiscoveryPeer> peers) {
}
}

void onNeighboursPacketReceived(final NeighborsPacketData neighboursPacket, final Peer peer) {

void onNeighboursPacketReceived(
final NeighborsPacketData neighboursPacket,
final Peer peer,
final PeerBlacklist peerBlacklist,
final NodeWhitelistController nodeWhitelist) {
if (outstandingRequestList.contains(new OutstandingRequest(peer))) {

final List<DiscoveryPeer> receivedPeerList = neighboursPacket.getNodes();
for (DiscoveryPeer receivedPeer : receivedPeerList) {

if (!dispatchedBond.contains(receivedPeer.getId())
&& !peerBlacklist.contains(receivedPeer)
&& nodeWhitelist.contains(receivedPeer)) {

bondingAgent.performBonding(receivedPeer, false);
dispatchedBond.add(receivedPeer.getId());
anteList.add(new PeerDistance(receivedPeer, distance(target, receivedPeer.getId())));
Expand Down Expand Up @@ -159,7 +144,7 @@ void addToOutstandingRequestList(final Peer peer) {
this.outstandingRequestList.add(new OutstandingRequest(peer));
}

public List<OutstandingRequest> getOutstandingRequestList() {
List<OutstandingRequest> getOutstandingRequestList() {
return this.outstandingRequestList;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,146 +143,7 @@ public void bootstrappingPeersListUpdated() {
}

@Test
public void deconstructedBootstrappingPeersListUpdated() throws Exception {
final int BROADCAST_TCP_PORT = 12356;
final Vertx vertx = vertx();
final PeerBlacklist peerBlacklist = new PeerBlacklist();

// Start an agent.
final DiscoveryConfiguration bootstrapConfig = new DiscoveryConfiguration();
bootstrapConfig.setBootstrapPeers(emptyList());
bootstrapConfig.setBindPort(0);

final PeerDiscoveryAgent bootstrapAgent =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
bootstrapConfig,
() -> true,
peerBlacklist,
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
bootstrapAgent.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);

// Start other five agents, pointing to the one above as a bootstrap peer.
final DiscoveryConfiguration agentConfig = new DiscoveryConfiguration();
final DiscoveryPeer bootstrapPeer = bootstrapAgent.getAdvertisedPeer();
agentConfig.setBootstrapPeers(singletonList(bootstrapPeer));
agentConfig.setBindPort(0);

final PeerDiscoveryAgent agent0 =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
agentConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));

agent0.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
final BytesValue id0 = agent0.getAdvertisedPeer().getId();

final PeerDiscoveryAgent agent1 =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
agentConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
try {
agent1.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
} catch (final Exception ex) {
throw new AssertionError("Could not initialize discovery agent", ex);
}
BytesValue id1 = agent1.getAdvertisedPeer().getId();

final PeerDiscoveryAgent agent2 =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
agentConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
try {
agent2.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
} catch (final Exception ex) {
throw new AssertionError("Could not initialize discovery agent", ex);
}
BytesValue id2 = agent2.getAdvertisedPeer().getId();

final PeerDiscoveryAgent agent3 =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
agentConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
try {
agent3.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
} catch (final Exception ex) {
throw new AssertionError("Could not initialize discovery agent", ex);
}
BytesValue id3 = agent3.getAdvertisedPeer().getId();

final PeerDiscoveryAgent agent4 =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
agentConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
try {
agent4.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
} catch (final Exception ex) {
throw new AssertionError("Could not initialize discovery agent", ex);
}
BytesValue id4 = agent4.getAdvertisedPeer().getId();

final BytesValue[] otherPeersIds = new BytesValue[] {id0, id1, id2, id3, id4};

await()
.atMost(5, TimeUnit.SECONDS)
.untilAsserted(
() ->
assertThat(bootstrapAgent.getPeers())
.extracting(Peer::getId)
.containsExactlyInAnyOrder(otherPeersIds));

assertThat(bootstrapAgent.getPeers())
.allMatch(p -> p.getStatus() == PeerDiscoveryStatus.BONDED);

// This agent will bootstrap off the bootstrap peer, will add all nodes returned by the latter,
// and will
// bond with them, ultimately adding all 7 nodes in the network to its table.
final DiscoveryConfiguration testConfig = new DiscoveryConfiguration();
testConfig.setBootstrapPeers(singletonList(bootstrapAgent.getAdvertisedPeer()));
testConfig.setBindPort(0);

final PeerDiscoveryAgent testAgent =
new PeerDiscoveryAgent(
vertx,
SECP256K1.KeyPair.generate(),
testConfig,
() -> true,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
try {
testAgent.start(BROADCAST_TCP_PORT).get(5, TimeUnit.SECONDS);
} catch (final Exception ex) {
throw new AssertionError("Could not initialize discovery agent", ex);
}

await()
.atMost(30, TimeUnit.SECONDS)
.untilAsserted(() -> assertThat(testAgent.getPeers()).hasSize(6));
vertx.close();
}

@Test
public void deconstructedIncrementaly() throws Exception {
public void deconstructedIncrementalUpdateBootstrapPeersList() throws Exception {
final int BROADCAST_TCP_PORT = 12356;
final Vertx vertx = vertx();
final PeerBlacklist peerBlacklist = new PeerBlacklist();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,7 @@ public class RecursivePeerRefreshStateTest {
public void setup() throws Exception {
JsonNode peers =
MAPPER.readTree(RecursivePeerRefreshStateTest.class.getResource("/peers.json"));
recursivePeerRefreshState =
new RecursivePeerRefreshState(
target,
new NodeWhitelistController(PermissioningConfiguration.createDefault()),
new PeerBlacklist(),
bondingAgent,
neighborFinder);
recursivePeerRefreshState = new RecursivePeerRefreshState(target, bondingAgent, neighborFinder);

peer_000 = (TestPeer) generatePeer(peers);

Expand Down Expand Up @@ -192,7 +186,11 @@ public void shouldIssueRequestToPeerWithLesserDistanceGreaterHops() {

verify(bondingAgent).performBonding(peer_000, true);

recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_000, peer_000);
recursivePeerRefreshState.onNeighboursPacketReceived(
neighborsPacketData_000,
peer_000,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3);

verify(bondingAgent).performBonding(peer_010, false);
Expand All @@ -205,23 +203,35 @@ public void shouldIssueRequestToPeerWithLesserDistanceGreaterHops() {
verify(neighborFinder).issueFindNodeRequest(peer_012, target);
verify(neighborFinder).issueFindNodeRequest(peer_013, target);

recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_011, peer_011);
recursivePeerRefreshState.onNeighboursPacketReceived(
neighborsPacketData_011,
peer_011,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3);

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);
recursivePeerRefreshState.onNeighboursPacketReceived(
neighborsPacketData_012,
peer_012,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3);

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);
recursivePeerRefreshState.onNeighboursPacketReceived(
neighborsPacketData_013,
peer_013,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3);

verify(bondingAgent).performBonding(peer_320, false);
Expand All @@ -242,7 +252,11 @@ public void shouldIssueRequestToPeerWithGreaterDistanceOnExpirationOfLowerDistan

verify(bondingAgent).performBonding(peer_000, true);

recursivePeerRefreshState.onNeighboursPacketReceived(neighborsPacketData_000, peer_000);
recursivePeerRefreshState.onNeighboursPacketReceived(
neighborsPacketData_000,
peer_000,
new PeerBlacklist(),
new NodeWhitelistController(PermissioningConfiguration.createDefault()));
assertThat(recursivePeerRefreshState.getOutstandingRequestList().size()).isLessThanOrEqualTo(3);

recursivePeerRefreshState.executeTimeoutEvaluation();
Expand Down

0 comments on commit 6081235

Please sign in to comment.