@Test public void blacklistIncompatiblePeerWhoIssuesDisconnect() { final PeerBlacklist blacklist = new PeerBlacklist(); final PeerConnection peer = generatePeerConnection(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.onDisconnect(peer, DisconnectReason.INCOMPATIBLE_P2P_PROTOCOL_VERSION, true); assertThat(blacklist.contains(peer)).isTrue(); }
@Test public void directlyAddingPeerWorks() { final PeerBlacklist blacklist = new PeerBlacklist(); final Peer peer = generatePeer(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.add(peer); assertThat(blacklist.contains(peer)).isTrue(); }
@Test(expected = IllegalArgumentException.class) public void createPeerDiscoveryAgent_NullKeyPair() throws IOException { try (final P2PNetwork broken = new NettyP2PNetwork( vertx, null, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { Assertions.fail("Expected Exception"); } }
@Test public void doesNotBlacklistPeerForOurBadBehavior() throws Exception { // Start an agent with no bootstrap peers. final PeerBlacklist blacklist = new PeerBlacklist(); final MockPeerDiscoveryAgent agent = helper.startDiscoveryAgent(Collections.emptyList(), blacklist); // Setup peer final MockPeerDiscoveryAgent otherNode = helper.startDiscoveryAgent(); final PeerConnection wirePeer = createAnonymousPeerConnection(otherNode.getId()); // Bond to peer bondViaIncomingPing(agent, otherNode); assertThat(agent.getPeers()).hasSize(1); // Disconnect with problematic reason blacklist.onDisconnect(wirePeer, DisconnectReason.BREACH_OF_PROTOCOL, true); agent.onDisconnect(wirePeer, DisconnectReason.BREACH_OF_PROTOCOL, true); // Confirm peer was removed assertThat(agent.getPeers()).hasSize(0); // Bond again bondViaIncomingPing(agent, otherNode); // Check peer was allowed to connect assertThat(agent.getPeers()).hasSize(1); }
final DiscoveryPeer discoPeer = peers.get(0); final PeerBlacklist blacklist = new PeerBlacklist(); OutboundMessageHandler outboundMessageHandler = mock(OutboundMessageHandler.class); controller = .send(eq(discoPeer), matchPacketOfType(PacketType.FIND_NEIGHBORS)); blacklist.add(discoPeer); final Packet findNeighborsPacket = MockPacketDataFactory.mockFindNeighborsPacket(discoPeer); controller.onMessage(findNeighborsPacket, discoPeer);
0, () -> true, new PeerBlacklist(), new NodeWhitelistController(PermissioningConfiguration.createDefault()), new Subscribers<>()));
@Test public void blacklistPeerForBadBehavior() { // Start an agent with no bootstrap peers. final PeerBlacklist blacklist = new PeerBlacklist(); final MockPeerDiscoveryAgent agent = helper.startDiscoveryAgent(Collections.emptyList(), blacklist); // Setup peer final MockPeerDiscoveryAgent otherNode = helper.startDiscoveryAgent(); final PeerConnection wirePeer = createAnonymousPeerConnection(otherNode.getId()); // Bond to peer bondViaIncomingPing(agent, otherNode); assertThat(agent.getPeers()).hasSize(1); // Disconnect with problematic reason blacklist.onDisconnect(wirePeer, DisconnectReason.BREACH_OF_PROTOCOL, false); agent.onDisconnect(wirePeer, DisconnectReason.BREACH_OF_PROTOCOL, false); // Confirm peer was removed assertThat(agent.getPeers()).hasSize(0); // Bond again bondViaIncomingPing(agent, otherNode); // Check peer was not allowed to connect assertThat(agent.getPeers()).hasSize(0); }
final DiscoveryPeer otherPeer2 = peers.get(2); final PeerBlacklist blacklist = new PeerBlacklist(); OutboundMessageHandler outboundMessageHandler = mock(OutboundMessageHandler.class); controller = blacklist.add(otherPeer);
@Test public void createPeerDiscoveryAgent_NoActivePeers() { final SECP256K1.KeyPair keyPair = SECP256K1.KeyPair.generate(); try (final NettyP2PNetwork agent = new NettyP2PNetwork( vertx, keyPair, configWithRandomPorts(), emptyList(), () -> true, new PeerBlacklist(), new NoOpMetricsSystem(), new NodeWhitelistController(PermissioningConfiguration.createDefault()))) { assertTrue(agent.getDiscoveryPeers().isEmpty()); assertEquals(0, agent.getPeers().size()); } } }
@Test public void doesNotBlacklistPeerForNormalDisconnect() { final PeerBlacklist blacklist = new PeerBlacklist(); final PeerConnection peer = generatePeerConnection(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.onDisconnect(peer, DisconnectReason.TOO_MANY_PEERS, false); assertThat(blacklist.contains(peer)).isFalse(); }
@Test public void directlyAddingPeerByPeerIdWorks() { final PeerBlacklist blacklist = new PeerBlacklist(); final Peer peer = generatePeer(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.add(peer.getId()); assertThat(blacklist.contains(peer)).isTrue(); }
@Test public void blacklistIncompatiblePeer() throws Exception { // Start an agent with no bootstrap peers. final PeerBlacklist blacklist = new PeerBlacklist(); final MockPeerDiscoveryAgent agent = helper.startDiscoveryAgent(Collections.emptyList(), blacklist); // Setup peer final MockPeerDiscoveryAgent otherNode = helper.startDiscoveryAgent(); final PeerConnection wirePeer = createAnonymousPeerConnection(otherNode.getId()); // Bond to peer bondViaIncomingPing(agent, otherNode); assertThat(agent.getPeers()).hasSize(1); // Disconnect blacklist.onDisconnect(wirePeer, DisconnectReason.INCOMPATIBLE_P2P_PROTOCOL_VERSION, false); agent.onDisconnect(wirePeer, DisconnectReason.INCOMPATIBLE_P2P_PROTOCOL_VERSION, false); // Confirm peer was removed assertThat(agent.getPeers()).hasSize(0); // Bond again bondViaIncomingPing(agent, otherNode); // Check peer was not allowed to connect assertThat(agent.getPeers()).hasSize(0); }
final DiscoveryPeer otherPeer2 = peers.get(2); final PeerBlacklist blacklist = new PeerBlacklist(); OutboundMessageHandler outboundMessageHandler = mock(OutboundMessageHandler.class); controller = blacklist.add(otherPeer2); final Packet pongPacket2 = MockPacketDataFactory.mockPongPacket(otherPeer2, pingPacket2.getHash());
@Test public void shouldNotRespondToPingFromNonWhitelistedDiscoveryPeer() { final List<DiscoveryPeer> peers = createPeersInLastBucket(localPeer, 3); final DiscoveryPeer discoPeer = peers.get(0); final PeerBlacklist blacklist = new PeerBlacklist(); // don't add disco peer to whitelist PermissioningConfiguration config = PermissioningConfiguration.createDefault(); config.setNodeWhitelist(new ArrayList<>()); NodeWhitelistController nodeWhitelistController = new NodeWhitelistController(config); controller = getControllerBuilder() .peers(discoPeer) .blacklist(blacklist) .whitelist(nodeWhitelistController) .build(); final Packet pingPacket = mockPingPacket(peers.get(0), localPeer); controller.onMessage(pingPacket, peers.get(0)); assertThat(controller.getPeers()).doesNotContain(peers.get(0)); }
@Test public void doesNotBlacklistPeerForOurBadBehavior() { final PeerBlacklist blacklist = new PeerBlacklist(); final PeerConnection peer = generatePeerConnection(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.onDisconnect(peer, DisconnectReason.BREACH_OF_PROTOCOL, true); assertThat(blacklist.contains(peer)).isFalse(); }
@Test public void banningPeerByPeerIdWorks() { final Peer peer = generatePeer(); final PeerBlacklist blacklist = new PeerBlacklist(Collections.singleton(peer.getId())); assertThat(blacklist.contains(peer)).isTrue(); blacklist.add(peer.getId()); assertThat(blacklist.contains(peer)).isTrue(); }
@Test public void doesNotBlacklistPeerForNormalDisconnect() { // Start an agent with no bootstrap peers. final PeerBlacklist blacklist = new PeerBlacklist(); final MockPeerDiscoveryAgent agent = helper.startDiscoveryAgent(Collections.emptyList(), blacklist); // Setup peer final MockPeerDiscoveryAgent otherNode = helper.startDiscoveryAgent(); final PeerConnection wirePeer = createAnonymousPeerConnection(otherNode.getId()); // Bond to peer bondViaIncomingPing(agent, otherNode); assertThat(agent.getPeers()).hasSize(1); // Disconnect with innocuous reason blacklist.onDisconnect(wirePeer, DisconnectReason.TOO_MANY_PEERS, false); agent.onDisconnect(wirePeer, DisconnectReason.TOO_MANY_PEERS, false); // Confirm peer was removed assertThat(agent.getPeers()).hasSize(0); // Bond again bondViaIncomingPing(agent, otherNode); // Check peer was allowed to connect assertThat(agent.getPeers()).hasSize(1); }
final BytesValue localId = localKp.getPublicKey().getEncodedBytes(); final BytesValue remoteId = remoteKp.getPublicKey().getEncodedBytes(); final PeerBlacklist localBlacklist = new PeerBlacklist(); final PeerBlacklist remoteBlacklist = new PeerBlacklist(); localBlacklist.add(remotePeer);
TimeUnit.HOURS.toMillis(1), () -> true, new PeerBlacklist(), new NodeWhitelistController(PermissioningConfiguration.createDefault()), new Subscribers<>());
@Test public void blacklistPeerForBadBehavior() { final PeerBlacklist blacklist = new PeerBlacklist(); final PeerConnection peer = generatePeerConnection(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.onDisconnect(peer, DisconnectReason.BREACH_OF_PROTOCOL, false); assertThat(blacklist.contains(peer)).isTrue(); }