public static Packet mockPongPacket(final Peer from, final BytesValue pingHash) { final Packet packet = mock(Packet.class); final PongPacketData pongPacketData = PongPacketData.create(from.getEndpoint(), pingHash); when(packet.getPacketData(any())).thenReturn(Optional.of(pongPacketData)); final BytesValue id = from.getId(); when(packet.getNodeId()).thenReturn(id); when(packet.getType()).thenReturn(PacketType.PONG); when(packet.getHash()).thenReturn(Bytes32.ZERO); return packet; }
private static Packet mockPingPacket(final Peer from, final Peer to) { final Packet packet = mock(Packet.class); final PingPacketData pingPacketData = PingPacketData.create(from.getEndpoint(), to.getEndpoint()); when(packet.getPacketData(any())).thenReturn(Optional.of(pingPacketData)); final BytesValue id = from.getId(); when(packet.getNodeId()).thenReturn(id); when(packet.getType()).thenReturn(PacketType.PING); when(packet.getHash()).thenReturn(Bytes32.ZERO); return packet; }
public static Packet mockFindNeighborsPacket(final Peer from) { final Packet packet = mock(Packet.class); final BytesValue target = BytesValue.fromHexString( "0x0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40"); final FindNeighborsPacketData packetData = FindNeighborsPacketData.create(target); when(packet.getPacketData(any())).thenReturn(Optional.of(packetData)); final BytesValue id = from.getId(); when(packet.getNodeId()).thenReturn(id); when(packet.getType()).thenReturn(PacketType.FIND_NEIGHBORS); when(packet.getHash()).thenReturn(Bytes32.ZERO); return packet; } }
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; } }
@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 checkMaintainedConnectionPeersDoesntReconnectConnectedPeers() { final NettyP2PNetwork network = spy(mockNettyP2PNetwork()); final Peer peer = mockPeer(); verify(network, never()).connect(peer); assertThat(network.addMaintainConnectionPeer(peer)).isTrue(); verify(network, times(1)).connect(peer); { final CompletableFuture<PeerConnection> connection; connection = network.pendingConnections.remove(peer); assertThat(connection).isNotNull(); assertThat(connection.cancel(true)).isTrue(); } { final PeerConnection peerConnection = mockPeerConnection(peer.getId()); network.connections.registerConnection(peerConnection); network.checkMaintainedConnectionPeers(); verify(network, times(1)).connect(peer); } }
@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(); }
network1.subscribe(cap, messageFuture::complete); final Predicate<PeerConnection> isPeerOne = peerConnection -> peerConnection.getPeer().getNodeId().equals(one.getId()); final Predicate<PeerConnection> isPeerTwo = peerConnection -> peerConnection.getPeer().getNodeId().equals(two.getId()); Assertions.assertThat(network1.getPeers().stream().filter(isPeerTwo).findFirst()) .isNotPresent(); network2.subscribeConnect(peer1Future::complete); network1.connect(two).get(); Assertions.assertThat(peer1Future.get().getPeer().getNodeId()).isEqualTo(one.getId()); Assertions.assertThat(peer2Future.get().getPeer().getNodeId()).isEqualTo(two.getId()); Assertions.assertThat(network1.getPeers().stream().filter(isPeerTwo).findFirst()).isPresent(); final Optional<PeerConnection> optionalConnection = .isEqualTo(0); Assertions.assertThat(receivedMessage.getConnection().getPeer().getNodeId()) .isEqualTo(two.getId()); Assertions.assertThat(receivedMessageData.getSize()).isEqualTo(size); Assertions.assertThat(receivedMessageData.getCode()).isEqualTo(code);
assertThat(NetworkUtility.isValidPort(p.getEndpoint().getUdpPort())).isTrue(); assertThat(isInetAddress(p.getEndpoint().getHost())).isTrue(); assertThat(p.getId().extractArray()).hasSize(64);
@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 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()); }
@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 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 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()); } } }