@Override public String toString() { return shortId() + "@" + selfPeer.getEndpoint().getHost() + ':' + selfPeer.getEndpoint().getTcpPort(); }
private List<DiscoveryPeer> createPeersInLastBucket(final Peer host, final int n) { final List<DiscoveryPeer> newPeers = new ArrayList<DiscoveryPeer>(n); // Flipping the most significant bit of the keccak256 will place the peer // in the last bucket for the corresponding host peer. final Bytes32 keccak256 = host.keccak256(); final MutableBytesValue template = MutableBytesValue.create(keccak256.size()); byte msb = keccak256.get(0); msb ^= MOST_SIGNFICANT_BIT_MASK; template.set(0, msb); for (int i = 0; i < n; i++) { template.setInt(template.size() - 4, i); final Bytes32 newKeccak256 = Bytes32.leftPad(template.copy()); final DiscoveryPeer newPeer = mock(DiscoveryPeer.class); when(newPeer.keccak256()).thenReturn(newKeccak256); final MutableBytesValue newId = MutableBytesValue.create(64); UInt256.of(i).getBytes().copyTo(newId, newId.size() - UInt256Value.SIZE); when(newPeer.getId()).thenReturn(newId); when(newPeer.getEndpoint()) .thenReturn( new Endpoint( host.getEndpoint().getHost(), 100 + counter.incrementAndGet(), OptionalInt.empty())); newPeers.add(newPeer); } return newPeers; }
assertThat(isInetAddress(ping.getTo().getHost())).isTrue(); assertThat(isInetAddress(ping.getFrom().getHost())).isTrue(); assertThat(ping.getTo().getUdpPort()).isPositive(); assertThat(ping.getFrom().getUdpPort()).isPositive(); assertThat(isInetAddress(pong.getTo().getHost())).isTrue(); assertThat(pong.getTo().getUdpPort()).isPositive(); pong.getTo().getTcpPort().ifPresent(p -> assertThat(p).isPositive()); 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 createPeer() { final BytesValue id = fromHexString( "c7849b663d12a2b5bf05b1ebf5810364f4870d5f1053fbd7500d38bc54c705b453d7511ca8a4a86003d34d4c8ee0bbfcd387aa724f5b240b3ab4bbb994a1e09b"); final String host = "127.0.0.1"; final int port = 30303; final DiscoveryPeer peer = new DiscoveryPeer(id, host, port); assertEquals(id, peer.getId()); assertEquals(host, peer.getEndpoint().getHost()); assertEquals(port, peer.getEndpoint().getUdpPort()); }
@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()); } } }