@Override public String toString() { return shortId() + "@" + selfPeer.getEndpoint().getHost() + ':' + selfPeer.getEndpoint().getTcpPort(); }
@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 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 createFromURI() { final Peer peer = DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@172.20.0.4:30403"); assertEquals( fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"), peer.getId()); assertEquals("172.20.0.4", peer.getEndpoint().getHost()); assertEquals(30403, peer.getEndpoint().getUdpPort()); assertEquals(30403, peer.getEndpoint().getTcpPort().getAsInt()); }
private Peer mockPeer() { final Peer peer = mock(Peer.class); final BytesValue id = SECP256K1.KeyPair.generate().getPublicKey().getEncodedBytes(); when(peer.getId()).thenReturn(id); when(peer.getEndpoint()).thenReturn(new Endpoint("127.0.0.1", 30303, OptionalInt.of(30303))); return peer; } }
private Peer generatePeer() { final byte[] id = new byte[64]; id[0] = (byte) nodeIdValue++; return new DefaultPeer(BytesValue.wrap(id), "10.9.8.7", 65535, 65534); } }
@Test(expected = IllegalArgumentException.class) public void createFromURIFailsForMissingHost() { DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@:30303"); }
@Test public void createPeerFromURIWithDifferentUdpAndTcpPorts() { final Peer peer = DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@172.20.0.4:12345?discport=22222"); assertEquals( fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"), peer.getId()); assertEquals("172.20.0.4", peer.getEndpoint().getHost()); assertEquals(22222, peer.getEndpoint().getUdpPort()); assertEquals(12345, peer.getEndpoint().getTcpPort().getAsInt()); }
@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 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(expected = IllegalArgumentException.class) public void createFromURIFailsForWrongScheme() { DefaultPeer.fromURI("http://user@foo:80"); }
@Test public void createFromURIWithoutPortUsesDefault() { final Peer peer = DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@172.20.0.4"); assertEquals( fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"), peer.getId()); assertEquals("172.20.0.4", peer.getEndpoint().getHost()); assertEquals(30303, peer.getEndpoint().getUdpPort()); assertEquals(30303, peer.getEndpoint().getTcpPort().getAsInt()); }
@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 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(expected = IllegalArgumentException.class) public void createFromURIFailsForMissingId() { DefaultPeer.fromURI("enode://172.20.0.4:30303"); }
@Test public void createFromIpv6URI() { final Peer peer = DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@[2001:0DB8:85A3:0000::8A2E:370:7334]:30403"); assertEquals( fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"), peer.getId()); // We expect bracket unwrapping, zero group removal via double colon, and leading zeros // trimmed, and lowercase hex digits. assertEquals("2001:db8:85a3::8a2e:370:7334", peer.getEndpoint().getHost()); assertEquals(30403, peer.getEndpoint().getUdpPort()); assertEquals(30403, peer.getEndpoint().getTcpPort().getAsInt()); }
@Test public void bannedNodesDoNotRollover() { final Peer bannedPeer = generatePeer(); final Peer peer1 = generatePeer(); final Peer peer2 = generatePeer(); final Peer peer3 = generatePeer(); final PeerBlacklist blacklist = new PeerBlacklist(2, Collections.singleton(bannedPeer.getId())); assertThat(blacklist.contains(bannedPeer)).isTrue(); assertThat(blacklist.contains(peer1)).isFalse(); assertThat(blacklist.contains(peer2)).isFalse(); assertThat(blacklist.contains(peer3)).isFalse(); // fill to the limit blacklist.add(peer1.getId()); blacklist.add(peer2.getId()); assertThat(blacklist.contains(bannedPeer)).isTrue(); assertThat(blacklist.contains(peer1)).isTrue(); assertThat(blacklist.contains(peer2)).isTrue(); assertThat(blacklist.contains(peer3)).isFalse(); // trigger rollover blacklist.add(peer3.getId()); assertThat(blacklist.contains(bannedPeer)).isTrue(); assertThat(blacklist.contains(peer1)).isFalse(); assertThat(blacklist.contains(peer2)).isTrue(); assertThat(blacklist.contains(peer3)).isTrue(); }
@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(); }
@Test public void createPeerFromURIWithDifferentUdpAndTcpPorts_InvalidTcpPort() { final Peer[] peers = new Peer[] { DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@172.20.0.4:12345?discport=99999"), DefaultPeer.fromURI( "enode://c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b@172.20.0.4:12345?discport=99999000") }; for (final Peer peer : peers) { assertEquals( fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"), peer.getId()); assertEquals("172.20.0.4", peer.getEndpoint().getHost()); assertEquals(12345, peer.getEndpoint().getUdpPort()); assertEquals(12345, peer.getEndpoint().getTcpPort().getAsInt()); } } }
@Test public void blacklistIncompatiblePeer() { final PeerBlacklist blacklist = new PeerBlacklist(); final PeerConnection peer = generatePeerConnection(); assertThat(blacklist.contains(peer)).isFalse(); blacklist.onDisconnect(peer, DisconnectReason.INCOMPATIBLE_P2P_PROTOCOL_VERSION, false); assertThat(blacklist.contains(peer)).isTrue(); }