Search in sources :

Example 21 with Peer

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);
}
Also used : MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) PeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.PeerConnection) Peer(org.hyperledger.besu.ethereum.p2p.peers.Peer) PeerTestHelper.createPeer(org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) DiscoveryPeer(org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer) Test(org.junit.Test)

Example 22 with Peer

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);
}
Also used : MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) PeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.PeerConnection) Peer(org.hyperledger.besu.ethereum.p2p.peers.Peer) PeerTestHelper.createPeer(org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) DiscoveryPeer(org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer) Test(org.junit.Test)

Example 23 with Peer

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();
}
Also used : MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) Peer(org.hyperledger.besu.ethereum.p2p.peers.Peer) PeerTestHelper.createPeer(org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) DiscoveryPeer(org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer) Test(org.junit.Test)

Example 24 with Peer

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);
}
Also used : MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) PeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.PeerConnection) Peer(org.hyperledger.besu.ethereum.p2p.peers.Peer) PeerTestHelper.createPeer(org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) DiscoveryPeer(org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer) AtomicReference(java.util.concurrent.atomic.AtomicReference) Test(org.junit.Test)

Example 25 with 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);
    }
}
Also used : MockPeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection) PeerConnection(org.hyperledger.besu.ethereum.p2p.rlpx.connections.PeerConnection) Peer(org.hyperledger.besu.ethereum.p2p.peers.Peer) PeerTestHelper.createPeer(org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer) DefaultPeer(org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer) DiscoveryPeer(org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer) Test(org.junit.Test)

Aggregations

Peer (org.hyperledger.besu.ethereum.p2p.peers.Peer)108 Test (org.junit.Test)102 DefaultPeer (org.hyperledger.besu.ethereum.p2p.peers.DefaultPeer)73 PeerTestHelper.createPeer (org.hyperledger.besu.ethereum.p2p.peers.PeerTestHelper.createPeer)59 DiscoveryPeer (org.hyperledger.besu.ethereum.p2p.discovery.DiscoveryPeer)54 PeerConnection (org.hyperledger.besu.ethereum.p2p.rlpx.connections.PeerConnection)51 MockPeerConnection (org.hyperledger.besu.ethereum.p2p.rlpx.connections.MockPeerConnection)41 CompletableFuture (java.util.concurrent.CompletableFuture)25 Bytes (org.apache.tuweni.bytes.Bytes)21 EnodeURL (org.hyperledger.besu.plugin.data.EnodeURL)16 DisconnectReason (org.hyperledger.besu.ethereum.p2p.rlpx.wire.messages.DisconnectMessage.DisconnectReason)14 PeerPermissions (org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissions)10 MockPeerDiscoveryAgent (org.hyperledger.besu.ethereum.p2p.discovery.internal.MockPeerDiscoveryAgent)8 Optional (java.util.Optional)7 NodeKey (org.hyperledger.besu.crypto.NodeKey)7 IncomingPacket (org.hyperledger.besu.ethereum.p2p.discovery.internal.MockPeerDiscoveryAgent.IncomingPacket)7 PeerPermissionsDenylist (org.hyperledger.besu.ethereum.p2p.permissions.PeerPermissionsDenylist)6 PeerInfo (org.hyperledger.besu.ethereum.p2p.rlpx.wire.PeerInfo)6 ArrayList (java.util.ArrayList)5 List (java.util.List)5