use of org.hyperledger.besu.ethereum.p2p.peers.Peer in project besu by hyperledger.
the class RlpxAgentTest method connect_succeedsForExemptPeerWhenMaxPeersConnected.
@Test
public void connect_succeedsForExemptPeerWhenMaxPeersConnected() throws ExecutionException, InterruptedException {
// Turn off autocomplete so that each connection is established (completed) after it has been
// successfully added to the internal connections set. This mimics async production behavior.
connectionInitializer.setAutocompleteConnections(false);
// Saturate connections
startAgentWithMaxPeers(1);
final CompletableFuture<PeerConnection> existingConnectionFuture = agent.connect(createPeer());
connectionInitializer.completePendingFutures();
final MockPeerConnection existingConnection = (MockPeerConnection) existingConnectionFuture.get();
final Peer peer = createPeer();
when(peerPrivileges.canExceedConnectionLimits(peer)).thenReturn(true);
final CompletableFuture<PeerConnection> connection = agent.connect(peer);
connectionInitializer.completePendingFutures();
assertThat(connection).isDone();
assertThat(connection).isNotCompletedExceptionally();
assertThat(agent.getPeerConnection(peer)).contains(connection);
// Previous, non-exempt connection should be disconnected
assertThat(existingConnection.isDisconnected()).isTrue();
assertThat(existingConnection.getDisconnectReason()).contains(DisconnectReason.TOO_MANY_PEERS);
assertThat(agent.getConnectionCount()).isEqualTo(1);
}
use of org.hyperledger.besu.ethereum.p2p.peers.Peer in project besu by hyperledger.
the class RlpxAgentTest method connect_succeeds.
@Test
public void connect_succeeds() {
startAgent();
final Peer peer = createPeer();
final CompletableFuture<PeerConnection> connection = agent.connect(peer);
assertThat(connection).isDone();
assertThat(connection).isNotCompletedExceptionally();
assertThat(agent.getPeerConnection(peer)).contains(connection);
}
use of org.hyperledger.besu.ethereum.p2p.peers.Peer in project besu by hyperledger.
the class RlpxAgentTest method incomingConnection_maxPeersExceeded_incomingConnectionExemptFromLimits.
@Test
public void incomingConnection_maxPeersExceeded_incomingConnectionExemptFromLimits() throws ExecutionException, InterruptedException {
final Peer peerA = createPeer();
final Peer peerB = createPeer();
when(peerPrivileges.canExceedConnectionLimits(peerB)).thenReturn(true);
// Saturate connections
startAgentWithMaxPeers(1);
// Add existing peer
final MockPeerConnection existingConnection = (MockPeerConnection) agent.connect(peerA).get();
assertThat(agent.getConnectionCount()).isEqualTo(1);
// Simulate incoming connection
final MockPeerConnection connection = connection(peerB);
connectionInitializer.simulateIncomingConnection(connection);
// Existing connection should be disconnected
assertThat(agent.getConnectionCount()).isEqualTo(1);
assertPeerConnectionNotTracked(peerA);
assertThat(agent.getPeerConnection(peerB)).isNotEmpty();
assertThat(existingConnection.isDisconnected()).isTrue();
assertThat(existingConnection.getDisconnectReason()).contains(DisconnectReason.TOO_MANY_PEERS);
assertThat(connection.isDisconnected()).isFalse();
}
use of org.hyperledger.besu.ethereum.p2p.peers.Peer in project besu by hyperledger.
the class RlpxAgentTest method subscribeConnect_firesForOutgoingConnection.
@Test
public void subscribeConnect_firesForOutgoingConnection() {
final Peer peer = createPeer();
startAgent();
final AtomicReference<PeerConnection> connection = new AtomicReference<>();
agent.subscribeConnect(connection::set);
agent.connect(peer);
assertThat(connection.get()).isNotNull();
Assertions.assertThat(connection.get().getPeer()).isEqualTo(peer);
}
use of org.hyperledger.besu.ethereum.p2p.peers.Peer in project besu by hyperledger.
the class RlpxAgentTest method connect_withMaxRemotelyInitiatedConnectionsAt100Percent.
@Test
public void connect_withMaxRemotelyInitiatedConnectionsAt100Percent() {
final int maxPeers = 10;
final float maxRemotePeersFraction = 1.0f;
config.setLimitRemoteWireConnectionsEnabled(true);
config.setFractionRemoteWireConnectionsAllowed(maxRemotePeersFraction);
startAgentWithMaxPeers(maxPeers);
// Connect max peers locally
for (int i = 0; i < maxPeers; i++) {
final Peer peer = createPeer();
final CompletableFuture<PeerConnection> connection = agent.connect(peer);
assertThat(connection).isDone();
assertThat(connection).isNotCompletedExceptionally();
assertThat(agent.getPeerConnection(peer)).contains(connection);
}
}
Aggregations